Merge branch 'release/2.10.0'
This commit is contained in:
commit
ce9c8645df
@ -19,6 +19,7 @@ defaults: &defaults
|
|||||||
- COVERAGE: true
|
- COVERAGE: true
|
||||||
- LOG_LEVEL: warn
|
- LOG_LEVEL: warn
|
||||||
parallelism: 4
|
parallelism: 4
|
||||||
|
resource_class: large
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -122,9 +123,11 @@ jobs:
|
|||||||
mkdir -p coverage
|
mkdir -p coverage
|
||||||
~/tmp/cc-test-reporter before-build
|
~/tmp/cc-test-reporter before-build
|
||||||
TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
|
TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
|
||||||
bundle exec rspec --profile 10 \
|
bundle exec rspec --format progress \
|
||||||
--out test-results/rspec/rspec.xml \
|
--format RspecJunitFormatter \
|
||||||
|
--out ~/tmp/test-results/rspec.xml \
|
||||||
-- ${TESTFILES}
|
-- ${TESTFILES}
|
||||||
|
no_output_timeout: 30m
|
||||||
- run:
|
- run:
|
||||||
name: Code Climate Test Coverage
|
name: Code Climate Test Coverage
|
||||||
command: |
|
command: |
|
||||||
@ -137,7 +140,7 @@ jobs:
|
|||||||
~/tmp/cc-test-reporter before-build
|
~/tmp/cc-test-reporter before-build
|
||||||
TESTFILES=$(circleci tests glob **/specs/*.spec.js | circleci tests split --split-by=timings)
|
TESTFILES=$(circleci tests glob **/specs/*.spec.js | circleci tests split --split-by=timings)
|
||||||
yarn test:coverage --profile 10 \
|
yarn test:coverage --profile 10 \
|
||||||
--out test-results/frontend_specs/rspec.xml \
|
--out ~/tmp/test-results/yarn.xml \
|
||||||
-- ${TESTFILES}
|
-- ${TESTFILES}
|
||||||
- run:
|
- run:
|
||||||
name: Code Climate Test Coverage
|
name: Code Climate Test Coverage
|
||||||
|
|||||||
@ -7,8 +7,8 @@ end_of_line = lf
|
|||||||
charset = utf-8
|
charset = utf-8
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
indent_style = spaces
|
indent_style = space
|
||||||
tab_width = 2
|
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
|
indent_size = 2
|
||||||
|
|||||||
1
.github/workflows/publish_foss_docker.yml
vendored
1
.github/workflows/publish_foss_docker.yml
vendored
@ -58,5 +58,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: docker/Dockerfile
|
file: docker/Dockerfile
|
||||||
|
platforms: linux/amd64
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ env.DOCKER_TAG }}
|
tags: ${{ env.DOCKER_TAG }}
|
||||||
|
|||||||
5
.gitignore
vendored
5
.gitignore
vendored
@ -39,9 +39,6 @@ public/packs*
|
|||||||
*.un~
|
*.un~
|
||||||
.jest-cache
|
.jest-cache
|
||||||
|
|
||||||
#VS Code files
|
|
||||||
.vscode
|
|
||||||
|
|
||||||
# ignore jetbrains IDE files
|
# ignore jetbrains IDE files
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
@ -62,4 +59,4 @@ package-lock.json
|
|||||||
test/cypress/videos/*
|
test/cypress/videos/*
|
||||||
|
|
||||||
/config/master.key
|
/config/master.key
|
||||||
/config/*.enc
|
/config/*.enc
|
||||||
|
|||||||
@ -16,6 +16,7 @@ Metrics/ClassLength:
|
|||||||
- 'app/models/message.rb'
|
- 'app/models/message.rb'
|
||||||
- 'app/builders/messages/facebook/message_builder.rb'
|
- 'app/builders/messages/facebook/message_builder.rb'
|
||||||
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
|
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
|
||||||
|
- 'app/controllers/api/v1/accounts/conversations_controller.rb'
|
||||||
- 'app/listeners/action_cable_listener.rb'
|
- 'app/listeners/action_cable_listener.rb'
|
||||||
- 'app/models/conversation.rb'
|
- 'app/models/conversation.rb'
|
||||||
RSpec/ExampleLength:
|
RSpec/ExampleLength:
|
||||||
|
|||||||
32
.vscode/extensions.json
vendored
Normal file
32
.vscode/extensions.json
vendored
Normal file
@ -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",
|
||||||
|
]
|
||||||
|
}
|
||||||
1
Gemfile
1
Gemfile
@ -174,6 +174,7 @@ group :development, :test do
|
|||||||
gem 'listen'
|
gem 'listen'
|
||||||
gem 'mock_redis'
|
gem 'mock_redis'
|
||||||
gem 'pry-rails'
|
gem 'pry-rails'
|
||||||
|
gem 'rspec_junit_formatter'
|
||||||
gem 'rspec-rails', '~> 5.0.0'
|
gem 'rspec-rails', '~> 5.0.0'
|
||||||
gem 'rubocop', require: false
|
gem 'rubocop', require: false
|
||||||
gem 'rubocop-performance', require: false
|
gem 'rubocop-performance', require: false
|
||||||
|
|||||||
11
Gemfile.lock
11
Gemfile.lock
@ -286,9 +286,9 @@ GEM
|
|||||||
google-cloud-core (~> 1.6)
|
google-cloud-core (~> 1.6)
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
googleauth (>= 0.16.2, < 2.a)
|
||||||
mini_mime (~> 1.0)
|
mini_mime (~> 1.0)
|
||||||
google-protobuf (3.21.2)
|
google-protobuf (3.21.7)
|
||||||
google-protobuf (3.21.2-x86_64-darwin)
|
google-protobuf (3.21.7-x86_64-darwin)
|
||||||
google-protobuf (3.21.2-x86_64-linux)
|
google-protobuf (3.21.7-x86_64-linux)
|
||||||
googleapis-common-protos (1.3.12)
|
googleapis-common-protos (1.3.12)
|
||||||
google-protobuf (~> 3.14)
|
google-protobuf (~> 3.14)
|
||||||
googleapis-common-protos-types (~> 1.2)
|
googleapis-common-protos-types (~> 1.2)
|
||||||
@ -536,6 +536,8 @@ GEM
|
|||||||
rspec-mocks (~> 3.10)
|
rspec-mocks (~> 3.10)
|
||||||
rspec-support (~> 3.10)
|
rspec-support (~> 3.10)
|
||||||
rspec-support (3.11.0)
|
rspec-support (3.11.0)
|
||||||
|
rspec_junit_formatter (0.6.0)
|
||||||
|
rspec-core (>= 2, < 4, != 2.12.0)
|
||||||
rubocop (1.31.2)
|
rubocop (1.31.2)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
@ -769,6 +771,7 @@ DEPENDENCIES
|
|||||||
responders
|
responders
|
||||||
rest-client
|
rest-client
|
||||||
rspec-rails (~> 5.0.0)
|
rspec-rails (~> 5.0.0)
|
||||||
|
rspec_junit_formatter
|
||||||
rubocop
|
rubocop
|
||||||
rubocop-performance
|
rubocop-performance
|
||||||
rubocop-rails
|
rubocop-rails
|
||||||
@ -805,4 +808,4 @@ RUBY VERSION
|
|||||||
ruby 3.0.4p208
|
ruby 3.0.4p208
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.3.17
|
2.3.18
|
||||||
|
|||||||
@ -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
|
class ContactInboxBuilder
|
||||||
pattr_initialize [:contact_id!, :inbox_id!, :source_id]
|
pattr_initialize [:contact, :inbox, :source_id, { hmac_verified: false }]
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
@contact = Contact.find(contact_id)
|
@source_id ||= generate_source_id
|
||||||
@inbox = @contact.account.inboxes.find(inbox_id)
|
create_contact_inbox if source_id.present?
|
||||||
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?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -19,23 +18,37 @@ class ContactInboxBuilder
|
|||||||
when 'Channel::Whatsapp'
|
when 'Channel::Whatsapp'
|
||||||
wa_source_id
|
wa_source_id
|
||||||
when 'Channel::Email'
|
when 'Channel::Email'
|
||||||
@contact.email
|
email_source_id
|
||||||
when 'Channel::Sms'
|
when 'Channel::Sms'
|
||||||
@contact.phone_number
|
phone_source_id
|
||||||
when 'Channel::Api'
|
when 'Channel::Api', 'Channel::WebWidget'
|
||||||
SecureRandom.uuid
|
SecureRandom.uuid
|
||||||
|
else
|
||||||
|
raise "Unsupported operation for this channel: #{@inbox.channel_type}"
|
||||||
end
|
end
|
||||||
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
|
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
|
# whatsapp doesn't want the + in e164 format
|
||||||
"#{@contact.phone_number}.delete('+')"
|
@contact.phone_number.delete('+').to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def twilio_source_id
|
def twilio_source_id
|
||||||
return unless @contact.phone_number
|
raise ActionController::ParameterMissing, 'contact phone number' unless @contact.phone_number
|
||||||
|
|
||||||
case @inbox.channel.medium
|
case @inbox.channel.medium
|
||||||
when 'sms'
|
when 'sms'
|
||||||
@ -45,11 +58,11 @@ class ContactInboxBuilder
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_contact_inbox(source_id)
|
def create_contact_inbox
|
||||||
::ContactInbox.find_or_create_by!(
|
::ContactInbox.create_with(hmac_verified: hmac_verified || false).find_or_create_by!(
|
||||||
contact_id: @contact.id,
|
contact_id: @contact.id,
|
||||||
inbox_id: @inbox.id,
|
inbox_id: @inbox.id,
|
||||||
source_id: source_id
|
source_id: @source_id
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,25 +1,47 @@
|
|||||||
class ContactBuilder
|
# This Builder will create a contact and contact inbox with specified attributes.
|
||||||
pattr_initialize [:source_id!, :inbox!, :contact_attributes!, :hmac_verified]
|
# 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
|
def perform
|
||||||
contact_inbox = inbox.contact_inboxes.find_by(source_id: source_id)
|
find_or_create_contact_and_contact_inbox
|
||||||
return contact_inbox if 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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def build_contact_with_contact_inbox
|
||||||
|
@contact = find_contact || create_contact
|
||||||
|
@contact_inbox = create_contact_inbox
|
||||||
|
end
|
||||||
|
|
||||||
def account
|
def account
|
||||||
@account ||= inbox.account
|
@account ||= inbox.account
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_contact_inbox(contact)
|
def create_contact_inbox
|
||||||
::ContactInbox.create_with(hmac_verified: hmac_verified || false).find_or_create_by!(
|
ContactInboxBuilder.new(
|
||||||
contact_id: contact.id,
|
contact: @contact,
|
||||||
inbox_id: inbox.id,
|
inbox: @inbox,
|
||||||
source_id: source_id
|
source_id: @source_id,
|
||||||
)
|
hmac_verified: hmac_verified
|
||||||
|
).perform
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_contact_avatar(contact)
|
def update_contact_avatar(contact)
|
||||||
@ -61,16 +83,4 @@ class ContactBuilder
|
|||||||
|
|
||||||
account.contacts.find_by(phone_number: phone_number)
|
account.contacts.find_by(phone_number: phone_number)
|
||||||
end
|
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
|
end
|
||||||
@ -22,10 +22,9 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
return if @inbox.channel.reauthorization_required?
|
return if @inbox.channel.reauthorization_required?
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
build_contact
|
build_contact_inbox
|
||||||
build_message
|
build_message
|
||||||
end
|
end
|
||||||
ensure_contact_avatar
|
|
||||||
rescue Koala::Facebook::AuthenticationError
|
rescue Koala::Facebook::AuthenticationError
|
||||||
@inbox.channel.authorization_error!
|
@inbox.channel.authorization_error!
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
@ -35,15 +34,12 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def contact
|
def build_contact_inbox
|
||||||
@contact ||= @inbox.contact_inboxes.find_by(source_id: @sender_id)&.contact
|
@contact_inbox = ::ContactInboxWithContactBuilder.new(
|
||||||
end
|
source_id: @sender_id,
|
||||||
|
inbox: @inbox,
|
||||||
def build_contact
|
contact_attributes: contact_params
|
||||||
return if contact.present?
|
).perform
|
||||||
|
|
||||||
@contact = Contact.create!(contact_params.except(:remote_avatar_url))
|
|
||||||
@contact_inbox = ContactInbox.find_or_create_by!(contact: contact, inbox: @inbox, source_id: @sender_id)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_message
|
def build_message
|
||||||
@ -54,19 +50,11 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
end
|
end
|
||||||
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
|
def conversation
|
||||||
@conversation ||= Conversation.find_by(conversation_params) || build_conversation
|
@conversation ||= Conversation.find_by(conversation_params) || build_conversation
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_conversation
|
def build_conversation
|
||||||
@contact_inbox ||= contact.contact_inboxes.find_by!(source_id: @sender_id)
|
|
||||||
Conversation.create!(conversation_params.merge(
|
Conversation.create!(conversation_params.merge(
|
||||||
contact_inbox_id: @contact_inbox.id
|
contact_inbox_id: @contact_inbox.id
|
||||||
))
|
))
|
||||||
@ -94,7 +82,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
{
|
{
|
||||||
account_id: @inbox.account_id,
|
account_id: @inbox.account_id,
|
||||||
inbox_id: @inbox.id,
|
inbox_id: @inbox.id,
|
||||||
contact_id: contact.id
|
contact_id: @contact_inbox.contact_id
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -105,7 +93,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
message_type: @message_type,
|
message_type: @message_type,
|
||||||
content: response.content,
|
content: response.content,
|
||||||
source_id: response.identifier,
|
source_id: response.identifier,
|
||||||
sender: @outgoing_echo ? nil : contact
|
sender: @outgoing_echo ? nil : @contact_inbox.contact
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -113,7 +101,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||||||
{
|
{
|
||||||
name: "#{result['first_name'] || 'John'} #{result['last_name'] || 'Doe'}",
|
name: "#{result['first_name'] || 'John'} #{result['last_name'] || 'Doe'}",
|
||||||
account_id: @inbox.account_id,
|
account_id: @inbox.account_id,
|
||||||
remote_avatar_url: result['profile_pic'] || ''
|
avatar_url: result['profile_pic']
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -42,8 +42,8 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
|
|||||||
|
|
||||||
def article_params
|
def article_params
|
||||||
params.require(:article).permit(
|
params.require(:article).permit(
|
||||||
:title, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status, meta: [:title, :description,
|
:title, :slug, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status, meta: [:title, :description,
|
||||||
{ tags: [] }]
|
{ tags: [] }]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,11 @@ class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts:
|
|||||||
before_action :ensure_inbox, only: [:create]
|
before_action :ensure_inbox, only: [:create]
|
||||||
|
|
||||||
def create
|
def create
|
||||||
source_id = params[:source_id] || SecureRandom.uuid
|
@contact_inbox = ContactInboxBuilder.new(
|
||||||
@contact_inbox = ContactInbox.create!(contact: @contact, inbox: @inbox, source_id: source_id)
|
contact: @contact,
|
||||||
|
inbox: @inbox,
|
||||||
|
source_id: params[:source_id]
|
||||||
|
).perform
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@ -134,8 +134,11 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
|
|||||||
return if params[:inbox_id].blank?
|
return if params[:inbox_id].blank?
|
||||||
|
|
||||||
inbox = Current.account.inboxes.find(params[:inbox_id])
|
inbox = Current.account.inboxes.find(params[:inbox_id])
|
||||||
source_id = params[:source_id] || SecureRandom.uuid
|
ContactInboxBuilder.new(
|
||||||
ContactInbox.create!(contact: @contact, inbox: inbox, source_id: source_id)
|
contact: @contact,
|
||||||
|
inbox: inbox,
|
||||||
|
source_id: params[:source_id]
|
||||||
|
).perform
|
||||||
end
|
end
|
||||||
|
|
||||||
def permitted_params
|
def permitted_params
|
||||||
|
|||||||
@ -3,7 +3,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||||||
include DateRangeHelper
|
include DateRangeHelper
|
||||||
|
|
||||||
before_action :conversation, except: [:index, :meta, :search, :create, :filter]
|
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
|
def index
|
||||||
result = conversation_finder.perform
|
result = conversation_finder.perform
|
||||||
@ -109,22 +109,35 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||||||
authorize @conversation.inbox, :show?
|
authorize @conversation.inbox, :show?
|
||||||
end
|
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
|
def contact_inbox
|
||||||
@contact_inbox = build_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])
|
@contact_inbox ||= ::ContactInbox.find_by!(source_id: params[:source_id])
|
||||||
authorize @contact_inbox.inbox, :show?
|
authorize @contact_inbox.inbox, :show?
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_contact_inbox
|
def build_contact_inbox
|
||||||
return if params[:contact_id].blank? || params[:inbox_id].blank?
|
return if @inbox.blank? || @contact.blank?
|
||||||
|
|
||||||
inbox = Current.account.inboxes.find(params[:inbox_id])
|
|
||||||
authorize inbox, :show?
|
|
||||||
|
|
||||||
ContactInboxBuilder.new(
|
ContactInboxBuilder.new(
|
||||||
contact_id: params[:contact_id],
|
contact: @contact,
|
||||||
inbox_id: inbox.id,
|
inbox: @inbox,
|
||||||
source_id: params[:source_id]
|
source_id: params[:source_id]
|
||||||
).perform
|
).perform
|
||||||
end
|
end
|
||||||
|
|||||||
@ -22,7 +22,7 @@ class Api::V1::Accounts::CsatSurveyResponsesController < Api::V1::Accounts::Base
|
|||||||
def download
|
def download
|
||||||
response.headers['Content-Type'] = 'text/csv'
|
response.headers['Content-Type'] = 'text/csv'
|
||||||
response.headers['Content-Disposition'] = 'attachment; filename=csat_report.csv'
|
response.headers['Content-Disposition'] = 'attachment; filename=csat_report.csv'
|
||||||
render layout: false, template: 'api/v1/accounts/csat_survey_responses/download.csv.erb', format: 'csv'
|
render layout: false, template: 'api/v1/accounts/csat_survey_responses/download', formats: [:csv]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@ -24,7 +24,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
).perform
|
).perform
|
||||||
if @user
|
if @user
|
||||||
send_auth_headers(@user)
|
send_auth_headers(@user)
|
||||||
render 'api/v1/accounts/create.json', locals: { resource: @user }
|
render 'api/v1/accounts/create', format: :json, locals: { resource: @user }
|
||||||
else
|
else
|
||||||
render_error_response(CustomExceptions::Account::SignupFailed.new({}))
|
render_error_response(CustomExceptions::Account::SignupFailed.new({}))
|
||||||
end
|
end
|
||||||
@ -32,7 +32,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
|
|
||||||
def show
|
def show
|
||||||
@latest_chatwoot_version = ::Redis::Alfred.get(::Redis::Alfred::LATEST_CHATWOOT_VERSION)
|
@latest_chatwoot_version = ::Redis::Alfred.get(::Redis::Alfred::LATEST_CHATWOOT_VERSION)
|
||||||
render 'api/v1/accounts/show.json'
|
render 'api/v1/accounts/show', format: :json
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class Api::V1::NotificationSubscriptionsController < Api::BaseController
|
|||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
notification_subscription = NotificationSubscription.where(["subscription_attributes->>'push_token' = ?", params[:push_token]]).first
|
notification_subscription = NotificationSubscription.where(["subscription_attributes->>'push_token' = ?", params[:push_token]]).first
|
||||||
notification_subscription.destroy!
|
notification_subscription.destroy! if notification_subscription.present?
|
||||||
head :ok
|
head :ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,11 @@ class Api::V1::ProfilesController < Api::BaseController
|
|||||||
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
|
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_active_account
|
||||||
|
@user.account_users.find_by(account_id: profile_params[:account_id]).update(active_at: Time.now.utc)
|
||||||
|
head :ok
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_user
|
def set_user
|
||||||
@ -39,6 +44,7 @@ class Api::V1::ProfilesController < Api::BaseController
|
|||||||
:display_name,
|
:display_name,
|
||||||
:avatar,
|
:avatar,
|
||||||
:message_signature,
|
:message_signature,
|
||||||
|
:account_id,
|
||||||
ui_settings: {}
|
ui_settings: {}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -14,22 +14,22 @@ class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
|
|||||||
|
|
||||||
def agents
|
def agents
|
||||||
@report_data = generate_agents_report
|
@report_data = generate_agents_report
|
||||||
generate_csv('agents_report', 'api/v2/accounts/reports/agents.csv.erb')
|
generate_csv('agents_report', 'api/v2/accounts/reports/agents')
|
||||||
end
|
end
|
||||||
|
|
||||||
def inboxes
|
def inboxes
|
||||||
@report_data = generate_inboxes_report
|
@report_data = generate_inboxes_report
|
||||||
generate_csv('inboxes_report', 'api/v2/accounts/reports/inboxes.csv.erb')
|
generate_csv('inboxes_report', 'api/v2/accounts/reports/inboxes')
|
||||||
end
|
end
|
||||||
|
|
||||||
def labels
|
def labels
|
||||||
@report_data = generate_labels_report
|
@report_data = generate_labels_report
|
||||||
generate_csv('labels_report', 'api/v2/accounts/reports/labels.csv.erb')
|
generate_csv('labels_report', 'api/v2/accounts/reports/labels')
|
||||||
end
|
end
|
||||||
|
|
||||||
def teams
|
def teams
|
||||||
@report_data = generate_teams_report
|
@report_data = generate_teams_report
|
||||||
generate_csv('teams_report', 'api/v2/accounts/reports/teams.csv.erb')
|
generate_csv('teams_report', 'api/v2/accounts/reports/teams')
|
||||||
end
|
end
|
||||||
|
|
||||||
def conversations
|
def conversations
|
||||||
@ -43,7 +43,7 @@ class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
|
|||||||
def generate_csv(filename, template)
|
def generate_csv(filename, template)
|
||||||
response.headers['Content-Type'] = 'text/csv'
|
response.headers['Content-Type'] = 'text/csv'
|
||||||
response.headers['Content-Disposition'] = "attachment; filename=#{filename}.csv"
|
response.headers['Content-Disposition'] = "attachment; filename=#{filename}.csv"
|
||||||
render layout: false, template: template, format: 'csv'
|
render layout: false, template: template, formats: [:csv]
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_authorization
|
def check_authorization
|
||||||
|
|||||||
@ -13,6 +13,8 @@ module RequestExceptionHandler
|
|||||||
render_not_found_error('Resource could not be found')
|
render_not_found_error('Resource could not be found')
|
||||||
rescue Pundit::NotAuthorizedError
|
rescue Pundit::NotAuthorizedError
|
||||||
render_unauthorized('You are not authorized to do this action')
|
render_unauthorized('You are not authorized to do this action')
|
||||||
|
rescue ActionController::ParameterMissing => e
|
||||||
|
render_could_not_create_error(e.message)
|
||||||
ensure
|
ensure
|
||||||
# to address the thread variable leak issues in Puma/Thin webserver
|
# to address the thread variable leak issues in Puma/Thin webserver
|
||||||
Current.reset
|
Current.reset
|
||||||
|
|||||||
@ -45,6 +45,7 @@ class DashboardController < ActionController::Base
|
|||||||
@portal = Portal.find_by(custom_domain: domain)
|
@portal = Portal.find_by(custom_domain: domain)
|
||||||
return unless @portal
|
return unless @portal
|
||||||
|
|
||||||
|
@locale = @portal.default_locale
|
||||||
render 'public/api/v1/portals/show', layout: 'portal', portal: @portal and return
|
render 'public/api/v1/portals/show', layout: 'portal', portal: @portal and return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@ class DeviseOverrides::ConfirmationsController < Devise::ConfirmationsController
|
|||||||
|
|
||||||
def render_confirmation_success
|
def render_confirmation_success
|
||||||
send_auth_headers(@confirmable)
|
send_auth_headers(@confirmable)
|
||||||
render partial: 'devise/auth.json', locals: { resource: @confirmable }
|
render partial: 'devise/auth', formats: [:json], locals: { resource: @confirmable }
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_confirmation_error
|
def render_confirmation_error
|
||||||
|
|||||||
@ -11,7 +11,7 @@ class DeviseOverrides::PasswordsController < Devise::PasswordsController
|
|||||||
@recoverable = User.find_by(reset_password_token: reset_password_token)
|
@recoverable = User.find_by(reset_password_token: reset_password_token)
|
||||||
if @recoverable && reset_password_and_confirmation(@recoverable)
|
if @recoverable && reset_password_and_confirmation(@recoverable)
|
||||||
send_auth_headers(@recoverable)
|
send_auth_headers(@recoverable)
|
||||||
render partial: 'devise/auth.json', locals: { resource: @recoverable }
|
render partial: 'devise/auth', formats: [:json], locals: { resource: @recoverable }
|
||||||
else
|
else
|
||||||
render json: { message: 'Invalid token', redirect_url: '/' }, status: :unprocessable_entity
|
render json: { message: 'Invalid token', redirect_url: '/' }, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
|
|||||||
@ -16,7 +16,7 @@ class DeviseOverrides::SessionsController < ::DeviseTokenAuth::SessionsControlle
|
|||||||
end
|
end
|
||||||
|
|
||||||
def render_create_success
|
def render_create_success
|
||||||
render partial: 'devise/auth.json', locals: { resource: @resource }
|
render partial: 'devise/auth', formats: [:json], locals: { resource: @resource }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@ -2,7 +2,7 @@ class DeviseOverrides::TokenValidationsController < ::DeviseTokenAuth::TokenVali
|
|||||||
def validate_token
|
def validate_token
|
||||||
# @resource will have been set by set_user_by_token concern
|
# @resource will have been set by set_user_by_token concern
|
||||||
if @resource
|
if @resource
|
||||||
render 'devise/token.json'
|
render 'devise/token', formats: [:json]
|
||||||
else
|
else
|
||||||
render_validate_token_error
|
render_validate_token_error
|
||||||
end
|
end
|
||||||
|
|||||||
@ -51,6 +51,6 @@ class Platform::Api::V1::UsersController < PlatformController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def user_params
|
def user_params
|
||||||
params.permit(:name, :email, :password, custom_attributes: {})
|
params.permit(:name, :display_name, :email, :password, custom_attributes: {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -4,7 +4,7 @@ class Public::Api::V1::Inboxes::ContactsController < Public::Api::V1::InboxesCon
|
|||||||
|
|
||||||
def create
|
def create
|
||||||
source_id = params[:source_id] || SecureRandom.uuid
|
source_id = params[:source_id] || SecureRandom.uuid
|
||||||
@contact_inbox = ::ContactBuilder.new(
|
@contact_inbox = ::ContactInboxWithContactBuilder.new(
|
||||||
source_id: source_id,
|
source_id: source_id,
|
||||||
inbox: @inbox_channel.inbox,
|
inbox: @inbox_channel.inbox,
|
||||||
contact_attributes: permitted_params.except(:identifier, :identifier_hash)
|
contact_attributes: permitted_params.except(:identifier, :identifier_hash)
|
||||||
|
|||||||
@ -87,6 +87,9 @@ export default {
|
|||||||
},
|
},
|
||||||
async initializeAccount() {
|
async initializeAccount() {
|
||||||
await this.$store.dispatch('accounts/get');
|
await this.$store.dispatch('accounts/get');
|
||||||
|
this.$store.dispatch('setActiveAccount', {
|
||||||
|
accountId: this.currentAccountId,
|
||||||
|
});
|
||||||
const {
|
const {
|
||||||
locale,
|
locale,
|
||||||
latest_chatwoot_version: latestChatwootVersion,
|
latest_chatwoot_version: latestChatwootVersion,
|
||||||
|
|||||||
9
app/javascript/dashboard/api/agentBots.js
Normal file
9
app/javascript/dashboard/api/agentBots.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import ApiClient from './ApiClient';
|
||||||
|
|
||||||
|
class AgentBotsAPI extends ApiClient {
|
||||||
|
constructor() {
|
||||||
|
super('agent_bots', { accountScoped: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new AgentBotsAPI();
|
||||||
@ -147,4 +147,13 @@ export default {
|
|||||||
deleteAvatar() {
|
deleteAvatar() {
|
||||||
return axios.delete(endPoints('deleteAvatar').url);
|
return axios.delete(endPoints('deleteAvatar').url);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setActiveAccount({ accountId }) {
|
||||||
|
const urlData = endPoints('setActiveAccount');
|
||||||
|
return axios.put(urlData.url, {
|
||||||
|
profile: {
|
||||||
|
account_id: accountId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -40,6 +40,10 @@ const endPoints = {
|
|||||||
deleteAvatar: {
|
deleteAvatar: {
|
||||||
url: '/api/v1/profile/avatar',
|
url: '/api/v1/profile/avatar',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setActiveAccount: {
|
||||||
|
url: '/api/v1/profile/set_active_account',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default page => {
|
export default page => {
|
||||||
|
|||||||
16
app/javascript/dashboard/api/macros.js
Normal file
16
app/javascript/dashboard/api/macros.js
Normal file
@ -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();
|
||||||
13
app/javascript/dashboard/api/specs/agentBots.spec.js
Normal file
13
app/javascript/dashboard/api/specs/agentBots.spec.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import AgentBotsAPI from '../agentBots';
|
||||||
|
import ApiClient from '../ApiClient';
|
||||||
|
|
||||||
|
describe('#AgentBotsAPI', () => {
|
||||||
|
it('creates correct instance', () => {
|
||||||
|
expect(AgentBotsAPI).toBeInstanceOf(ApiClient);
|
||||||
|
expect(AgentBotsAPI).toHaveProperty('get');
|
||||||
|
expect(AgentBotsAPI).toHaveProperty('show');
|
||||||
|
expect(AgentBotsAPI).toHaveProperty('create');
|
||||||
|
expect(AgentBotsAPI).toHaveProperty('update');
|
||||||
|
expect(AgentBotsAPI).toHaveProperty('delete');
|
||||||
|
});
|
||||||
|
});
|
||||||
14
app/javascript/dashboard/api/specs/macros.spec.js
Normal file
14
app/javascript/dashboard/api/specs/macros.spec.js
Normal file
@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -113,9 +113,22 @@ $default-button-height: 4.0rem;
|
|||||||
}
|
}
|
||||||
|
|
||||||
&.clear {
|
&.clear {
|
||||||
|
color: var(--w-700);
|
||||||
|
|
||||||
|
&.secondary {
|
||||||
|
color: var(--s-700)
|
||||||
|
}
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
color: var(--g-700)
|
||||||
|
}
|
||||||
|
|
||||||
|
&.alert {
|
||||||
|
color: var(--r-700)
|
||||||
|
}
|
||||||
|
|
||||||
&.warning {
|
&.warning {
|
||||||
color: var(--y-600);
|
color: var(--y-700)
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
@ -146,6 +159,8 @@ $default-button-height: 4.0rem;
|
|||||||
|
|
||||||
&.small {
|
&.small {
|
||||||
height: var(--space-large);
|
height: var(--space-large);
|
||||||
|
padding-bottom: var(--space-smaller);
|
||||||
|
padding-top: var(--space-smaller);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.large {
|
&.large {
|
||||||
|
|||||||
@ -14,15 +14,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.modal--close {
|
.modal--close {
|
||||||
border-radius: 50%;
|
|
||||||
color: $color-heading;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: $font-size-big;
|
|
||||||
line-height: $space-normal;
|
|
||||||
padding: $space-normal;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: $space-micro;
|
right: $space-small;
|
||||||
top: $space-micro;
|
top: $space-small;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: $color-background;
|
background: $color-background;
|
||||||
|
|||||||
@ -7,9 +7,13 @@
|
|||||||
@click="onBackDropClick"
|
@click="onBackDropClick"
|
||||||
>
|
>
|
||||||
<div :class="modalContainerClassName" @click.stop>
|
<div :class="modalContainerClassName" @click.stop>
|
||||||
<button class="modal--close" @click="close">
|
<woot-button
|
||||||
<fluent-icon icon="dismiss" />
|
color-scheme="secondary"
|
||||||
</button>
|
icon="dismiss"
|
||||||
|
variant="clear"
|
||||||
|
class="modal--close"
|
||||||
|
@click="close"
|
||||||
|
/>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -73,14 +73,14 @@ export default {
|
|||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
currentUser: 'getCurrentUser',
|
|
||||||
globalConfig: 'globalConfig/get',
|
|
||||||
isACustomBrandedInstance: 'globalConfig/isACustomBrandedInstance',
|
|
||||||
isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',
|
|
||||||
inboxes: 'inboxes/getInboxes',
|
|
||||||
accountId: 'getCurrentAccountId',
|
accountId: 'getCurrentAccountId',
|
||||||
currentRole: 'getCurrentRole',
|
currentRole: 'getCurrentRole',
|
||||||
|
currentUser: 'getCurrentUser',
|
||||||
|
globalConfig: 'globalConfig/get',
|
||||||
|
inboxes: 'inboxes/getInboxes',
|
||||||
|
isACustomBrandedInstance: 'globalConfig/isACustomBrandedInstance',
|
||||||
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||||
|
isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',
|
||||||
labels: 'labels/getLabelsOnSidebar',
|
labels: 'labels/getLabelsOnSidebar',
|
||||||
teams: 'teams/getMyTeams',
|
teams: 'teams/getMyTeams',
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -39,7 +39,7 @@ const primaryMenuItems = accountId => [
|
|||||||
label: 'HELP_CENTER.TITLE',
|
label: 'HELP_CENTER.TITLE',
|
||||||
featureFlag: 'help_center',
|
featureFlag: 'help_center',
|
||||||
toState: frontendURL(`accounts/${accountId}/portals`),
|
toState: frontendURL(`accounts/${accountId}/portals`),
|
||||||
toStateName: 'list_all_portals',
|
toStateName: 'default_portal_articles',
|
||||||
roles: ['administrator'],
|
roles: ['administrator'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,45 +1,58 @@
|
|||||||
|
import { FEATURE_FLAGS } from '../../../../featureFlags';
|
||||||
import { frontendURL } from '../../../../helper/URLHelper';
|
import { frontendURL } from '../../../../helper/URLHelper';
|
||||||
|
|
||||||
const settings = accountId => ({
|
const settings = accountId => ({
|
||||||
parentNav: 'settings',
|
parentNav: 'settings',
|
||||||
routes: [
|
routes: [
|
||||||
|
'agent_bots',
|
||||||
'agent_list',
|
'agent_list',
|
||||||
'canned_list',
|
|
||||||
'labels_list',
|
|
||||||
'settings_inbox',
|
|
||||||
'attributes_list',
|
'attributes_list',
|
||||||
'settings_inbox_new',
|
'automation_list',
|
||||||
'settings_inbox_list',
|
'billing_settings_index',
|
||||||
'settings_inbox_show',
|
'canned_list',
|
||||||
'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',
|
|
||||||
'general_settings_index',
|
'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_list',
|
||||||
'settings_teams_new',
|
'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: [
|
menuItems: [
|
||||||
|
{
|
||||||
|
icon: 'briefcase',
|
||||||
|
label: 'ACCOUNT_SETTINGS',
|
||||||
|
hasSubMenu: false,
|
||||||
|
toState: frontendURL(`accounts/${accountId}/settings/general`),
|
||||||
|
toStateName: 'general_settings_index',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
icon: 'people',
|
icon: 'people',
|
||||||
label: 'AGENTS',
|
label: 'AGENTS',
|
||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/agents/list`),
|
toState: frontendURL(`accounts/${accountId}/settings/agents/list`),
|
||||||
toStateName: 'agent_list',
|
toStateName: 'agent_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.AGENT_MANAGEMENT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'people-team',
|
icon: 'people-team',
|
||||||
@ -47,6 +60,7 @@ const settings = accountId => ({
|
|||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/teams/list`),
|
toState: frontendURL(`accounts/${accountId}/settings/teams/list`),
|
||||||
toStateName: 'settings_teams_list',
|
toStateName: 'settings_teams_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'mail-inbox-all',
|
icon: 'mail-inbox-all',
|
||||||
@ -54,6 +68,7 @@ const settings = accountId => ({
|
|||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/inboxes/list`),
|
toState: frontendURL(`accounts/${accountId}/settings/inboxes/list`),
|
||||||
toStateName: 'settings_inbox_list',
|
toStateName: 'settings_inbox_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'tag',
|
icon: 'tag',
|
||||||
@ -61,6 +76,7 @@ const settings = accountId => ({
|
|||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/labels/list`),
|
toState: frontendURL(`accounts/${accountId}/settings/labels/list`),
|
||||||
toStateName: 'labels_list',
|
toStateName: 'labels_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.LABELS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'code',
|
icon: 'code',
|
||||||
@ -70,13 +86,34 @@ const settings = accountId => ({
|
|||||||
`accounts/${accountId}/settings/custom-attributes/list`
|
`accounts/${accountId}/settings/custom-attributes/list`
|
||||||
),
|
),
|
||||||
toStateName: 'attributes_list',
|
toStateName: 'attributes_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.CUSTOM_ATTRIBUTES,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'automation',
|
icon: 'automation',
|
||||||
label: 'AUTOMATION',
|
label: 'AUTOMATION',
|
||||||
|
beta: true,
|
||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/automation/list`),
|
toState: frontendURL(`accounts/${accountId}/settings/automation/list`),
|
||||||
toStateName: 'automation_list',
|
toStateName: 'automation_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.AUTOMATIONS,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'bot',
|
||||||
|
label: 'AGENT_BOTS',
|
||||||
|
beta: true,
|
||||||
|
hasSubMenu: false,
|
||||||
|
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
|
||||||
|
toStateName: 'agent_bots',
|
||||||
|
featureFlag: FEATURE_FLAGS.AGENT_BOTS,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'flash-settings',
|
||||||
|
label: 'MACROS',
|
||||||
|
hasSubMenu: false,
|
||||||
|
toState: frontendURL(`accounts/${accountId}/settings/macros`),
|
||||||
|
toStateName: 'macros_wrapper',
|
||||||
|
beta: true,
|
||||||
|
featureFlag: FEATURE_FLAGS.MACROS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'chat-multiple',
|
icon: 'chat-multiple',
|
||||||
@ -86,6 +123,7 @@ const settings = accountId => ({
|
|||||||
`accounts/${accountId}/settings/canned-response/list`
|
`accounts/${accountId}/settings/canned-response/list`
|
||||||
),
|
),
|
||||||
toStateName: 'canned_list',
|
toStateName: 'canned_list',
|
||||||
|
featureFlag: FEATURE_FLAGS.CANNED_RESPONSES,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'flash-on',
|
icon: 'flash-on',
|
||||||
@ -93,6 +131,7 @@ const settings = accountId => ({
|
|||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/integrations`),
|
toState: frontendURL(`accounts/${accountId}/settings/integrations`),
|
||||||
toStateName: 'settings_integrations',
|
toStateName: 'settings_integrations',
|
||||||
|
featureFlag: FEATURE_FLAGS.INTEGRATIONS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'star-emphasis',
|
icon: 'star-emphasis',
|
||||||
@ -100,6 +139,7 @@ const settings = accountId => ({
|
|||||||
hasSubMenu: false,
|
hasSubMenu: false,
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/applications`),
|
toState: frontendURL(`accounts/${accountId}/settings/applications`),
|
||||||
toStateName: 'settings_applications',
|
toStateName: 'settings_applications',
|
||||||
|
featureFlag: FEATURE_FLAGS.INTEGRATIONS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'credit-card-person',
|
icon: 'credit-card-person',
|
||||||
@ -109,13 +149,6 @@ const settings = accountId => ({
|
|||||||
toStateName: 'billing_settings_index',
|
toStateName: 'billing_settings_index',
|
||||||
showOnlyOnCloud: true,
|
showOnlyOnCloud: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
icon: 'settings',
|
|
||||||
label: 'ACCOUNT_SETTINGS',
|
|
||||||
hasSubMenu: false,
|
|
||||||
toState: frontendURL(`accounts/${accountId}/settings/general`),
|
|
||||||
toStateName: 'general_settings_index',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -8,25 +8,33 @@
|
|||||||
:header-title="$t('SIDEBAR_ITEMS.CHANGE_ACCOUNTS')"
|
:header-title="$t('SIDEBAR_ITEMS.CHANGE_ACCOUNTS')"
|
||||||
:header-content="$t('SIDEBAR_ITEMS.SELECTOR_SUBTITLE')"
|
:header-content="$t('SIDEBAR_ITEMS.SELECTOR_SUBTITLE')"
|
||||||
/>
|
/>
|
||||||
<div
|
<div class="account-selector--wrap">
|
||||||
v-for="account in currentUser.accounts"
|
<div
|
||||||
:key="account.id"
|
v-for="account in currentUser.accounts"
|
||||||
class="account-selector"
|
:key="account.id"
|
||||||
>
|
class="account-selector"
|
||||||
<a :href="`/app/accounts/${account.id}/dashboard`">
|
>
|
||||||
<fluent-icon
|
<button
|
||||||
v-if="account.id === accountId"
|
class="button expanded clear link"
|
||||||
class="selected--account"
|
@click="onChangeAccount(account.id)"
|
||||||
icon="checkmark-circle"
|
>
|
||||||
type="solid"
|
<span class="button__content">
|
||||||
size="24"
|
<label :for="account.name" class="account-details--wrap">
|
||||||
/>
|
<div class="account--name">{{ account.name }}</div>
|
||||||
<label :for="account.name" class="account--details">
|
<div class="account--role">{{ account.role }}</div>
|
||||||
<div class="account--name">{{ account.name }}</div>
|
</label>
|
||||||
<div class="account--role">{{ account.role }}</div>
|
</span>
|
||||||
</label>
|
<fluent-icon
|
||||||
</a>
|
v-show="account.id === accountId"
|
||||||
|
class="selected--account"
|
||||||
|
icon="checkmark-circle"
|
||||||
|
type="solid"
|
||||||
|
size="24"
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="globalConfig.createNewAccountFromDashboard"
|
v-if="globalConfig.createNewAccountFromDashboard"
|
||||||
class="modal-footer delete-item"
|
class="modal-footer delete-item"
|
||||||
@ -58,5 +66,40 @@ export default {
|
|||||||
globalConfig: 'globalConfig/get',
|
globalConfig: 'globalConfig/get',
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
onChangeAccount(accountId) {
|
||||||
|
const accountUrl = `/app/accounts/${accountId}/dashboard`;
|
||||||
|
window.location.href = accountUrl;
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.account-selector--wrap {
|
||||||
|
margin-top: var(--space-normal);
|
||||||
|
}
|
||||||
|
.account-selector {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
.button {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: var(--space-one) var(--space-normal);
|
||||||
|
.account-details--wrap {
|
||||||
|
text-align: left;
|
||||||
|
.account--name {
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: var(--font-size-medium);
|
||||||
|
font-weight: var(--font-weight-medium);
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.account--role {
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: var(--font-size-mini);
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -20,6 +20,8 @@
|
|||||||
import { frontendURL } from '../../../helper/URLHelper';
|
import { frontendURL } from '../../../helper/URLHelper';
|
||||||
import SecondaryNavItem from './SecondaryNavItem.vue';
|
import SecondaryNavItem from './SecondaryNavItem.vue';
|
||||||
import AccountContext from './AccountContext.vue';
|
import AccountContext from './AccountContext.vue';
|
||||||
|
import { mapGetters } from 'vuex';
|
||||||
|
import { FEATURE_FLAGS } from '../../../featureFlags';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -61,6 +63,9 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
...mapGetters({
|
||||||
|
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||||
|
}),
|
||||||
hasSecondaryMenu() {
|
hasSecondaryMenu() {
|
||||||
return this.menuConfig.menuItems && this.menuConfig.menuItems.length;
|
return this.menuConfig.menuItems && this.menuConfig.menuItems.length;
|
||||||
},
|
},
|
||||||
@ -89,7 +94,7 @@ export default {
|
|||||||
icon: 'folder',
|
icon: 'folder',
|
||||||
label: 'INBOXES',
|
label: 'INBOXES',
|
||||||
hasSubMenu: true,
|
hasSubMenu: true,
|
||||||
newLink: true,
|
newLink: this.showNewLink(FEATURE_FLAGS.INBOX_MANAGEMENT),
|
||||||
newLinkTag: 'NEW_INBOX',
|
newLinkTag: 'NEW_INBOX',
|
||||||
key: 'inbox',
|
key: 'inbox',
|
||||||
toState: frontendURL(`accounts/${this.accountId}/settings/inboxes/new`),
|
toState: frontendURL(`accounts/${this.accountId}/settings/inboxes/new`),
|
||||||
@ -117,7 +122,7 @@ export default {
|
|||||||
icon: 'number-symbol',
|
icon: 'number-symbol',
|
||||||
label: 'LABELS',
|
label: 'LABELS',
|
||||||
hasSubMenu: true,
|
hasSubMenu: true,
|
||||||
newLink: true,
|
newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT),
|
||||||
newLinkTag: 'NEW_LABEL',
|
newLinkTag: 'NEW_LABEL',
|
||||||
key: 'label',
|
key: 'label',
|
||||||
toState: frontendURL(`accounts/${this.accountId}/settings/labels`),
|
toState: frontendURL(`accounts/${this.accountId}/settings/labels`),
|
||||||
@ -141,7 +146,7 @@ export default {
|
|||||||
label: 'TAGGED_WITH',
|
label: 'TAGGED_WITH',
|
||||||
hasSubMenu: true,
|
hasSubMenu: true,
|
||||||
key: 'label',
|
key: 'label',
|
||||||
newLink: true,
|
newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT),
|
||||||
newLinkTag: 'NEW_LABEL',
|
newLinkTag: 'NEW_LABEL',
|
||||||
toState: frontendURL(`accounts/${this.accountId}/settings/labels`),
|
toState: frontendURL(`accounts/${this.accountId}/settings/labels`),
|
||||||
toStateName: 'labels_list',
|
toStateName: 'labels_list',
|
||||||
@ -163,7 +168,7 @@ export default {
|
|||||||
icon: 'people-team',
|
icon: 'people-team',
|
||||||
label: 'TEAMS',
|
label: 'TEAMS',
|
||||||
hasSubMenu: true,
|
hasSubMenu: true,
|
||||||
newLink: true,
|
newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT),
|
||||||
newLinkTag: 'NEW_TEAM',
|
newLinkTag: 'NEW_TEAM',
|
||||||
key: 'team',
|
key: 'team',
|
||||||
toState: frontendURL(`accounts/${this.accountId}/settings/teams/new`),
|
toState: frontendURL(`accounts/${this.accountId}/settings/teams/new`),
|
||||||
@ -238,6 +243,9 @@ export default {
|
|||||||
toggleAccountModal() {
|
toggleAccountModal() {
|
||||||
this.$emit('toggle-accounts');
|
this.$emit('toggle-accounts');
|
||||||
},
|
},
|
||||||
|
showNewLink(featureFlag) {
|
||||||
|
return this.isFeatureEnabledonAccount(this.accountId, featureFlag);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<li class="sidebar-item">
|
<li v-show="isMenuItemVisible" class="sidebar-item">
|
||||||
<div v-if="hasSubMenu" class="secondary-menu--wrap">
|
<div v-if="hasSubMenu" class="secondary-menu--wrap">
|
||||||
<span class="secondary-menu--header fs-small">
|
<span class="secondary-menu--header fs-small">
|
||||||
{{ $t(`SIDEBAR.${menuItem.label}`) }}
|
{{ $t(`SIDEBAR.${menuItem.label}`) }}
|
||||||
@ -36,7 +36,7 @@
|
|||||||
{{ `${menuItem.count}` }}
|
{{ `${menuItem.count}` }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
v-if="menuItem.label === 'AUTOMATION'"
|
v-if="menuItem.beta"
|
||||||
data-view-component="true"
|
data-view-component="true"
|
||||||
label="Beta"
|
label="Beta"
|
||||||
class="beta"
|
class="beta"
|
||||||
@ -114,10 +114,23 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters({ activeInbox: 'getSelectedInbox' }),
|
...mapGetters({
|
||||||
|
activeInbox: 'getSelectedInbox',
|
||||||
|
accountId: 'getCurrentAccountId',
|
||||||
|
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||||
|
}),
|
||||||
hasSubMenu() {
|
hasSubMenu() {
|
||||||
return !!this.menuItem.children;
|
return !!this.menuItem.children;
|
||||||
},
|
},
|
||||||
|
isMenuItemVisible() {
|
||||||
|
if (!this.menuItem.featureFlag) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return this.isFeatureEnabledonAccount(
|
||||||
|
this.accountId,
|
||||||
|
this.menuItem.featureFlag
|
||||||
|
);
|
||||||
|
},
|
||||||
isInboxConversation() {
|
isInboxConversation() {
|
||||||
return (
|
return (
|
||||||
this.$store.state.route.name === 'inbox_conversation' &&
|
this.$store.state.route.name === 'inbox_conversation' &&
|
||||||
@ -204,7 +217,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
showItem(item) {
|
showItem(item) {
|
||||||
return this.isAdmin && item.newLink !== undefined;
|
return this.isAdmin && !!item.newLink;
|
||||||
},
|
},
|
||||||
onClickOpen() {
|
onClickOpen() {
|
||||||
this.$emit('open');
|
this.$emit('open');
|
||||||
@ -308,7 +321,7 @@ export default {
|
|||||||
.beta {
|
.beta {
|
||||||
padding-right: var(--space-smaller) !important;
|
padding-right: var(--space-smaller) !important;
|
||||||
padding-left: 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;
|
display: inline-block;
|
||||||
font-size: var(--font-size-micro);
|
font-size: var(--font-size-micro);
|
||||||
font-weight: var(--font-weight-medium);
|
font-weight: var(--font-weight-medium);
|
||||||
|
|||||||
113
app/javascript/dashboard/components/ui/PreviewCard.vue
Normal file
113
app/javascript/dashboard/components/ui/PreviewCard.vue
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<template>
|
||||||
|
<div class="preview-card--wrap" :class="{ activecard: active }">
|
||||||
|
<div class="header--wrap" :class="{ active: active }">
|
||||||
|
<div class="heading-wrap text-block-title">{{ heading }}</div>
|
||||||
|
<fluent-icon
|
||||||
|
v-if="active"
|
||||||
|
icon="checkmark-circle"
|
||||||
|
type="solid"
|
||||||
|
size="24"
|
||||||
|
class="checkmark"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="content-wrap">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
<div class="image-wrap">
|
||||||
|
<img :src="src" class="image" :class="{ activeimage: active }" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
heading: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
buttonText: {
|
||||||
|
type: String,
|
||||||
|
default: 'Active',
|
||||||
|
},
|
||||||
|
src: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.preview-card--wrap {
|
||||||
|
border-radius: var(--border-radius-normal);
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
max-height: 34rem;
|
||||||
|
max-width: 38rem;
|
||||||
|
min-width: 24rem;
|
||||||
|
|
||||||
|
.header--wrap {
|
||||||
|
background: var(--s-50);
|
||||||
|
border-bottom: 1px solid var(--color-border);
|
||||||
|
border-top-left-radius: var(--border-radius-normal);
|
||||||
|
border-top-right-radius: var(--border-radius-normal);
|
||||||
|
display: flex;
|
||||||
|
height: 4rem;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: var(--space-small);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
background: var(--w-50);
|
||||||
|
border-bottom: 1px solid var(--w-75);
|
||||||
|
}
|
||||||
|
|
||||||
|
.heading-wrap {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
font-weight: var(--font-weight-medium);
|
||||||
|
padding: var(--space-smaller);
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkmark {
|
||||||
|
color: var(--w-500);
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrap {
|
||||||
|
color: var(--s-700);
|
||||||
|
font-size: var(--font-size-mini);
|
||||||
|
line-height: 1.4;
|
||||||
|
padding: var(--space-slab) var(--space-slab) 0 var(--space-slab);
|
||||||
|
text-align: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-wrap {
|
||||||
|
padding: var(--space-slab);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
border-radius: var(--border-radius-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.activeimage {
|
||||||
|
border: 1px solid var(--w-75);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.activecard {
|
||||||
|
background: var(--w-25);
|
||||||
|
border: 1px solid var(--w-300);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -78,7 +78,7 @@ export default {
|
|||||||
if (initials.length > 2 && initials.search(/[A-Z]/) !== -1) {
|
if (initials.length > 2 && initials.search(/[A-Z]/) !== -1) {
|
||||||
initials = initials.replace(/[a-z]+/g, '');
|
initials = initials.replace(/[a-z]+/g, '');
|
||||||
}
|
}
|
||||||
initials = initials.substr(0, 2).toUpperCase();
|
initials = initials.substring(0, 2).toUpperCase();
|
||||||
return initials;
|
return initials;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
@click="insertMentionNode"
|
@click="insertMentionNode"
|
||||||
/>
|
/>
|
||||||
<canned-response
|
<canned-response
|
||||||
v-if="showCannedMenu"
|
v-if="showCannedMenu && !isPrivate"
|
||||||
:search-key="cannedSearchTerm"
|
:search-key="cannedSearchTerm"
|
||||||
@click="insertCannedResponse"
|
@click="insertCannedResponse"
|
||||||
/>
|
/>
|
||||||
@ -28,7 +28,7 @@ import {
|
|||||||
suggestionsPlugin,
|
suggestionsPlugin,
|
||||||
triggerCharacters,
|
triggerCharacters,
|
||||||
} from '@chatwoot/prosemirror-schema/src/mentions/plugin';
|
} from '@chatwoot/prosemirror-schema/src/mentions/plugin';
|
||||||
import { EditorState } from 'prosemirror-state';
|
import { EditorState, Selection } from 'prosemirror-state';
|
||||||
import { defaultMarkdownParser } from 'prosemirror-markdown';
|
import { defaultMarkdownParser } from 'prosemirror-markdown';
|
||||||
import { wootWriterSetup } from '@chatwoot/prosemirror-schema';
|
import { wootWriterSetup } from '@chatwoot/prosemirror-schema';
|
||||||
|
|
||||||
@ -61,23 +61,28 @@ export default {
|
|||||||
mixins: [eventListenerMixins],
|
mixins: [eventListenerMixins],
|
||||||
props: {
|
props: {
|
||||||
value: { type: String, default: '' },
|
value: { type: String, default: '' },
|
||||||
|
editorId: { type: String, default: '' },
|
||||||
placeholder: { type: String, default: '' },
|
placeholder: { type: String, default: '' },
|
||||||
isPrivate: { type: Boolean, default: false },
|
isPrivate: { type: Boolean, default: false },
|
||||||
isFormatMode: { type: Boolean, default: false },
|
|
||||||
enableSuggestions: { type: Boolean, default: true },
|
enableSuggestions: { type: Boolean, default: true },
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
lastValue: null,
|
|
||||||
showUserMentions: false,
|
showUserMentions: false,
|
||||||
showCannedMenu: false,
|
showCannedMenu: false,
|
||||||
mentionSearchKey: '',
|
mentionSearchKey: '',
|
||||||
cannedSearchTerm: '',
|
cannedSearchTerm: '',
|
||||||
editorView: null,
|
editorView: null,
|
||||||
range: null,
|
range: null,
|
||||||
|
state: undefined,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
contentFromEditor() {
|
||||||
|
return addMentionsToMarkdownSerializer(
|
||||||
|
defaultMarkdownSerializer
|
||||||
|
).serialize(this.editorView.state.doc);
|
||||||
|
},
|
||||||
plugins() {
|
plugins() {
|
||||||
if (!this.enableSuggestions) {
|
if (!this.enableSuggestions) {
|
||||||
return [];
|
return [];
|
||||||
@ -102,7 +107,6 @@ export default {
|
|||||||
onExit: () => {
|
onExit: () => {
|
||||||
this.mentionSearchKey = '';
|
this.mentionSearchKey = '';
|
||||||
this.showUserMentions = false;
|
this.showUserMentions = false;
|
||||||
this.editorView = null;
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
onKeyDown: ({ event }) => {
|
onKeyDown: ({ event }) => {
|
||||||
@ -131,7 +135,6 @@ export default {
|
|||||||
onExit: () => {
|
onExit: () => {
|
||||||
this.cannedSearchTerm = '';
|
this.cannedSearchTerm = '';
|
||||||
this.showCannedMenu = false;
|
this.showCannedMenu = false;
|
||||||
this.editorView = null;
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
onKeyDown: ({ event }) => {
|
onKeyDown: ({ event }) => {
|
||||||
@ -149,54 +152,57 @@ export default {
|
|||||||
this.$emit('toggle-canned-menu', !this.isPrivate && updatedValue);
|
this.$emit('toggle-canned-menu', !this.isPrivate && updatedValue);
|
||||||
},
|
},
|
||||||
value(newValue = '') {
|
value(newValue = '') {
|
||||||
if (newValue !== this.lastValue) {
|
if (newValue !== this.contentFromEditor) {
|
||||||
const { tr } = this.state;
|
this.reloadState();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
editorId() {
|
||||||
|
this.reloadState();
|
||||||
|
},
|
||||||
|
isPrivate() {
|
||||||
|
this.reloadState();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.state = createState(this.value, this.placeholder, this.plugins);
|
this.state = createState(this.value, this.placeholder, this.plugins);
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.view = new EditorView(this.$refs.editor, {
|
this.createEditorView();
|
||||||
state: this.state,
|
this.editorView.updateState(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.focusEditorInputField();
|
this.focusEditorInputField();
|
||||||
},
|
},
|
||||||
methods: {
|
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) {
|
handleKeyEvents(e) {
|
||||||
if (hasPressedAltAndPKey(e)) {
|
if (hasPressedAltAndPKey(e)) {
|
||||||
this.focusEditorInputField();
|
this.focusEditorInputField();
|
||||||
@ -206,47 +212,60 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
focusEditorInputField() {
|
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) {
|
insertMentionNode(mentionItem) {
|
||||||
if (!this.view) {
|
if (!this.editorView) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const node = this.view.state.schema.nodes.mention.create({
|
const node = this.editorView.state.schema.nodes.mention.create({
|
||||||
userId: mentionItem.key,
|
userId: mentionItem.id,
|
||||||
userFullName: mentionItem.label,
|
userFullName: mentionItem.name,
|
||||||
});
|
});
|
||||||
|
|
||||||
const tr = this.view.state.tr.replaceWith(
|
const tr = this.editorView.state.tr.replaceWith(
|
||||||
this.range.from,
|
this.range.from,
|
||||||
this.range.to,
|
this.range.to,
|
||||||
node
|
node
|
||||||
);
|
);
|
||||||
this.state = this.view.state.apply(tr);
|
this.state = this.editorView.state.apply(tr);
|
||||||
return this.emitOnChange();
|
return this.emitOnChange();
|
||||||
},
|
},
|
||||||
|
|
||||||
insertCannedResponse(cannedItem) {
|
insertCannedResponse(cannedItem) {
|
||||||
if (!this.view) {
|
if (!this.editorView) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tr = this.view.state.tr.insertText(
|
const tr = this.editorView.state.tr.insertText(
|
||||||
cannedItem,
|
cannedItem,
|
||||||
this.range.from,
|
this.range.from,
|
||||||
this.range.to
|
this.range.to
|
||||||
);
|
);
|
||||||
this.state = this.view.state.apply(tr);
|
this.state = this.editorView.state.apply(tr);
|
||||||
return this.emitOnChange();
|
this.emitOnChange();
|
||||||
|
|
||||||
|
// Hacky fix for #5501
|
||||||
|
this.state = createState(
|
||||||
|
this.contentFromEditor,
|
||||||
|
this.placeholder,
|
||||||
|
this.plugins
|
||||||
|
);
|
||||||
|
this.editorView.updateState(this.state);
|
||||||
|
this.focusEditorInputField();
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
emitOnChange() {
|
emitOnChange() {
|
||||||
this.view.updateState(this.state);
|
this.editorView.updateState(this.state);
|
||||||
this.lastValue = addMentionsToMarkdownSerializer(
|
|
||||||
defaultMarkdownSerializer
|
this.$emit('input', this.contentFromEditor);
|
||||||
).serialize(this.state.doc);
|
|
||||||
this.$emit('input', this.lastValue);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
hideMentions() {
|
hideMentions() {
|
||||||
this.showUserMentions = false;
|
this.showUserMentions = false;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
size="small"
|
size="small"
|
||||||
@click="toggleEmojiPicker"
|
@click="toggleEmojiPicker"
|
||||||
/>
|
/>
|
||||||
<!-- ensure the same validations for attachment types are implemented in backend models as well -->
|
|
||||||
<file-upload
|
<file-upload
|
||||||
ref="upload"
|
ref="upload"
|
||||||
v-tooltip.top-end="$t('CONVERSATION.REPLYBOX.TIP_ATTACH_ICON')"
|
v-tooltip.top-end="$t('CONVERSATION.REPLYBOX.TIP_ATTACH_ICON')"
|
||||||
@ -47,6 +46,16 @@
|
|||||||
:title="$t('CONVERSATION.REPLYBOX.TIP_AUDIORECORDER_ICON')"
|
:title="$t('CONVERSATION.REPLYBOX.TIP_AUDIORECORDER_ICON')"
|
||||||
@click="toggleAudioRecorder"
|
@click="toggleAudioRecorder"
|
||||||
/>
|
/>
|
||||||
|
<woot-button
|
||||||
|
v-if="showEditorToggle"
|
||||||
|
v-tooltip.top-end="$t('CONVERSATION.REPLYBOX.TIP_FORMAT_ICON')"
|
||||||
|
icon="quote"
|
||||||
|
emoji="🖊️"
|
||||||
|
color-scheme="secondary"
|
||||||
|
variant="smooth"
|
||||||
|
size="small"
|
||||||
|
@click="$emit('toggle-editor')"
|
||||||
|
/>
|
||||||
<woot-button
|
<woot-button
|
||||||
v-if="showAudioPlayStopButton"
|
v-if="showAudioPlayStopButton"
|
||||||
:icon="audioRecorderPlayStopIcon"
|
:icon="audioRecorderPlayStopIcon"
|
||||||
@ -91,17 +100,6 @@
|
|||||||
</transition>
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-wrap">
|
<div class="right-wrap">
|
||||||
<div v-if="isFormatMode" class="enter-to-send--checkbox">
|
|
||||||
<input
|
|
||||||
:checked="enterToSendEnabled"
|
|
||||||
type="checkbox"
|
|
||||||
value="enterToSend"
|
|
||||||
@input="toggleEnterToSend"
|
|
||||||
/>
|
|
||||||
<label for="enterToSend">
|
|
||||||
{{ $t('CONVERSATION.REPLYBOX.ENTER_TO_SEND') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<woot-button
|
<woot-button
|
||||||
size="small"
|
size="small"
|
||||||
:class-names="buttonClass"
|
:class-names="buttonClass"
|
||||||
@ -121,13 +119,15 @@ import { hasPressedAltAndAKey } from 'shared/helpers/KeyboardHelpers';
|
|||||||
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
|
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
|
||||||
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
||||||
import inboxMixin from 'shared/mixins/inboxMixin';
|
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||||
|
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
||||||
import {
|
import {
|
||||||
ALLOWED_FILE_TYPES,
|
ALLOWED_FILE_TYPES,
|
||||||
ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP,
|
ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP,
|
||||||
} from 'shared/constants/messages';
|
} from 'shared/constants/messages';
|
||||||
|
|
||||||
import { REPLY_EDITOR_MODES } from './constants';
|
import { REPLY_EDITOR_MODES } from './constants';
|
||||||
|
import { mapGetters } from 'vuex';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ReplyBottomPanel',
|
name: 'ReplyBottomPanel',
|
||||||
components: { FileUpload },
|
components: { FileUpload },
|
||||||
@ -193,7 +193,7 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
isFormatMode: {
|
showEditorToggle: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
@ -201,10 +201,6 @@ export default {
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
enterToSendEnabled: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
enableMultipleFileUpload: {
|
enableMultipleFileUpload: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
@ -215,6 +211,10 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
...mapGetters({
|
||||||
|
accountId: 'getCurrentAccountId',
|
||||||
|
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
|
||||||
|
}),
|
||||||
isNote() {
|
isNote() {
|
||||||
return this.mode === REPLY_EDITOR_MODES.NOTE;
|
return this.mode === REPLY_EDITOR_MODES.NOTE;
|
||||||
},
|
},
|
||||||
@ -232,7 +232,12 @@ export default {
|
|||||||
return this.showFileUpload || this.isNote;
|
return this.showFileUpload || this.isNote;
|
||||||
},
|
},
|
||||||
showAudioRecorderButton() {
|
showAudioRecorderButton() {
|
||||||
return this.showAudioRecorder;
|
return (
|
||||||
|
this.isFeatureEnabledonAccount(
|
||||||
|
this.accountId,
|
||||||
|
FEATURE_FLAGS.VOICE_RECORDER
|
||||||
|
) && this.showAudioRecorder
|
||||||
|
);
|
||||||
},
|
},
|
||||||
showAudioPlayStopButton() {
|
showAudioPlayStopButton() {
|
||||||
return this.showAudioRecorder && this.isRecordingAudio;
|
return this.showAudioRecorder && this.isRecordingAudio;
|
||||||
@ -278,9 +283,6 @@ export default {
|
|||||||
this.$refs.upload.$children[1].$el.click();
|
this.$refs.upload.$children[1].$el.click();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
toggleEnterToSend() {
|
|
||||||
this.$emit('toggleEnterToSend', !this.enterToSendEnabled);
|
|
||||||
},
|
|
||||||
toggleMessageSignature() {
|
toggleMessageSignature() {
|
||||||
this.updateUISettings({
|
this.updateUISettings({
|
||||||
send_with_signature: !this.sendWithSignature,
|
send_with_signature: !this.sendWithSignature,
|
||||||
@ -312,20 +314,6 @@ export default {
|
|||||||
|
|
||||||
.right-wrap {
|
.right-wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.enter-to-send--checkbox {
|
|
||||||
align-items: center;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
input {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
color: var(--s-500);
|
|
||||||
font-size: var(--font-size-mini);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .file-uploads {
|
::v-deep .file-uploads {
|
||||||
|
|||||||
@ -100,10 +100,11 @@
|
|||||||
v-if="isBubble && !isMessageDeleted"
|
v-if="isBubble && !isMessageDeleted"
|
||||||
:is-open="showContextMenu"
|
:is-open="showContextMenu"
|
||||||
:show-copy="hasText"
|
:show-copy="hasText"
|
||||||
|
:show-canned-response-option="isOutgoing"
|
||||||
:menu-position="contextMenuPosition"
|
:menu-position="contextMenuPosition"
|
||||||
|
:message-content="data.content"
|
||||||
@toggle="handleContextMenuClick"
|
@toggle="handleContextMenuClick"
|
||||||
@delete="handleDelete"
|
@delete="handleDelete"
|
||||||
@copy="handleCopy"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@ -126,7 +127,6 @@ import alertMixin from 'shared/mixins/alertMixin';
|
|||||||
import contentTypeMixin from 'shared/mixins/contentTypeMixin';
|
import contentTypeMixin from 'shared/mixins/contentTypeMixin';
|
||||||
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
|
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
|
||||||
import { generateBotMessageContent } from './helpers/botMessageContentHelper';
|
import { generateBotMessageContent } from './helpers/botMessageContentHelper';
|
||||||
import { copyTextToClipboard } from 'shared/helpers/clipboard';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -408,11 +408,6 @@ export default {
|
|||||||
this.showAlert(this.$t('CONVERSATION.FAIL_DELETE_MESSSAGE'));
|
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() {
|
async retrySendMessage() {
|
||||||
await this.$store.dispatch('sendMessageWithData', this.data);
|
await this.$store.dispatch('sendMessageWithData', this.data);
|
||||||
},
|
},
|
||||||
@ -425,6 +420,8 @@ export default {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.wrap {
|
.wrap {
|
||||||
> .bubble {
|
> .bubble {
|
||||||
|
min-width: 128px;
|
||||||
|
|
||||||
&.is-image,
|
&.is-image,
|
||||||
&.is-video {
|
&.is-video {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|||||||
@ -434,7 +434,7 @@ export default {
|
|||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
left: var(--space-half);
|
left: var(--space-smaller);
|
||||||
bottom: var(--space-minus-slab);
|
bottom: var(--space-minus-slab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,6 +56,7 @@
|
|||||||
<woot-message-editor
|
<woot-message-editor
|
||||||
v-else
|
v-else
|
||||||
v-model="message"
|
v-model="message"
|
||||||
|
:editor-id="editorStateId"
|
||||||
class="input"
|
class="input"
|
||||||
:is-private="isOnPrivateNote"
|
:is-private="isOnPrivateNote"
|
||||||
:placeholder="messagePlaceHolder"
|
:placeholder="messagePlaceHolder"
|
||||||
@ -108,12 +109,11 @@
|
|||||||
:recording-audio-state="recordingAudioState"
|
:recording-audio-state="recordingAudioState"
|
||||||
:is-recording-audio="isRecordingAudio"
|
:is-recording-audio="isRecordingAudio"
|
||||||
:is-on-private-note="isOnPrivateNote"
|
:is-on-private-note="isOnPrivateNote"
|
||||||
:is-format-mode="showRichContentEditor"
|
:show-editor-toggle="isAPIInbox && !isOnPrivateNote"
|
||||||
:enter-to-send-enabled="enterToSendEnabled"
|
|
||||||
:enable-multiple-file-upload="enableMultipleFileUpload"
|
:enable-multiple-file-upload="enableMultipleFileUpload"
|
||||||
:has-whatsapp-templates="hasWhatsappTemplates"
|
:has-whatsapp-templates="hasWhatsappTemplates"
|
||||||
@toggleEnterToSend="toggleEnterToSend"
|
|
||||||
@selectWhatsappTemplate="openWhatsappTemplateModal"
|
@selectWhatsappTemplate="openWhatsappTemplateModal"
|
||||||
|
@toggle-editor="toggleRichContentEditor"
|
||||||
/>
|
/>
|
||||||
<whatsapp-templates
|
<whatsapp-templates
|
||||||
:inbox-id="inbox.id"
|
:inbox-id="inbox.id"
|
||||||
@ -148,19 +148,18 @@ import {
|
|||||||
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
|
||||||
} from 'shared/constants/messages';
|
} from 'shared/constants/messages';
|
||||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||||
|
|
||||||
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
|
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
|
||||||
import {
|
import { buildHotKeys } from 'shared/helpers/KeyboardHelpers';
|
||||||
isEscape,
|
|
||||||
isEnter,
|
|
||||||
hasPressedShift,
|
|
||||||
hasPressedCommandPlusKKey,
|
|
||||||
} from 'shared/helpers/KeyboardHelpers';
|
|
||||||
import { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper';
|
import { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper';
|
||||||
import inboxMixin from 'shared/mixins/inboxMixin';
|
import inboxMixin from 'shared/mixins/inboxMixin';
|
||||||
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
|
||||||
import { DirectUpload } from 'activestorage';
|
import { DirectUpload } from 'activestorage';
|
||||||
import { frontendURL } from '../../../helper/URLHelper';
|
import { frontendURL } from '../../../helper/URLHelper';
|
||||||
|
import { LocalStorage, LOCAL_STORAGE_KEYS } from '../../../helper/localStorage';
|
||||||
|
import { trimContent, debounce } from '@chatwoot/utils';
|
||||||
import wootConstants from 'dashboard/constants';
|
import wootConstants from 'dashboard/constants';
|
||||||
|
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -214,6 +213,7 @@ export default {
|
|||||||
hasSlashCommand: false,
|
hasSlashCommand: false,
|
||||||
bccEmails: '',
|
bccEmails: '',
|
||||||
ccEmails: '',
|
ccEmails: '',
|
||||||
|
doAutoSaveDraft: () => {},
|
||||||
showWhatsAppTemplatesModal: false,
|
showWhatsAppTemplatesModal: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -231,6 +231,13 @@ export default {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isAPIInbox) {
|
||||||
|
const {
|
||||||
|
display_rich_content_editor: displayRichContentEditor = false,
|
||||||
|
} = this.uiSettings;
|
||||||
|
return displayRichContentEditor;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
assignedAgent: {
|
assignedAgent: {
|
||||||
@ -266,9 +273,6 @@ export default {
|
|||||||
return !!this.$store.getters['inboxes/getWhatsAppTemplates'](this.inboxId)
|
return !!this.$store.getters['inboxes/getWhatsAppTemplates'](this.inboxId)
|
||||||
.length;
|
.length;
|
||||||
},
|
},
|
||||||
enterToSendEnabled() {
|
|
||||||
return !!this.uiSettings.enter_to_send_enabled;
|
|
||||||
},
|
|
||||||
isPrivate() {
|
isPrivate() {
|
||||||
if (this.currentChat.can_reply || this.isAWhatsAppChannel) {
|
if (this.currentChat.can_reply || this.isAWhatsAppChannel) {
|
||||||
return this.isOnPrivateNote;
|
return this.isOnPrivateNote;
|
||||||
@ -342,13 +346,16 @@ export default {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
replyButtonLabel() {
|
replyButtonLabel() {
|
||||||
|
let sendMessageText = this.$t('CONVERSATION.REPLYBOX.SEND');
|
||||||
if (this.isPrivate) {
|
if (this.isPrivate) {
|
||||||
return this.$t('CONVERSATION.REPLYBOX.CREATE');
|
sendMessageText = this.$t('CONVERSATION.REPLYBOX.CREATE');
|
||||||
|
} else if (this.conversationType === 'tweet') {
|
||||||
|
sendMessageText = this.$t('CONVERSATION.REPLYBOX.TWEET');
|
||||||
}
|
}
|
||||||
if (this.conversationType === 'tweet') {
|
const keyLabel = isEditorHotKeyEnabled(this.uiSettings, 'cmd_enter')
|
||||||
return this.$t('CONVERSATION.REPLYBOX.TWEET');
|
? '(⌘ + ↵)'
|
||||||
}
|
: '(↵)';
|
||||||
return this.$t('CONVERSATION.REPLYBOX.SEND');
|
return `${sendMessageText} ${keyLabel}`;
|
||||||
},
|
},
|
||||||
replyBoxClass() {
|
replyBoxClass() {
|
||||||
return {
|
return {
|
||||||
@ -366,7 +373,7 @@ export default {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
isRichEditorEnabled() {
|
isRichEditorEnabled() {
|
||||||
return this.isAWebWidgetInbox || this.isAnEmailChannel || this.isAPIInbox;
|
return this.isAWebWidgetInbox || this.isAnEmailChannel;
|
||||||
},
|
},
|
||||||
showAudioRecorder() {
|
showAudioRecorder() {
|
||||||
return !this.isOnPrivateNote && this.showFileUpload;
|
return !this.isOnPrivateNote && this.showFileUpload;
|
||||||
@ -429,10 +436,31 @@ export default {
|
|||||||
profilePath() {
|
profilePath() {
|
||||||
return frontendURL(`accounts/${this.accountId}/profile/settings`);
|
return frontendURL(`accounts/${this.accountId}/profile/settings`);
|
||||||
},
|
},
|
||||||
|
editorMessageKey() {
|
||||||
|
const { editor_message_key: isEnabled } = this.uiSettings;
|
||||||
|
return isEnabled;
|
||||||
|
},
|
||||||
|
commandPlusEnterToSendEnabled() {
|
||||||
|
return this.editorMessageKey === 'cmd_enter';
|
||||||
|
},
|
||||||
|
enterToSendEnabled() {
|
||||||
|
return this.editorMessageKey === 'enter';
|
||||||
|
},
|
||||||
|
conversationId() {
|
||||||
|
return this.currentChat.id;
|
||||||
|
},
|
||||||
|
conversationIdByRoute() {
|
||||||
|
const { conversation_id: conversationId } = this.$route.params;
|
||||||
|
return conversationId;
|
||||||
|
},
|
||||||
|
editorStateId() {
|
||||||
|
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
currentChat(conversation) {
|
currentChat(conversation) {
|
||||||
const { can_reply: canReply } = conversation;
|
const { can_reply: canReply } = conversation;
|
||||||
|
|
||||||
if (this.isOnPrivateNote) {
|
if (this.isOnPrivateNote) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -445,34 +473,135 @@ export default {
|
|||||||
|
|
||||||
this.setCCEmailFromLastChat();
|
this.setCCEmailFromLastChat();
|
||||||
},
|
},
|
||||||
|
conversationIdByRoute(conversationId, oldConversationId) {
|
||||||
|
if (conversationId !== oldConversationId) {
|
||||||
|
this.setToDraft(oldConversationId, this.replyType);
|
||||||
|
this.getFromDraft();
|
||||||
|
}
|
||||||
|
},
|
||||||
message(updatedMessage) {
|
message(updatedMessage) {
|
||||||
this.hasSlashCommand =
|
this.hasSlashCommand =
|
||||||
updatedMessage[0] === '/' && !this.showRichContentEditor;
|
updatedMessage[0] === '/' && !this.showRichContentEditor;
|
||||||
const hasNextWord = updatedMessage.includes(' ');
|
const hasNextWord = updatedMessage.includes(' ');
|
||||||
const isShortCodeActive = this.hasSlashCommand && !hasNextWord;
|
const isShortCodeActive = this.hasSlashCommand && !hasNextWord;
|
||||||
if (isShortCodeActive) {
|
if (isShortCodeActive) {
|
||||||
this.mentionSearchKey = updatedMessage.substr(1, updatedMessage.length);
|
this.mentionSearchKey = updatedMessage.substring(1);
|
||||||
this.showMentions = true;
|
this.showMentions = true;
|
||||||
} else {
|
} else {
|
||||||
this.mentionSearchKey = '';
|
this.mentionSearchKey = '';
|
||||||
this.showMentions = false;
|
this.showMentions = false;
|
||||||
}
|
}
|
||||||
|
this.doAutoSaveDraft();
|
||||||
|
},
|
||||||
|
replyType(updatedReplyType, oldReplyType) {
|
||||||
|
this.setToDraft(this.conversationIdByRoute, oldReplyType);
|
||||||
|
this.getFromDraft();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.getFromDraft();
|
||||||
// Donot use the keyboard listener mixin here as the events here are supposed to be
|
// Donot use the keyboard listener mixin here as the events here are supposed to be
|
||||||
// working even if input/textarea is focussed.
|
// working even if input/textarea is focussed.
|
||||||
document.addEventListener('keydown', this.handleKeyEvents);
|
|
||||||
document.addEventListener('paste', this.onPaste);
|
document.addEventListener('paste', this.onPaste);
|
||||||
|
document.addEventListener('keydown', this.handleKeyEvents);
|
||||||
this.setCCEmailFromLastChat();
|
this.setCCEmailFromLastChat();
|
||||||
|
this.doAutoSaveDraft = debounce(
|
||||||
|
() => {
|
||||||
|
this.saveDraft(this.conversationIdByRoute, this.replyType);
|
||||||
|
},
|
||||||
|
500,
|
||||||
|
true
|
||||||
|
);
|
||||||
},
|
},
|
||||||
destroyed() {
|
destroyed() {
|
||||||
document.removeEventListener('keydown', this.handleKeyEvents);
|
|
||||||
document.removeEventListener('paste', this.onPaste);
|
document.removeEventListener('paste', this.onPaste);
|
||||||
|
document.removeEventListener('keydown', this.handleKeyEvents);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
toggleRichContentEditor() {
|
||||||
|
this.updateUISettings({
|
||||||
|
display_rich_content_editor: !this.showRichContentEditor,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getSavedDraftMessages() {
|
||||||
|
return LocalStorage.get(LOCAL_STORAGE_KEYS.DRAFT_MESSAGES) || {};
|
||||||
|
},
|
||||||
|
saveDraft(conversationId, replyType) {
|
||||||
|
if (this.message || this.message === '') {
|
||||||
|
const savedDraftMessages = this.getSavedDraftMessages();
|
||||||
|
const key = `draft-${conversationId}-${replyType}`;
|
||||||
|
const draftToSave = trimContent(this.message || '');
|
||||||
|
const {
|
||||||
|
[key]: currentDraft,
|
||||||
|
...restOfDraftMessages
|
||||||
|
} = savedDraftMessages;
|
||||||
|
|
||||||
|
const updatedDraftMessages = draftToSave
|
||||||
|
? {
|
||||||
|
...restOfDraftMessages,
|
||||||
|
[key]: draftToSave,
|
||||||
|
}
|
||||||
|
: restOfDraftMessages;
|
||||||
|
|
||||||
|
LocalStorage.set(
|
||||||
|
LOCAL_STORAGE_KEYS.DRAFT_MESSAGES,
|
||||||
|
updatedDraftMessages
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setToDraft(conversationId, replyType) {
|
||||||
|
this.saveDraft(conversationId, replyType);
|
||||||
|
this.message = '';
|
||||||
|
},
|
||||||
|
getFromDraft() {
|
||||||
|
if (this.conversationIdByRoute) {
|
||||||
|
try {
|
||||||
|
const key = `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||||
|
const savedDraftMessages = this.getSavedDraftMessages();
|
||||||
|
this.message = `${savedDraftMessages[key] || ''}`;
|
||||||
|
} catch (error) {
|
||||||
|
this.message = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
removeFromDraft() {
|
||||||
|
if (this.conversationIdByRoute) {
|
||||||
|
const key = `draft-${this.conversationIdByRoute}-${this.replyType}`;
|
||||||
|
const draftMessages = this.getSavedDraftMessages();
|
||||||
|
const { [key]: toBeRemoved, ...updatedDraftMessages } = draftMessages;
|
||||||
|
LocalStorage.set(
|
||||||
|
LOCAL_STORAGE_KEYS.DRAFT_MESSAGES,
|
||||||
|
updatedDraftMessages
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleKeyEvents(e) {
|
||||||
|
const keyCode = buildHotKeys(e);
|
||||||
|
if (keyCode === 'escape') {
|
||||||
|
this.hideEmojiPicker();
|
||||||
|
this.hideMentions();
|
||||||
|
} else if (keyCode === 'meta+k') {
|
||||||
|
const ninja = document.querySelector('ninja-keys');
|
||||||
|
ninja.open();
|
||||||
|
e.preventDefault();
|
||||||
|
} else if (keyCode === 'enter' && this.isAValidEvent('enter')) {
|
||||||
|
this.onSendReply();
|
||||||
|
} else if (
|
||||||
|
['meta+enter', 'ctrl+enter'].includes(keyCode) &&
|
||||||
|
this.isAValidEvent('cmd_enter')
|
||||||
|
) {
|
||||||
|
this.onSendReply();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isAValidEvent(selectedKey) {
|
||||||
|
return (
|
||||||
|
!this.hasUserMention &&
|
||||||
|
!this.showCannedMenu &&
|
||||||
|
this.isFocused &&
|
||||||
|
isEditorHotKeyEnabled(this.uiSettings, selectedKey)
|
||||||
|
);
|
||||||
|
},
|
||||||
onPaste(e) {
|
onPaste(e) {
|
||||||
const data = e.clipboardData.files;
|
const data = e.clipboardData.files;
|
||||||
if (!this.showRichContentEditor && data.length !== 0) {
|
if (!this.showRichContentEditor && data.length !== 0) {
|
||||||
@ -492,34 +621,6 @@ export default {
|
|||||||
toggleCannedMenu(value) {
|
toggleCannedMenu(value) {
|
||||||
this.showCannedMenu = value;
|
this.showCannedMenu = value;
|
||||||
},
|
},
|
||||||
handleKeyEvents(e) {
|
|
||||||
if (isEscape(e)) {
|
|
||||||
this.hideEmojiPicker();
|
|
||||||
this.hideMentions();
|
|
||||||
} else if (isEnter(e)) {
|
|
||||||
const hasSendOnEnterEnabled =
|
|
||||||
(this.showRichContentEditor &&
|
|
||||||
this.enterToSendEnabled &&
|
|
||||||
!this.hasUserMention &&
|
|
||||||
!this.showCannedMenu) ||
|
|
||||||
!this.showRichContentEditor;
|
|
||||||
const shouldSendMessage =
|
|
||||||
hasSendOnEnterEnabled && !hasPressedShift(e) && this.isFocused;
|
|
||||||
if (shouldSendMessage) {
|
|
||||||
e.preventDefault();
|
|
||||||
this.onSendReply();
|
|
||||||
}
|
|
||||||
} else if (hasPressedCommandPlusKKey(e)) {
|
|
||||||
this.openCommandBar();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
openCommandBar() {
|
|
||||||
const ninja = document.querySelector('ninja-keys');
|
|
||||||
ninja.open();
|
|
||||||
},
|
|
||||||
toggleEnterToSend(enterToSendEnabled) {
|
|
||||||
this.updateUISettings({ enter_to_send_enabled: enterToSendEnabled });
|
|
||||||
},
|
|
||||||
openWhatsappTemplateModal() {
|
openWhatsappTemplateModal() {
|
||||||
this.showWhatsAppTemplatesModal = true;
|
this.showWhatsAppTemplatesModal = true;
|
||||||
},
|
},
|
||||||
@ -559,11 +660,13 @@ export default {
|
|||||||
newMessage += '\n\n' + this.messageSignature;
|
newMessage += '\n\n' + this.messageSignature;
|
||||||
}
|
}
|
||||||
const messagePayload = this.getMessagePayload(newMessage);
|
const messagePayload = this.getMessagePayload(newMessage);
|
||||||
|
|
||||||
this.clearMessage();
|
this.clearMessage();
|
||||||
if (!this.isPrivate) {
|
if (!this.isPrivate) {
|
||||||
this.clearEmailField();
|
this.clearEmailField();
|
||||||
}
|
}
|
||||||
this.sendMessage(messagePayload);
|
this.sendMessage(messagePayload);
|
||||||
|
this.clearMessage();
|
||||||
this.hideEmojiPicker();
|
this.hideEmojiPicker();
|
||||||
this.$emit('update:popoutReplyBox', false);
|
this.$emit('update:popoutReplyBox', false);
|
||||||
}
|
}
|
||||||
@ -575,6 +678,7 @@ export default {
|
|||||||
messagePayload
|
messagePayload
|
||||||
);
|
);
|
||||||
bus.$emit(BUS_EVENTS.SCROLL_TO_MESSAGE);
|
bus.$emit(BUS_EVENTS.SCROLL_TO_MESSAGE);
|
||||||
|
this.removeFromDraft();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const errorMessage =
|
const errorMessage =
|
||||||
error?.response?.data?.error || this.$t('CONVERSATION.MESSAGE_ERROR');
|
error?.response?.data?.error || this.$t('CONVERSATION.MESSAGE_ERROR');
|
||||||
@ -595,7 +699,6 @@ export default {
|
|||||||
},
|
},
|
||||||
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
|
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
|
||||||
const { can_reply: canReply } = this.currentChat;
|
const { can_reply: canReply } = this.currentChat;
|
||||||
|
|
||||||
if (canReply || this.isAWhatsAppChannel) this.replyType = mode;
|
if (canReply || this.isAWhatsAppChannel) this.replyType = mode;
|
||||||
if (this.showRichContentEditor) {
|
if (this.showRichContentEditor) {
|
||||||
if (this.isRecordingAudio) {
|
if (this.isRecordingAudio) {
|
||||||
@ -654,6 +757,7 @@ export default {
|
|||||||
},
|
},
|
||||||
onBlur() {
|
onBlur() {
|
||||||
this.isFocused = false;
|
this.isFocused = false;
|
||||||
|
this.saveDraft(this.conversationIdByRoute, this.replyType);
|
||||||
},
|
},
|
||||||
onFocus() {
|
onFocus() {
|
||||||
this.isFocused = true;
|
this.isFocused = true;
|
||||||
@ -879,7 +983,7 @@ export default {
|
|||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
left: var(--space-half);
|
left: var(--space-smaller);
|
||||||
bottom: var(--space-minus-slab);
|
bottom: var(--space-minus-slab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,49 +1,160 @@
|
|||||||
<template>
|
<template>
|
||||||
<mention-box :items="items" @mention-select="handleMentionClick" />
|
<ul
|
||||||
|
v-if="items.length"
|
||||||
|
class="vertical dropdown menu mention--box"
|
||||||
|
:style="{ top: getTopSpacing() + 'rem' }"
|
||||||
|
:class="{ 'with-bottom-border': items.length <= 4 }"
|
||||||
|
>
|
||||||
|
<li
|
||||||
|
v-for="(agent, index) in items"
|
||||||
|
:id="`mention-item-${index}`"
|
||||||
|
:key="agent.id"
|
||||||
|
:class="{ active: index === selectedIndex }"
|
||||||
|
@click="onAgentSelect(index)"
|
||||||
|
@mouseover="onHover(index)"
|
||||||
|
>
|
||||||
|
<div class="mention--thumbnail">
|
||||||
|
<woot-thumbnail
|
||||||
|
:src="agent.thumbnail"
|
||||||
|
:username="agent.name"
|
||||||
|
size="32px"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="mention--metadata text-truncate">
|
||||||
|
<h5 class="text-block-title mention--user-name text-truncate">
|
||||||
|
{{ agent.name }}
|
||||||
|
</h5>
|
||||||
|
<div class="text-truncate mention--email text-truncate">
|
||||||
|
{{ agent.email }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import MentionBox from '../mentions/MentionBox.vue';
|
import mentionSelectionKeyboardMixin from '../mentions/mentionSelectionKeyboardMixin';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { MentionBox },
|
mixins: [mentionSelectionKeyboardMixin],
|
||||||
props: {
|
props: {
|
||||||
searchKey: {
|
searchKey: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return { selectedIndex: 0 };
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters({
|
...mapGetters({ agents: 'agents/getVerifiedAgents' }),
|
||||||
agents: 'agents/getVerifiedAgents',
|
|
||||||
}),
|
|
||||||
items() {
|
items() {
|
||||||
if (!this.searchKey) {
|
if (!this.searchKey) {
|
||||||
return this.agents.map(agent => ({
|
return this.agents;
|
||||||
label: agent.name,
|
|
||||||
key: agent.id,
|
|
||||||
description: agent.email,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.agents
|
return this.agents.filter(agent =>
|
||||||
.filter(agent =>
|
agent.name
|
||||||
agent.name
|
.toLocaleLowerCase()
|
||||||
.toLocaleLowerCase()
|
.includes(this.searchKey.toLocaleLowerCase())
|
||||||
.includes(this.searchKey.toLocaleLowerCase())
|
);
|
||||||
)
|
|
||||||
.map(agent => ({
|
|
||||||
label: agent.name,
|
|
||||||
key: agent.id,
|
|
||||||
description: agent.email,
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
items(newListOfAgents) {
|
||||||
|
if (newListOfAgents.length < this.selectedIndex + 1) {
|
||||||
|
this.selectedIndex = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleMentionClick(item = {}) {
|
getTopSpacing() {
|
||||||
this.$emit('click', item);
|
if (this.items.length <= 4) {
|
||||||
|
return -(this.items.length * 5 + 1.7);
|
||||||
|
}
|
||||||
|
return -20;
|
||||||
|
},
|
||||||
|
handleKeyboardEvent(e) {
|
||||||
|
this.processKeyDownEvent(e);
|
||||||
|
this.$el.scrollTop = 50 * this.selectedIndex;
|
||||||
|
},
|
||||||
|
onHover(index) {
|
||||||
|
this.selectedIndex = index;
|
||||||
|
},
|
||||||
|
onAgentSelect(index) {
|
||||||
|
this.selectedIndex = index;
|
||||||
|
this.onSelect();
|
||||||
|
},
|
||||||
|
onSelect() {
|
||||||
|
this.$emit('click', this.items[this.selectedIndex]);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.mention--box {
|
||||||
|
background: var(--white);
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
font-size: var(--font-size-small);
|
||||||
|
left: 0;
|
||||||
|
line-height: 1.2;
|
||||||
|
max-height: 20rem;
|
||||||
|
overflow: auto;
|
||||||
|
padding: var(--space-small) var(--space-small) 0 var(--space-small);
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 100;
|
||||||
|
|
||||||
|
&.with-bottom-border {
|
||||||
|
border-bottom: var(--space-small) solid var(--white);
|
||||||
|
|
||||||
|
li {
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
align-items: center;
|
||||||
|
border-radius: var(--border-radius-normal);
|
||||||
|
display: flex;
|
||||||
|
padding: var(--space-small);
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background: var(--s-50);
|
||||||
|
|
||||||
|
.mention--user-name {
|
||||||
|
color: var(--s-900);
|
||||||
|
}
|
||||||
|
.mention--email {
|
||||||
|
color: var(--s-800);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: var(--space-small);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mention--thumbnail {
|
||||||
|
margin-right: var(--space-small);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mention--user-name {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mention--email {
|
||||||
|
color: var(--s-700);
|
||||||
|
font-size: var(--font-size-mini);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mention--metadata {
|
||||||
|
flex: 1;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -141,9 +141,19 @@ export default {
|
|||||||
assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags',
|
assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags',
|
||||||
}),
|
}),
|
||||||
assignableAgents() {
|
assignableAgents() {
|
||||||
return this.$store.getters['inboxAssignableAgents/getAssignableAgents'](
|
return [
|
||||||
this.inboxId
|
{
|
||||||
);
|
confirmed: true,
|
||||||
|
name: 'None',
|
||||||
|
id: null,
|
||||||
|
role: 'agent',
|
||||||
|
account_id: 0,
|
||||||
|
email: 'None',
|
||||||
|
},
|
||||||
|
...this.$store.getters['inboxAssignableAgents/getAssignableAgents'](
|
||||||
|
this.inboxId
|
||||||
|
),
|
||||||
|
];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|||||||
@ -57,7 +57,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div v-else class="agent-confirmation-container">
|
<div v-else class="agent-confirmation-container">
|
||||||
<p>
|
<p v-if="selectedAgent.id">
|
||||||
{{
|
{{
|
||||||
$t('BULK_ACTION.ASSIGN_CONFIRMATION_LABEL', {
|
$t('BULK_ACTION.ASSIGN_CONFIRMATION_LABEL', {
|
||||||
conversationCount,
|
conversationCount,
|
||||||
@ -67,6 +67,15 @@
|
|||||||
<strong>
|
<strong>
|
||||||
{{ selectedAgent.name }}
|
{{ selectedAgent.name }}
|
||||||
</strong>
|
</strong>
|
||||||
|
<span>?</span>
|
||||||
|
</p>
|
||||||
|
<p v-else>
|
||||||
|
{{
|
||||||
|
$t('BULK_ACTION.UNASSIGN_CONFIRMATION_LABEL', {
|
||||||
|
conversationCount,
|
||||||
|
conversationLabel,
|
||||||
|
})
|
||||||
|
}}
|
||||||
</p>
|
</p>
|
||||||
<div class="agent-confirmation-actions">
|
<div class="agent-confirmation-actions">
|
||||||
<woot-button
|
<woot-button
|
||||||
@ -82,7 +91,7 @@
|
|||||||
:is-loading="uiFlags.isUpdating"
|
:is-loading="uiFlags.isUpdating"
|
||||||
@click="submit"
|
@click="submit"
|
||||||
>
|
>
|
||||||
{{ $t('BULK_ACTION.ASSIGN_LABEL') }}
|
{{ $t('BULK_ACTION.YES') }}
|
||||||
</woot-button>
|
</woot-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -131,7 +140,17 @@ export default {
|
|||||||
agent.name.toLowerCase().includes(this.query.toLowerCase())
|
agent.name.toLowerCase().includes(this.query.toLowerCase())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return this.assignableAgents;
|
return [
|
||||||
|
{
|
||||||
|
confirmed: true,
|
||||||
|
name: 'None',
|
||||||
|
id: null,
|
||||||
|
role: 'agent',
|
||||||
|
account_id: 0,
|
||||||
|
email: 'None',
|
||||||
|
},
|
||||||
|
...this.assignableAgents,
|
||||||
|
];
|
||||||
},
|
},
|
||||||
assignableAgents() {
|
assignableAgents() {
|
||||||
return this.$store.getters['inboxAssignableAgents/getAssignableAgents'](
|
return this.$store.getters['inboxAssignableAgents/getAssignableAgents'](
|
||||||
|
|||||||
@ -181,7 +181,7 @@ export default {
|
|||||||
color: var(--y-700);
|
color: var(--y-700);
|
||||||
font-size: var(--font-size-mini);
|
font-size: var(--font-size-mini);
|
||||||
margin-top: var(--space-small);
|
margin-top: var(--space-small);
|
||||||
padding: var(--space-half) var(--space-one);
|
padding: var(--space-smaller) var(--space-small);
|
||||||
}
|
}
|
||||||
|
|
||||||
.popover-animation-enter-active,
|
.popover-animation-enter-active,
|
||||||
|
|||||||
@ -20,7 +20,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import mentionSelectionKeyboardMixin from './mentionSelectionKeyboardMixin';
|
||||||
export default {
|
export default {
|
||||||
|
mixins: [mentionSelectionKeyboardMixin],
|
||||||
props: {
|
props: {
|
||||||
items: {
|
items: {
|
||||||
type: Array,
|
type: Array,
|
||||||
@ -39,56 +41,25 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
|
||||||
document.addEventListener('keydown', this.keyListener);
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
document.removeEventListener('keydown', this.keyListener);
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
getTopPadding() {
|
getTopPadding() {
|
||||||
if (this.items.length <= 4) {
|
if (this.items.length <= 4) {
|
||||||
return -(this.items.length * 2.8 + 1.7);
|
return -(this.items.length * 2.9 + 1.7);
|
||||||
}
|
}
|
||||||
return -14;
|
return -14;
|
||||||
},
|
},
|
||||||
isUp(e) {
|
handleKeyboardEvent(e) {
|
||||||
return e.keyCode === 38 || (e.ctrlKey && e.keyCode === 80); // UP, Ctrl-P
|
this.processKeyDownEvent(e);
|
||||||
},
|
this.$el.scrollTop = 29 * this.selectedIndex;
|
||||||
isDown(e) {
|
|
||||||
return e.keyCode === 40 || (e.ctrlKey && e.keyCode === 78); // DOWN, Ctrl-N
|
|
||||||
},
|
|
||||||
isEnter(e) {
|
|
||||||
return e.keyCode === 13;
|
|
||||||
},
|
|
||||||
keyListener(e) {
|
|
||||||
if (this.isUp(e)) {
|
|
||||||
if (!this.selectedIndex) {
|
|
||||||
this.selectedIndex = this.items.length - 1;
|
|
||||||
} else {
|
|
||||||
this.selectedIndex -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.isDown(e)) {
|
|
||||||
if (this.selectedIndex === this.items.length - 1) {
|
|
||||||
this.selectedIndex = 0;
|
|
||||||
} else {
|
|
||||||
this.selectedIndex += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.isEnter(e)) {
|
|
||||||
this.onMentionSelect();
|
|
||||||
}
|
|
||||||
this.$el.scrollTop = 28 * this.selectedIndex;
|
|
||||||
},
|
},
|
||||||
onHover(index) {
|
onHover(index) {
|
||||||
this.selectedIndex = index;
|
this.selectedIndex = index;
|
||||||
},
|
},
|
||||||
onListItemSelection(index) {
|
onListItemSelection(index) {
|
||||||
this.selectedIndex = index;
|
this.selectedIndex = index;
|
||||||
this.onMentionSelect();
|
this.onSelect();
|
||||||
},
|
},
|
||||||
onMentionSelect() {
|
onSelect() {
|
||||||
this.$emit('mention-select', this.items[this.selectedIndex]);
|
this.$emit('mention-select', this.items[this.selectedIndex]);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -0,0 +1,39 @@
|
|||||||
|
import { buildHotKeys } from 'shared/helpers/KeyboardHelpers';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
mounted() {
|
||||||
|
document.addEventListener('keydown', this.handleKeyboardEvent);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
document.removeEventListener('keydown', this.handleKeyboardEvent);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
moveSelectionUp() {
|
||||||
|
if (!this.selectedIndex) {
|
||||||
|
this.selectedIndex = this.items.length - 1;
|
||||||
|
} else {
|
||||||
|
this.selectedIndex -= 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
moveSelectionDown() {
|
||||||
|
if (this.selectedIndex === this.items.length - 1) {
|
||||||
|
this.selectedIndex = 0;
|
||||||
|
} else {
|
||||||
|
this.selectedIndex += 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
processKeyDownEvent(e) {
|
||||||
|
const keyPattern = buildHotKeys(e);
|
||||||
|
if (['arrowup', 'ctrl+p'].includes(keyPattern)) {
|
||||||
|
this.moveSelectionUp();
|
||||||
|
e.preventDefault();
|
||||||
|
} else if (['arrowdown', 'ctrl+n'].includes(keyPattern)) {
|
||||||
|
this.moveSelectionDown();
|
||||||
|
e.preventDefault();
|
||||||
|
} else if (keyPattern === 'enter') {
|
||||||
|
this.onSelect();
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
import mentionSelectionKeyboardMixin from '../mentionSelectionKeyboardMixin';
|
||||||
|
import { shallowMount } from '@vue/test-utils';
|
||||||
|
|
||||||
|
const buildComponent = ({ data = {}, methods = {} }) => ({
|
||||||
|
render() {},
|
||||||
|
data() {
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
methods,
|
||||||
|
mixins: [mentionSelectionKeyboardMixin],
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('mentionSelectionKeyboardMixin', () => {
|
||||||
|
test('register listeners', () => {
|
||||||
|
jest.spyOn(document, 'addEventListener');
|
||||||
|
const Component = buildComponent({});
|
||||||
|
shallowMount(Component);
|
||||||
|
// undefined expected as the method is not defined in the component
|
||||||
|
expect(document.addEventListener).toHaveBeenCalledWith(
|
||||||
|
'keydown',
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('processKeyDownEvent updates index on arrow up', () => {
|
||||||
|
const Component = buildComponent({
|
||||||
|
data: { selectedIndex: 0, items: [1, 2, 3] },
|
||||||
|
});
|
||||||
|
const wrapper = shallowMount(Component);
|
||||||
|
wrapper.vm.processKeyDownEvent({
|
||||||
|
ctrlKey: true,
|
||||||
|
key: 'p',
|
||||||
|
preventDefault: jest.fn(),
|
||||||
|
});
|
||||||
|
expect(wrapper.vm.selectedIndex).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('processKeyDownEvent updates index on arrow down', () => {
|
||||||
|
const Component = buildComponent({
|
||||||
|
data: { selectedIndex: 0, items: [1, 2, 3] },
|
||||||
|
});
|
||||||
|
const wrapper = shallowMount(Component);
|
||||||
|
wrapper.vm.processKeyDownEvent({
|
||||||
|
key: 'ArrowDown',
|
||||||
|
preventDefault: jest.fn(),
|
||||||
|
});
|
||||||
|
expect(wrapper.vm.selectedIndex).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('processKeyDownEvent calls select methods on Enter Key', () => {
|
||||||
|
const onSelectMockFn = jest.fn();
|
||||||
|
const Component = buildComponent({
|
||||||
|
data: { selectedIndex: 0, items: [1, 2, 3] },
|
||||||
|
methods: { onSelect: () => onSelectMockFn('enterKey pressed') },
|
||||||
|
});
|
||||||
|
const wrapper = shallowMount(Component);
|
||||||
|
wrapper.vm.processKeyDownEvent({
|
||||||
|
key: 'Enter',
|
||||||
|
preventDefault: jest.fn(),
|
||||||
|
});
|
||||||
|
expect(onSelectMockFn).toHaveBeenCalledWith('enterKey pressed');
|
||||||
|
wrapper.vm.onSelect();
|
||||||
|
});
|
||||||
|
});
|
||||||
13
app/javascript/dashboard/featureFlags.js
Normal file
13
app/javascript/dashboard/featureFlags.js
Normal file
@ -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',
|
||||||
|
};
|
||||||
@ -6,7 +6,7 @@ export const frontendURL = (path, params) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const getSSOAccountPath = ({ ssoAccountId, user }) => {
|
const getSSOAccountPath = ({ ssoAccountId, user }) => {
|
||||||
const { accounts = [] } = user || {};
|
const { accounts = [], account_id = null } = user || {};
|
||||||
const ssoAccount = accounts.find(
|
const ssoAccount = accounts.find(
|
||||||
account => account.id === Number(ssoAccountId)
|
account => account.id === Number(ssoAccountId)
|
||||||
);
|
);
|
||||||
@ -14,7 +14,9 @@ const getSSOAccountPath = ({ ssoAccountId, user }) => {
|
|||||||
if (ssoAccount) {
|
if (ssoAccount) {
|
||||||
accountPath = `accounts/${ssoAccountId}`;
|
accountPath = `accounts/${ssoAccountId}`;
|
||||||
} else if (accounts.length) {
|
} 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;
|
return accountPath;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
export const LOCAL_STORAGE_KEYS = {
|
export const LOCAL_STORAGE_KEYS = {
|
||||||
DISMISSED_UPDATES: 'dismissedUpdates',
|
DISMISSED_UPDATES: 'dismissedUpdates',
|
||||||
WIDGET_BUILDER: 'widgetBubble_',
|
WIDGET_BUILDER: 'widgetBubble_',
|
||||||
|
DRAFT_MESSAGES: 'draftMessages',
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LocalStorage = {
|
export const LocalStorage = {
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"NOT_AVAILABLE": "غير متاح",
|
"NOT_AVAILABLE": "غير متاح",
|
||||||
"EMAIL_ADDRESS": "عنوان البريد الإلكتروني",
|
"EMAIL_ADDRESS": "عنوان البريد الإلكتروني",
|
||||||
"PHONE_NUMBER": "رقم الهاتف",
|
"PHONE_NUMBER": "رقم الهاتف",
|
||||||
|
"IDENTIFIER": "المعرف",
|
||||||
"COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح",
|
"COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح",
|
||||||
"COMPANY": "الشركة",
|
"COMPANY": "الشركة",
|
||||||
"LOCATION": "الموقع الجغرافي",
|
"LOCATION": "الموقع الجغرافي",
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"SELECT_A_CONVERSATION": "الرجاء اختيار محادثة من قائمة المحادثات",
|
"SELECT_A_CONVERSATION": "الرجاء اختيار محادثة من قائمة المحادثات",
|
||||||
"404": "Sorry, we cannot find the conversation. Please try again",
|
"CSAT_REPLY_MESSAGE": "الرجاء تقييم المحادثة",
|
||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"404": "عذراً، لا يمكننا العثور على المحادثة. الرجاء المحاولة مرة أخرى",
|
||||||
|
"SWITCH_VIEW_LAYOUT": "تبديل التصميم",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "الرسائل",
|
"DASHBOARD_APP_TAB_MESSAGES": "الرسائل",
|
||||||
"UNVERIFIED_SESSION": "لم يتم التحقق من هوية هذا المستخدم",
|
"UNVERIFIED_SESSION": "لم يتم التحقق من هوية هذا المستخدم",
|
||||||
"NO_MESSAGE_1": "لا توجد رسائل بعد من العملاء في صندوق الوارد الخاص بك.",
|
"NO_MESSAGE_1": "لا توجد رسائل بعد من العملاء في صندوق الوارد الخاص بك.",
|
||||||
@ -62,30 +63,30 @@
|
|||||||
},
|
},
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "تحديد كمعلق",
|
"PENDING": "تحديد كمعلق",
|
||||||
"RESOLVED": "Mark as resolved",
|
"RESOLVED": "تحديد كمحلولة",
|
||||||
"REOPEN": "إعادة فتح المحادثة",
|
"REOPEN": "إعادة فتح المحادثة",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze",
|
"TITLE": "غفوة",
|
||||||
"NEXT_REPLY": "حتى الرد القادم",
|
"NEXT_REPLY": "حتى الرد القادم",
|
||||||
"TOMORROW": "حتى الغد",
|
"TOMORROW": "حتى الغد",
|
||||||
"NEXT_WEEK": "حتى الأسبوع القادم"
|
"NEXT_WEEK": "حتى الأسبوع القادم"
|
||||||
},
|
},
|
||||||
"ASSIGN_AGENT": "Assign agent",
|
"ASSIGN_AGENT": "تعيين وكيل",
|
||||||
"ASSIGN_LABEL": "Assign label",
|
"ASSIGN_LABEL": "إضافة وسم",
|
||||||
"AGENTS_LOADING": "Loading agents...",
|
"AGENTS_LOADING": "جاري تحميل الوكلاء...",
|
||||||
"ASSIGN_TEAM": "Assign team",
|
"ASSIGN_TEAM": "تعيين فريق",
|
||||||
"API": {
|
"API": {
|
||||||
"AGENT_ASSIGNMENT": {
|
"AGENT_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"",
|
"SUCCESFUL": "معرف المحادثة %{conversationId} تم تعيينه ل \"%{agentName}\"",
|
||||||
"FAILED": "Couldn't assign agent. Please try again."
|
"FAILED": "تعذر تعيين الوكيل. الرجاء المحاولة مرة أخرى."
|
||||||
},
|
},
|
||||||
"LABEL_ASSIGNMENT": {
|
"LABEL_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}",
|
"SUCCESFUL": "تعيين تسمية #%{labelName} لمعرف المحادثة %{conversationId}",
|
||||||
"FAILED": "Couldn't assign label. Please try again."
|
"FAILED": "تعذر تعيين التسمية. الرجاء المحاولة مرة أخرى."
|
||||||
},
|
},
|
||||||
"TEAM_ASSIGNMENT": {
|
"TEAM_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}",
|
"SUCCESFUL": "الفريق المعين \"%{team}\" لمعرف المحادثة %{conversationId}",
|
||||||
"FAILED": "Couldn't assign team. Please try again."
|
"FAILED": "تعذر تعيين الفريق. الرجاء المحاولة مرة أخرى."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -110,7 +111,6 @@
|
|||||||
"TIP_AUDIORECORDER_ICON": "تسجيل الصوت",
|
"TIP_AUDIORECORDER_ICON": "تسجيل الصوت",
|
||||||
"TIP_AUDIORECORDER_PERMISSION": "السماح بالوصول إلى الصوت",
|
"TIP_AUDIORECORDER_PERMISSION": "السماح بالوصول إلى الصوت",
|
||||||
"TIP_AUDIORECORDER_ERROR": "تعذر فتح الصوت",
|
"TIP_AUDIORECORDER_ERROR": "تعذر فتح الصوت",
|
||||||
"ENTER_TO_SEND": "زر الإدخل للإرسال",
|
|
||||||
"DRAG_DROP": "اسحب و أسقط هنا للإرفاق",
|
"DRAG_DROP": "اسحب و أسقط هنا للإرفاق",
|
||||||
"START_AUDIO_RECORDING": "بدء التسجيل الصوتي",
|
"START_AUDIO_RECORDING": "بدء التسجيل الصوتي",
|
||||||
"STOP_AUDIO_RECORDING": "إيقاف التسجيل الصوتي",
|
"STOP_AUDIO_RECORDING": "إيقاف التسجيل الصوتي",
|
||||||
@ -131,13 +131,13 @@
|
|||||||
},
|
},
|
||||||
"VISIBLE_TO_AGENTS": "ملاحظة خاصة: مرئية فقط لأعضاء فريق العمل والموظفين",
|
"VISIBLE_TO_AGENTS": "ملاحظة خاصة: مرئية فقط لأعضاء فريق العمل والموظفين",
|
||||||
"CHANGE_STATUS": "تم تغيير حالة المحادثة",
|
"CHANGE_STATUS": "تم تغيير حالة المحادثة",
|
||||||
"CHANGE_STATUS_FAILED": "Conversation status change failed",
|
"CHANGE_STATUS_FAILED": "فشل تغيير حالة المحادثة",
|
||||||
"CHANGE_AGENT": "تم تغيير الموظف الذي تم إحالة المحادثة إليه",
|
"CHANGE_AGENT": "تم تغيير الموظف الذي تم إحالة المحادثة إليه",
|
||||||
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
"CHANGE_AGENT_FAILED": "فشل تغيير المحال إليه",
|
||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "تم تعيين الوسم بنجاح",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "فشل تعيين الوسم",
|
||||||
"CHANGE_TEAM": "تم تغيير فريق المحادثة",
|
"CHANGE_TEAM": "تم تغيير فريق المحادثة",
|
||||||
"FILE_SIZE_LIMIT": "حجم الملف يتجاوز حد الاقصى وهو {MAXIMUM_FILE_UPLOAD_SIZE}",
|
"FILE_SIZE_LIMIT": "الملف يتجاوز حد المرفق {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} ميغابايت",
|
||||||
"MESSAGE_ERROR": "غير قادر على إرسال هذه الرسالة، الرجاء المحاولة مرة أخرى لاحقاً",
|
"MESSAGE_ERROR": "غير قادر على إرسال هذه الرسالة، الرجاء المحاولة مرة أخرى لاحقاً",
|
||||||
"SENT_BY": "أرسلت بواسطة:",
|
"SENT_BY": "أرسلت بواسطة:",
|
||||||
"BOT": "رد آلي",
|
"BOT": "رد آلي",
|
||||||
@ -150,7 +150,8 @@
|
|||||||
},
|
},
|
||||||
"CONTEXT_MENU": {
|
"CONTEXT_MENU": {
|
||||||
"COPY": "نسخ",
|
"COPY": "نسخ",
|
||||||
"DELETE": "حذف"
|
"DELETE": "حذف",
|
||||||
|
"CREATE_A_CANNED_RESPONSE": "إضافة إلى الردود السريعة"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
|
|||||||
@ -6,95 +6,98 @@
|
|||||||
"SETTINGS_BUTTON": "الإعدادات",
|
"SETTINGS_BUTTON": "الإعدادات",
|
||||||
"NEW_BUTTON": "مقالة جديدة",
|
"NEW_BUTTON": "مقالة جديدة",
|
||||||
"DROPDOWN_OPTIONS": {
|
"DROPDOWN_OPTIONS": {
|
||||||
"PUBLISHED": "Published",
|
"PUBLISHED": "نُشرت",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "مسودة",
|
||||||
"ARCHIVED": "Archived"
|
"ARCHIVED": "أرشفة"
|
||||||
},
|
},
|
||||||
"TITLES": {
|
"TITLES": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "جميع المقالات",
|
||||||
"MINE": "My Articles",
|
"MINE": "مقالاتي",
|
||||||
"DRAFT": "Draft Articles",
|
"DRAFT": "مقالات مسودة",
|
||||||
"ARCHIVED": "Archived Articles"
|
"ARCHIVED": "المقالات المؤرشفة"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT_HEADER": {
|
"EDIT_HEADER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "جميع المقالات",
|
||||||
"PUBLISH_BUTTON": "نشر",
|
"PUBLISH_BUTTON": "نشر",
|
||||||
|
"MOVE_TO_ARCHIVE_BUTTON": "نقل إلى الأرشيف",
|
||||||
"PREVIEW": "معاينة",
|
"PREVIEW": "معاينة",
|
||||||
"ADD_TRANSLATION": "إضافة ترجمة",
|
"ADD_TRANSLATION": "إضافة ترجمة",
|
||||||
"OPEN_SIDEBAR": "فتح الشريط الجانبي",
|
"OPEN_SIDEBAR": "فتح الشريط الجانبي",
|
||||||
"CLOSE_SIDEBAR": "إغلاق الشريط الجانبي",
|
"CLOSE_SIDEBAR": "إغلاق الشريط الجانبي",
|
||||||
"SAVING": "Saving...",
|
"SAVING": "جاري الحفظ...",
|
||||||
"SAVED": "Saved"
|
"SAVED": "تم الحفظ"
|
||||||
},
|
},
|
||||||
"ARTICLE_SETTINGS": {
|
"ARTICLE_SETTINGS": {
|
||||||
"TITLE": "Article Settings",
|
"TITLE": "إعدادات المقالة",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CATEGORY": {
|
"CATEGORY": {
|
||||||
"LABEL": "الفئة",
|
"LABEL": "الفئة",
|
||||||
"TITLE": "Select category",
|
"TITLE": "اختر الفئة",
|
||||||
"PLACEHOLDER": "Select category",
|
"PLACEHOLDER": "اختر الفئة",
|
||||||
"NO_RESULT": "No category found",
|
"NO_RESULT": "لم يتم العثور على فئة",
|
||||||
"SEARCH_PLACEHOLDER": "Search category"
|
"SEARCH_PLACEHOLDER": "البحث عن فئة"
|
||||||
},
|
},
|
||||||
"AUTHOR": {
|
"AUTHOR": {
|
||||||
"LABEL": "Author",
|
"LABEL": "المؤلف",
|
||||||
"TITLE": "Select author",
|
"TITLE": "اختر المؤلف",
|
||||||
"PLACEHOLDER": "Select author",
|
"PLACEHOLDER": "اختر المؤلف",
|
||||||
"NO_RESULT": "No authors found",
|
"NO_RESULT": "لم يتم العثور على مؤلفين",
|
||||||
"SEARCH_PLACEHOLDER": "Search author"
|
"SEARCH_PLACEHOLDER": "البحث عن المؤلف"
|
||||||
},
|
},
|
||||||
"META_TITLE": {
|
"META_TITLE": {
|
||||||
"LABEL": "Meta title",
|
"LABEL": "العنوان الوصفي",
|
||||||
"PLACEHOLDER": "Add a meta title"
|
"PLACEHOLDER": "اضافة عنوان وصفي"
|
||||||
},
|
},
|
||||||
"META_DESCRIPTION": {
|
"META_DESCRIPTION": {
|
||||||
"LABEL": "Meta description",
|
"LABEL": "وصف التعريف",
|
||||||
"PLACEHOLDER": "Add your meta description for better SEO results..."
|
"PLACEHOLDER": "أضف وصفك للحصول على أفضل نتائج SEO..."
|
||||||
},
|
},
|
||||||
"META_TAGS": {
|
"META_TAGS": {
|
||||||
"LABEL": "Meta tags",
|
"LABEL": "علامات الوصف",
|
||||||
"PLACEHOLDER": "Add meta tags separated by comma..."
|
"PLACEHOLDER": "إضافة وسوم ميتا مفصولة بفاصلة..."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"ARCHIVE": "Archive article",
|
"ARCHIVE": "المقالات المؤرشفة",
|
||||||
"DELETE": "Delete article"
|
"DELETE": "حذف المقال"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PORTAL": {
|
"PORTAL": {
|
||||||
"HEADER": "Portals",
|
"HEADER": "الصفحات",
|
||||||
"NEW_BUTTON": "New Portal",
|
"DEFAULT": "افتراضي",
|
||||||
|
"NEW_BUTTON": "بوابة جديدة",
|
||||||
"ACTIVE_BADGE": "مفعل",
|
"ACTIVE_BADGE": "مفعل",
|
||||||
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
"CHOOSE_LOCALE_LABEL": "اختر لغة محلية",
|
||||||
"LOADING_MESSAGE": "Loading portals...",
|
"LOADING_MESSAGE": "جاري تحميل البوابات ...",
|
||||||
"ARTICLES_LABEL": "articles",
|
"ARTICLES_LABEL": "المقالات",
|
||||||
"NO_PORTALS_MESSAGE": "There are no available portals",
|
"NO_PORTALS_MESSAGE": "لا توجد بوابات متاحة",
|
||||||
"ADD_NEW_LOCALE": "Add a new locale",
|
"ADD_NEW_LOCALE": "إضافة لغة جديدة",
|
||||||
"POPOVER": {
|
"POPOVER": {
|
||||||
"TITLE": "Portals",
|
"TITLE": "الصفحات",
|
||||||
"PORTAL_SETTINGS": "Portal settings",
|
"PORTAL_SETTINGS": "إعدادات البوابة",
|
||||||
"SUBTITLE": "You have multiple portals and can have different locales for each portal.",
|
"SUBTITLE": "لديك بوابات متعددة ويمكن أن تحتوي على مواقع مختلفة لكل بوابة.",
|
||||||
"CANCEL_BUTTON_LABEL": "إلغاء",
|
"CANCEL_BUTTON_LABEL": "إلغاء",
|
||||||
"CHOOSE_LOCALE_BUTTON": "Choose Locale"
|
"CHOOSE_LOCALE_BUTTON": "اختر لغة محلية"
|
||||||
},
|
},
|
||||||
"PORTAL_SETTINGS": {
|
"PORTAL_SETTINGS": {
|
||||||
"LIST_ITEM": {
|
"LIST_ITEM": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"COUNT_LABEL": "articles",
|
"COUNT_LABEL": "المقالات",
|
||||||
"ADD": "Add locale",
|
"ADD": "إضافة لغة",
|
||||||
"VISIT": "Visit site",
|
"VISIT": "زيارة الموقع",
|
||||||
"SETTINGS": "الإعدادات"
|
"SETTINGS": "الإعدادات",
|
||||||
|
"DELETE": "حذف"
|
||||||
},
|
},
|
||||||
"PORTAL_CONFIG": {
|
"PORTAL_CONFIG": {
|
||||||
"TITLE": "Portal Configurations",
|
"TITLE": "اعدادات البوابة",
|
||||||
"ITEMS": {
|
"ITEMS": {
|
||||||
"NAME": "الاسم",
|
"NAME": "الاسم",
|
||||||
"DOMAIN": "Custom domain",
|
"DOMAIN": "نطاق مخصص",
|
||||||
"SLUG": "Slug",
|
"SLUG": "وصف مختصر",
|
||||||
"TITLE": "Portal title",
|
"TITLE": "عنوان البوابة",
|
||||||
"THEME": "Theme color",
|
"THEME": "لون القالب",
|
||||||
"SUB_TEXT": "Portal sub text"
|
"SUB_TEXT": "النص الفرعي للبوابة"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AVAILABLE_LOCALES": {
|
"AVAILABLE_LOCALES": {
|
||||||
@ -106,9 +109,54 @@
|
|||||||
"CATEGORIES": "No. of categories",
|
"CATEGORIES": "No. of categories",
|
||||||
"SWAP": "Swap",
|
"SWAP": "Swap",
|
||||||
"DELETE": "حذف",
|
"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",
|
||||||
|
"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": "لم يتم العثور على فئات"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"EDIT_BASIC_INFO": {
|
||||||
|
"BUTTON_TEXT": "Update basic settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
@ -158,74 +206,131 @@
|
|||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "الاسم",
|
"LABEL": "الاسم",
|
||||||
"PLACEHOLDER": "Portal name",
|
"PLACEHOLDER": "Portal name",
|
||||||
"HELP_TEXT": "The name will be used in the public facing portal internally.",
|
"HELP_TEXT": "الاسم سيتم مشاهدتة من جميع من جميع زوار الصفحة.",
|
||||||
"ERROR": "الاسم مطلوب"
|
"ERROR": "الاسم مطلوب"
|
||||||
},
|
},
|
||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "وصف مختصر",
|
||||||
"PLACEHOLDER": "Portal slug for urls",
|
"PLACEHOLDER": "وصف مختصر لرابط البوابة",
|
||||||
|
"ERROR": "الوصف مطلوب"
|
||||||
"ERROR": "Slug is required"
|
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
"LABEL": "Custom Domain",
|
"LABEL": "نطاق مخصص",
|
||||||
"PLACEHOLDER": "Portal custom domain",
|
"PLACEHOLDER": "نطاق البوابة المخصص",
|
||||||
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
|
"HELP_TEXT": "أضف فقط إذا كنت ترغب في استخدام نطاق مخصص للبوابات الخاصة بك.",
|
||||||
"ERROR": "Custom Domain is required"
|
"ERROR": "النطاق المخصص مطلوب"
|
||||||
},
|
},
|
||||||
"HOME_PAGE_LINK": {
|
"HOME_PAGE_LINK": {
|
||||||
"LABEL": "Home Page Link",
|
"LABEL": "رابط الصفحة الرئيسية",
|
||||||
"PLACEHOLDER": "Portal home page link",
|
"PLACEHOLDER": "رابط الصفحة الرئيسية للبوابة",
|
||||||
"HELP_TEXT": "The link used to return from the portal to the home page.",
|
"HELP_TEXT": "الرابط المستخدم للعودة من البوابة إلى الصفحة الرئيسية.",
|
||||||
"ERROR": "Home Page Link is required"
|
"ERROR": "رابط الصفحة الرئيسية مطلوب"
|
||||||
},
|
},
|
||||||
"THEME_COLOR": {
|
"THEME_COLOR": {
|
||||||
"LABEL": "Portal theme color",
|
"LABEL": "لون قالب البوابة",
|
||||||
"HELP_TEXT": "This color will show as the theme color for the portal."
|
"HELP_TEXT": "هذا اللون سيظهر كلون للبوابة."
|
||||||
},
|
},
|
||||||
"PAGE_TITLE": {
|
"PAGE_TITLE": {
|
||||||
"LABEL": "Page Title",
|
"LABEL": "عنوان الصفحة",
|
||||||
"PLACEHOLDER": "Portal page title",
|
"PLACEHOLDER": "عنوان البوابة",
|
||||||
"HELP_TEXT": "The page title will be used in the public facing portal.",
|
"HELP_TEXT": "سيتم استخدام عنوان الصفحة في البوابة التي تواجه الجمهور.",
|
||||||
"ERROR": "Page title is required"
|
"ERROR": "العنوان مطلوب"
|
||||||
},
|
},
|
||||||
"HEADER_TEXT": {
|
"HEADER_TEXT": {
|
||||||
"LABEL": "Header Text",
|
"LABEL": "نص رأس الصفحة",
|
||||||
"PLACEHOLDER": "Portal header text",
|
"PLACEHOLDER": "نص رأس البوابة",
|
||||||
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
|
"HELP_TEXT": "سيتم استخدام عنوان الصفحة في البوابة التي تواجه الجمهور.",
|
||||||
"ERROR": "Portal header text is required"
|
"ERROR": "نص رأس البوابة مطلوب"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
|
"SUCCESS_MESSAGE_FOR_BASIC": "تم إنشاء البوابة بنجاح.",
|
||||||
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
|
"ERROR_MESSAGE_FOR_BASIC": "تعذر إنشاء البوابة. حاول مرة أخرى.",
|
||||||
|
"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": "غير قادر على إزالة اللغة من البوابة. حاول مرة أخرى."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
"LOADING_MESSAGE": "Loading articles...",
|
"LOADING_MESSAGE": "جاري تحميل المقالات...",
|
||||||
"404": "No articles matches your search 🔍",
|
"404": "لا توجد مقالات تطابق بحثك 🔍",
|
||||||
"NO_ARTICLES": "There are no available articles",
|
"NO_ARTICLES": "لا توجد مقالات متوفرة",
|
||||||
"HEADERS": {
|
"HEADERS": {
|
||||||
"TITLE": "العنوان",
|
"TITLE": "العنوان",
|
||||||
"CATEGORY": "الفئة",
|
"CATEGORY": "الفئة",
|
||||||
"READ_COUNT": "Read count",
|
"READ_COUNT": "عدد القراءات",
|
||||||
"STATUS": "الحالة",
|
"STATUS": "الحالة",
|
||||||
"LAST_EDITED": "Last edited"
|
"LAST_EDITED": "آخر تعديل"
|
||||||
},
|
},
|
||||||
"COLUMNS": {
|
"COLUMNS": {
|
||||||
"BY": "بواسطة"
|
"BY": "بواسطة"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT_ARTICLE": {
|
"EDIT_ARTICLE": {
|
||||||
"LOADING": "Loading article...",
|
"LOADING": "جاري تحميل المقالات...",
|
||||||
"TITLE_PLACEHOLDER": "Article title goes here",
|
"TITLE_PLACEHOLDER": "عنوان المقالة يذهب هنا",
|
||||||
"CONTENT_PLACEHOLDER": "Write your article here",
|
"CONTENT_PLACEHOLDER": "اكتب مقالك هنا",
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR": "Error while saving article"
|
"ERROR": "حدث خطأ أثناء حفظ المقالة"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PUBLISH_ARTICLE": {
|
||||||
|
"API": {
|
||||||
|
"ERROR": "حدث خطأ أثناء نشر المقالة",
|
||||||
|
"SUCCESS": "تم نشر المقالة بنجاح"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ARCHIVE_ARTICLE": {
|
||||||
|
"API": {
|
||||||
|
"ERROR": "حدث خطأ أثناء نشر المقالة",
|
||||||
|
"SUCCESS": "تم أرشفة المقالة بنجاح"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": {
|
"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": {
|
"SIDEBAR": {
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
@ -263,6 +368,43 @@
|
|||||||
"SUCCESS_MESSAGE": "Category created successfully",
|
"SUCCESS_MESSAGE": "Category created successfully",
|
||||||
"ERROR_MESSAGE": "Unable to create category"
|
"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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -414,7 +414,7 @@
|
|||||||
"CAMPAIGN": "الحملات",
|
"CAMPAIGN": "الحملات",
|
||||||
"PRE_CHAT_FORM": "نموذج ما قبل الدردشة",
|
"PRE_CHAT_FORM": "نموذج ما قبل الدردشة",
|
||||||
"BUSINESS_HOURS": "ساعات العمل",
|
"BUSINESS_HOURS": "ساعات العمل",
|
||||||
"WIDGET_BUILDER": "Widget Builder"
|
"WIDGET_BUILDER": "منشئ اللايف شات"
|
||||||
},
|
},
|
||||||
"SETTINGS": "الإعدادات",
|
"SETTINGS": "الإعدادات",
|
||||||
"FEATURES": {
|
"FEATURES": {
|
||||||
@ -579,10 +579,10 @@
|
|||||||
"WIDGET_BUILDER": {
|
"WIDGET_BUILDER": {
|
||||||
"WIDGET_OPTIONS": {
|
"WIDGET_OPTIONS": {
|
||||||
"AVATAR": {
|
"AVATAR": {
|
||||||
"LABEL": "Website Avatar",
|
"LABEL": "صورة الموقع",
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Avatar deleted successfully",
|
"SUCCESS_MESSAGE": "الصورة الرمزية حذفت بنجاح",
|
||||||
"ERROR_MESSAGE": "حدث خطأ، الرجاء المحاولة مرة أخرى"
|
"ERROR_MESSAGE": "حدث خطأ، الرجاء المحاولة مرة أخرى"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -590,53 +590,53 @@
|
|||||||
"WEBSITE_NAME": {
|
"WEBSITE_NAME": {
|
||||||
"LABEL": "اسم الموقع",
|
"LABEL": "اسم الموقع",
|
||||||
"PLACE_HOLDER": "أدخل اسم موقع الويب الخاص بك (مثال: Acme Inc)",
|
"PLACE_HOLDER": "أدخل اسم موقع الويب الخاص بك (مثال: Acme Inc)",
|
||||||
"ERROR": "Please enter a valid website name"
|
"ERROR": "الرجاء إدخال اسم موقع صالح"
|
||||||
},
|
},
|
||||||
"WELCOME_HEADING": {
|
"WELCOME_HEADING": {
|
||||||
"LABEL": "العنوان الترحيبي",
|
"LABEL": "العنوان الترحيبي",
|
||||||
"PLACE_HOLDER": "Hi there!"
|
"PLACE_HOLDER": "مرحبا بك!"
|
||||||
},
|
},
|
||||||
"WELCOME_TAGLINE": {
|
"WELCOME_TAGLINE": {
|
||||||
"LABEL": "افتتاحية الترحيب",
|
"LABEL": "افتتاحية الترحيب",
|
||||||
"PLACE_HOLDER": "نحن نجعل من السهل عليك التواصل معنا. اسألنا أي شيء، أو قم بمشاركتنا ملاحظاتك."
|
"PLACE_HOLDER": "نحن نجعل من السهل عليك التواصل معنا. اسألنا أي شيء، أو قم بمشاركتنا ملاحظاتك."
|
||||||
},
|
},
|
||||||
"REPLY_TIME": {
|
"REPLY_TIME": {
|
||||||
"LABEL": "Reply Time",
|
"LABEL": "وقت الرد",
|
||||||
"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_LABEL": "لون صندوق الدردشة",
|
||||||
"WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position",
|
"WIDGET_BUBBLE_POSITION_LABEL": "موقع شعار اللايف شات",
|
||||||
"WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type",
|
"WIDGET_BUBBLE_TYPE_LABEL": "شكل عرض اللايف شات",
|
||||||
"WIDGET_BUBBLE_LAUNCHER_TITLE": {
|
"WIDGET_BUBBLE_LAUNCHER_TITLE": {
|
||||||
"DEFAULT": "تحدث الينا",
|
"DEFAULT": "تحدث الينا",
|
||||||
"LABEL": "Widget Bubble Launcher Title",
|
"LABEL": "عنوان ايقونة اللايف شات",
|
||||||
"PLACE_HOLDER": "تحدث الينا"
|
"PLACE_HOLDER": "تحدث الينا"
|
||||||
},
|
},
|
||||||
"UPDATE": {
|
"UPDATE": {
|
||||||
"BUTTON_TEXT": "Update Widget Settings",
|
"BUTTON_TEXT": "تحديث إعدادات اللايف شات",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Widget settings updated successfully",
|
"SUCCESS_MESSAGE": "تم تحديث إعدادت اللايف شات بنجاح",
|
||||||
"ERROR_MESSAGE": "Unable to update widget settings"
|
"ERROR_MESSAGE": "غير قادر على تحديث إعدادات اللايف شات"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WIDGET_VIEW_OPTION": {
|
"WIDGET_VIEW_OPTION": {
|
||||||
"PREVIEW": "معاينة",
|
"PREVIEW": "معاينة",
|
||||||
"SCRIPT": "Script"
|
"SCRIPT": "النص"
|
||||||
},
|
},
|
||||||
"WIDGET_BUBBLE_POSITION": {
|
"WIDGET_BUBBLE_POSITION": {
|
||||||
"LEFT": "Left",
|
"LEFT": "يسار",
|
||||||
"RIGHT": "Right"
|
"RIGHT": "يمين"
|
||||||
},
|
},
|
||||||
"WIDGET_BUBBLE_TYPE": {
|
"WIDGET_BUBBLE_TYPE": {
|
||||||
"STANDARD": "Standard",
|
"STANDARD": "عادي",
|
||||||
"EXPANDED_BUBBLE": "Expanded Bubble"
|
"EXPANDED_BUBBLE": "ايقونت اللايف شات العرضية"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WIDGET_SCREEN": {
|
"WIDGET_SCREEN": {
|
||||||
"DEFAULT": "Default",
|
"DEFAULT": "افتراضي",
|
||||||
"CHAT": "Chat"
|
"CHAT": "محادثة"
|
||||||
},
|
},
|
||||||
"REPLY_TIME": {
|
"REPLY_TIME": {
|
||||||
"IN_A_FEW_MINUTES": "عادة نقوم بالرد خلال بضع دقائق",
|
"IN_A_FEW_MINUTES": "عادة نقوم بالرد خلال بضع دقائق",
|
||||||
@ -649,11 +649,11 @@
|
|||||||
},
|
},
|
||||||
"BODY": {
|
"BODY": {
|
||||||
"TEAM_AVAILABILITY": {
|
"TEAM_AVAILABILITY": {
|
||||||
"ONLINE": "We are Online",
|
"ONLINE": "متواجدون لخدمتك",
|
||||||
"OFFLINE": "نحن بعيدون في الوقت الحالي"
|
"OFFLINE": "نحن بعيدون في الوقت الحالي"
|
||||||
},
|
},
|
||||||
"USER_MESSAGE": "Hi",
|
"USER_MESSAGE": "مرحبا",
|
||||||
"AGENT_MESSAGE": "Hello"
|
"AGENT_MESSAGE": "مرحبا"
|
||||||
},
|
},
|
||||||
"BRANDING_TEXT": "مدعوم بواسطة Chatwoot",
|
"BRANDING_TEXT": "مدعوم بواسطة Chatwoot",
|
||||||
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
|
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
|
||||||
|
|||||||
@ -19,6 +19,21 @@
|
|||||||
"TITLE": "الملف الشخصي",
|
"TITLE": "الملف الشخصي",
|
||||||
"NOTE": "عنوان بريدك الإلكتروني هو المعرف الخاص بك الذي ستستخدمه لتسجيل الدخول."
|
"NOTE": "عنوان بريدك الإلكتروني هو المعرف الخاص بك الذي ستستخدمه لتسجيل الدخول."
|
||||||
},
|
},
|
||||||
|
"SEND_MESSAGE": {
|
||||||
|
"TITLE": "المفتاح الرئيسي لإرسال الرسائل",
|
||||||
|
"NOTE": "يمكنك تحديد مفتاح سريع (إما Enter أو Cmd/Ctrl+Enter) استنادًا إلى تفضيلك للكتابة.",
|
||||||
|
"UPDATE_SUCCESS": "تم تحديث الإعدادات الخاصة بك بنجاح",
|
||||||
|
"CARD": {
|
||||||
|
"ENTER_KEY": {
|
||||||
|
"HEADING": "Enter (↵)",
|
||||||
|
"CONTENT": "إرسال الرسائل بالضغط على مفتاح الإدخال بدلاً من النقر على زر الإرسال."
|
||||||
|
},
|
||||||
|
"CMD_ENTER_KEY": {
|
||||||
|
"HEADING": "Cmd/Ctrl + Enter (<unk> + <unk> )",
|
||||||
|
"CONTENT": "إرسال الرسائل بالضغط على Cmd/Ctrl + إدخال المفتاح بدلاً من النقر على زر الإرسال."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"MESSAGE_SIGNATURE_SECTION": {
|
"MESSAGE_SIGNATURE_SECTION": {
|
||||||
"TITLE": "توقيع الرسالة الشخصية",
|
"TITLE": "توقيع الرسالة الشخصية",
|
||||||
"NOTE": "إنشاء توقيع رسالة شخصية يتم إضافتها إلى جميع الرسائل التي ترسلها من المنصة. استخدم محرر المحتوى الغني لإنشاء توقيع شديد التخصيص.",
|
"NOTE": "إنشاء توقيع رسالة شخصية يتم إضافتها إلى جميع الرسائل التي ترسلها من المنصة. استخدم محرر المحتوى الغني لإنشاء توقيع شديد التخصيص.",
|
||||||
@ -126,8 +141,8 @@
|
|||||||
"TRAIL_BUTTON": "اشترك الآن",
|
"TRAIL_BUTTON": "اشترك الآن",
|
||||||
"DELETED_USER": "حذف المستخدم",
|
"DELETED_USER": "حذف المستخدم",
|
||||||
"ACCOUNT_SUSPENDED": {
|
"ACCOUNT_SUSPENDED": {
|
||||||
"TITLE": "Account Suspended",
|
"TITLE": "تم تعليق الحساب",
|
||||||
"MESSAGE": "Your account is suspended. Please reach out to the support team for more information."
|
"MESSAGE": "تم تعليق حسابك. يرجى الاتصال بفريق الدعم للمزيد من المعلومات."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"COMPONENTS": {
|
"COMPONENTS": {
|
||||||
@ -175,7 +190,7 @@
|
|||||||
"CUSTOM_ATTRIBUTES": "سمات مخصصة",
|
"CUSTOM_ATTRIBUTES": "سمات مخصصة",
|
||||||
"AUTOMATION": "الأتمتة",
|
"AUTOMATION": "الأتمتة",
|
||||||
"TEAMS": "الفرق",
|
"TEAMS": "الفرق",
|
||||||
"BILLING": "Billing",
|
"BILLING": "الفواتير",
|
||||||
"CUSTOM_VIEWS_FOLDER": "المجلدات",
|
"CUSTOM_VIEWS_FOLDER": "المجلدات",
|
||||||
"CUSTOM_VIEWS_SEGMENTS": "الأجزاء",
|
"CUSTOM_VIEWS_SEGMENTS": "الأجزاء",
|
||||||
"ALL_CONTACTS": "جميع جهات الاتصال",
|
"ALL_CONTACTS": "جميع جهات الاتصال",
|
||||||
@ -197,32 +212,33 @@
|
|||||||
"REPORTS_OVERVIEW": "نظرة عامة",
|
"REPORTS_OVERVIEW": "نظرة عامة",
|
||||||
"FACEBOOK_REAUTHORIZE": "انتهت صلاحية اتصال الفيسبوك الخاص بك، يرجى إعادة الاتصال بصفحة الفيسبوك الخاصة بك لمواصلة الخدمات",
|
"FACEBOOK_REAUTHORIZE": "انتهت صلاحية اتصال الفيسبوك الخاص بك، يرجى إعادة الاتصال بصفحة الفيسبوك الخاصة بك لمواصلة الخدمات",
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"TITLE": "مركز المساعدة (نسخة تجريبية)",
|
||||||
"MY_ARTICLES": "My Articles",
|
"ALL_ARTICLES": "جميع المقالات",
|
||||||
"DRAFT": "Draft",
|
"MY_ARTICLES": "مقالاتي",
|
||||||
"ARCHIVED": "Archived",
|
"DRAFT": "مسودة",
|
||||||
|
"ARCHIVED": "مؤرشفة",
|
||||||
"CATEGORY": "الفئة",
|
"CATEGORY": "الفئة",
|
||||||
"CATEGORY_EMPTY_MESSAGE": "No categories found"
|
"CATEGORY_EMPTY_MESSAGE": "لم يتم العثور على فئات"
|
||||||
},
|
},
|
||||||
"DOCS": "Read docs"
|
"DOCS": "قراءة المستندات"
|
||||||
},
|
},
|
||||||
"BILLING_SETTINGS": {
|
"BILLING_SETTINGS": {
|
||||||
"TITLE": "Billing",
|
"TITLE": "الفواتير",
|
||||||
"CURRENT_PLAN": {
|
"CURRENT_PLAN": {
|
||||||
"TITLE": "Current Plan",
|
"TITLE": "الباقة الحالية",
|
||||||
"PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses"
|
"PLAN_NOTE": "أنت مشترك حاليا في باقة**%{plan}** مع تراخيص **%{quantity}**"
|
||||||
},
|
},
|
||||||
"MANAGE_SUBSCRIPTION": {
|
"MANAGE_SUBSCRIPTION": {
|
||||||
"TITLE": "Manage your subscription",
|
"TITLE": "إدارة الاشتراك الخاص بك",
|
||||||
"DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.",
|
"DESCRIPTION": "عرض فواتيرك السابقة، تحرير تفاصيل الفوترة الخاصة بك، أو إلغاء اشتراكك.",
|
||||||
"BUTTON_TXT": "Go to the billing portal"
|
"BUTTON_TXT": "الذهاب إلى بوابة الفوترة"
|
||||||
},
|
},
|
||||||
"CHAT_WITH_US": {
|
"CHAT_WITH_US": {
|
||||||
"TITLE": "Need help?",
|
"TITLE": "تحتاج مساعدة؟",
|
||||||
"DESCRIPTION": "Do you face any issues in billing? We are here to help.",
|
"DESCRIPTION": "هل تواجه أي مشاكل في الفواتير؟ نحن هنا للمساعدة.",
|
||||||
"BUTTON_TXT": "تحدث الينا"
|
"BUTTON_TXT": "تحدث الينا"
|
||||||
},
|
},
|
||||||
"NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again."
|
"NO_BILLING_USER": "حساب الفوترة الخاص بك قيد الإعداد. الرجاء تحديث الصفحة وحاول مرة أخرى."
|
||||||
},
|
},
|
||||||
"CREATE_ACCOUNT": {
|
"CREATE_ACCOUNT": {
|
||||||
"NO_ACCOUNT_WARNING": "أوه! لم نتمكن من العثور على الحساب. الرجاء إنشاء حساب جديد للمتابعة.",
|
"NO_ACCOUNT_WARNING": "أوه! لم نتمكن من العثور على الحساب. الرجاء إنشاء حساب جديد للمتابعة.",
|
||||||
@ -256,7 +272,6 @@
|
|||||||
"GO_TO_SETTINGS": "انتقل إلى الإعدادات",
|
"GO_TO_SETTINGS": "انتقل إلى الإعدادات",
|
||||||
"SWITCH_CONVERSATION_STATUS": "التبديل إلى حالة المحادثة التالية",
|
"SWITCH_CONVERSATION_STATUS": "التبديل إلى حالة المحادثة التالية",
|
||||||
"SWITCH_TO_PRIVATE_NOTE": "التبديل إلى الملاحظة الخاصة",
|
"SWITCH_TO_PRIVATE_NOTE": "التبديل إلى الملاحظة الخاصة",
|
||||||
"TOGGLE_RICH_CONTENT_EDITOR": "تبديل محرر المحتوى المتقدم",
|
|
||||||
"SWITCH_TO_REPLY": "التبديل إلى الرد",
|
"SWITCH_TO_REPLY": "التبديل إلى الرد",
|
||||||
"TOGGLE_SNOOZE_DROPDOWN": "تبديل القائمة المنسدلة"
|
"TOGGLE_SNOOZE_DROPDOWN": "تبديل القائمة المنسدلة"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"NOT_AVAILABLE": "Не е наличен",
|
"NOT_AVAILABLE": "Не е наличен",
|
||||||
"EMAIL_ADDRESS": "Имейл адрес",
|
"EMAIL_ADDRESS": "Имейл адрес",
|
||||||
"PHONE_NUMBER": "Телефон",
|
"PHONE_NUMBER": "Телефон",
|
||||||
|
"IDENTIFIER": "Идентификатор",
|
||||||
"COPY_SUCCESSFUL": "Успешно копиране в клипборда",
|
"COPY_SUCCESSFUL": "Успешно копиране в клипборда",
|
||||||
"COMPANY": "Фирма",
|
"COMPANY": "Фирма",
|
||||||
"LOCATION": "Локация",
|
"LOCATION": "Локация",
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"SELECT_A_CONVERSATION": "Please select a conversation from left pane",
|
"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",
|
"404": "Sorry, we cannot find the conversation. Please try again",
|
||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
||||||
@ -110,7 +111,6 @@
|
|||||||
"TIP_AUDIORECORDER_ICON": "Record audio",
|
"TIP_AUDIORECORDER_ICON": "Record audio",
|
||||||
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
||||||
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
||||||
"ENTER_TO_SEND": "Enter to send",
|
|
||||||
"DRAG_DROP": "Drag and drop here to attach",
|
"DRAG_DROP": "Drag and drop here to attach",
|
||||||
"START_AUDIO_RECORDING": "Start audio recording",
|
"START_AUDIO_RECORDING": "Start audio recording",
|
||||||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
||||||
@ -137,7 +137,7 @@
|
|||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
||||||
"CHANGE_TEAM": "Conversation team changed",
|
"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",
|
"MESSAGE_ERROR": "Unable to send this message, please try again later",
|
||||||
"SENT_BY": "Sent by:",
|
"SENT_BY": "Sent by:",
|
||||||
"BOT": "Бот",
|
"BOT": "Бот",
|
||||||
@ -150,7 +150,8 @@
|
|||||||
},
|
},
|
||||||
"CONTEXT_MENU": {
|
"CONTEXT_MENU": {
|
||||||
"COPY": "Copy",
|
"COPY": "Copy",
|
||||||
"DELETE": "Изтрий"
|
"DELETE": "Изтрий",
|
||||||
|
"CREATE_A_CANNED_RESPONSE": "Add to canned responses"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
|
|||||||
@ -20,6 +20,7 @@
|
|||||||
"EDIT_HEADER": {
|
"EDIT_HEADER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "All Articles",
|
||||||
"PUBLISH_BUTTON": "Publish",
|
"PUBLISH_BUTTON": "Publish",
|
||||||
|
"MOVE_TO_ARCHIVE_BUTTON": "Move to archived",
|
||||||
"PREVIEW": "Preview",
|
"PREVIEW": "Preview",
|
||||||
"ADD_TRANSLATION": "Add translation",
|
"ADD_TRANSLATION": "Add translation",
|
||||||
"OPEN_SIDEBAR": "Open sidebar",
|
"OPEN_SIDEBAR": "Open sidebar",
|
||||||
@ -64,6 +65,7 @@
|
|||||||
},
|
},
|
||||||
"PORTAL": {
|
"PORTAL": {
|
||||||
"HEADER": "Portals",
|
"HEADER": "Portals",
|
||||||
|
"DEFAULT": "Default",
|
||||||
"NEW_BUTTON": "New Portal",
|
"NEW_BUTTON": "New Portal",
|
||||||
"ACTIVE_BADGE": "активен",
|
"ACTIVE_BADGE": "активен",
|
||||||
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
||||||
@ -84,7 +86,8 @@
|
|||||||
"COUNT_LABEL": "articles",
|
"COUNT_LABEL": "articles",
|
||||||
"ADD": "Add locale",
|
"ADD": "Add locale",
|
||||||
"VISIT": "Visit site",
|
"VISIT": "Visit site",
|
||||||
"SETTINGS": "Settings"
|
"SETTINGS": "Settings",
|
||||||
|
"DELETE": "Изтрий"
|
||||||
},
|
},
|
||||||
"PORTAL_CONFIG": {
|
"PORTAL_CONFIG": {
|
||||||
"TITLE": "Portal Configurations",
|
"TITLE": "Portal Configurations",
|
||||||
@ -109,6 +112,51 @@
|
|||||||
"DEFAULT_LOCALE": "Default"
|
"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": {
|
"ADD": {
|
||||||
@ -164,7 +212,6 @@
|
|||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "Slug",
|
||||||
"PLACEHOLDER": "Portal slug for urls",
|
"PLACEHOLDER": "Portal slug for urls",
|
||||||
|
|
||||||
"ERROR": "Slug is required"
|
"ERROR": "Slug is required"
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
@ -196,9 +243,41 @@
|
|||||||
"ERROR": "Portal header text is required"
|
"ERROR": "Portal header text is required"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.",
|
||||||
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
|
"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."
|
"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": {
|
"TABLE": {
|
||||||
@ -224,8 +303,34 @@
|
|||||||
"ERROR": "Error while saving article"
|
"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": {
|
"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": {
|
"SIDEBAR": {
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
@ -263,6 +368,43 @@
|
|||||||
"SUCCESS_MESSAGE": "Category created successfully",
|
"SUCCESS_MESSAGE": "Category created successfully",
|
||||||
"ERROR_MESSAGE": "Unable to create category"
|
"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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,21 @@
|
|||||||
"TITLE": "Profile",
|
"TITLE": "Profile",
|
||||||
"NOTE": "Your email address is your identity and is used to log in."
|
"NOTE": "Your email address is your identity and is used to log in."
|
||||||
},
|
},
|
||||||
|
"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",
|
||||||
|
"CARD": {
|
||||||
|
"ENTER_KEY": {
|
||||||
|
"HEADING": "Enter (↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Enter key instead of clicking the send button."
|
||||||
|
},
|
||||||
|
"CMD_ENTER_KEY": {
|
||||||
|
"HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"MESSAGE_SIGNATURE_SECTION": {
|
"MESSAGE_SIGNATURE_SECTION": {
|
||||||
"TITLE": "Personal message signature",
|
"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.",
|
"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.",
|
||||||
@ -197,6 +212,7 @@
|
|||||||
"REPORTS_OVERVIEW": "Overview",
|
"REPORTS_OVERVIEW": "Overview",
|
||||||
"FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
|
"FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
|
"TITLE": "Help Center (Beta)",
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "All Articles",
|
||||||
"MY_ARTICLES": "My Articles",
|
"MY_ARTICLES": "My Articles",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Draft",
|
||||||
@ -256,7 +272,6 @@
|
|||||||
"GO_TO_SETTINGS": "Go to Settings",
|
"GO_TO_SETTINGS": "Go to Settings",
|
||||||
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
||||||
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
||||||
"TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor",
|
|
||||||
"SWITCH_TO_REPLY": "Switch to Reply",
|
"SWITCH_TO_REPLY": "Switch to Reply",
|
||||||
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"NOT_AVAILABLE": "No disponible",
|
"NOT_AVAILABLE": "No disponible",
|
||||||
"EMAIL_ADDRESS": "Adreça de correu electrònic",
|
"EMAIL_ADDRESS": "Adreça de correu electrònic",
|
||||||
"PHONE_NUMBER": "Número de telèfon",
|
"PHONE_NUMBER": "Número de telèfon",
|
||||||
|
"IDENTIFIER": "Identifier",
|
||||||
"COPY_SUCCESSFUL": "S'ha copiat al porta-retalls amb èxit",
|
"COPY_SUCCESSFUL": "S'ha copiat al porta-retalls amb èxit",
|
||||||
"COMPANY": "Companyia",
|
"COMPANY": "Companyia",
|
||||||
"LOCATION": "Ubicació",
|
"LOCATION": "Ubicació",
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"SELECT_A_CONVERSATION": "Si us plau, selecciona una conversa al panell de l’esquerra",
|
"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",
|
"404": "Sorry, we cannot find the conversation. Please try again",
|
||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
||||||
@ -110,7 +111,6 @@
|
|||||||
"TIP_AUDIORECORDER_ICON": "Record audio",
|
"TIP_AUDIORECORDER_ICON": "Record audio",
|
||||||
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
||||||
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
||||||
"ENTER_TO_SEND": "Intro per enviar",
|
|
||||||
"DRAG_DROP": "Drag and drop here to attach",
|
"DRAG_DROP": "Drag and drop here to attach",
|
||||||
"START_AUDIO_RECORDING": "Start audio recording",
|
"START_AUDIO_RECORDING": "Start audio recording",
|
||||||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
||||||
@ -137,7 +137,7 @@
|
|||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
||||||
"CHANGE_TEAM": "Conversation team changed",
|
"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",
|
"MESSAGE_ERROR": "Unable to send this message, please try again later",
|
||||||
"SENT_BY": "Enviat per:",
|
"SENT_BY": "Enviat per:",
|
||||||
"BOT": "Bot",
|
"BOT": "Bot",
|
||||||
@ -150,7 +150,8 @@
|
|||||||
},
|
},
|
||||||
"CONTEXT_MENU": {
|
"CONTEXT_MENU": {
|
||||||
"COPY": "Copia",
|
"COPY": "Copia",
|
||||||
"DELETE": "Esborrar"
|
"DELETE": "Esborrar",
|
||||||
|
"CREATE_A_CANNED_RESPONSE": "Add to canned responses"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
|
|||||||
@ -20,6 +20,7 @@
|
|||||||
"EDIT_HEADER": {
|
"EDIT_HEADER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "All Articles",
|
||||||
"PUBLISH_BUTTON": "Publish",
|
"PUBLISH_BUTTON": "Publish",
|
||||||
|
"MOVE_TO_ARCHIVE_BUTTON": "Move to archived",
|
||||||
"PREVIEW": "Preview",
|
"PREVIEW": "Preview",
|
||||||
"ADD_TRANSLATION": "Add translation",
|
"ADD_TRANSLATION": "Add translation",
|
||||||
"OPEN_SIDEBAR": "Open sidebar",
|
"OPEN_SIDEBAR": "Open sidebar",
|
||||||
@ -64,6 +65,7 @@
|
|||||||
},
|
},
|
||||||
"PORTAL": {
|
"PORTAL": {
|
||||||
"HEADER": "Portals",
|
"HEADER": "Portals",
|
||||||
|
"DEFAULT": "Default",
|
||||||
"NEW_BUTTON": "New Portal",
|
"NEW_BUTTON": "New Portal",
|
||||||
"ACTIVE_BADGE": "active",
|
"ACTIVE_BADGE": "active",
|
||||||
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
||||||
@ -84,7 +86,8 @@
|
|||||||
"COUNT_LABEL": "articles",
|
"COUNT_LABEL": "articles",
|
||||||
"ADD": "Add locale",
|
"ADD": "Add locale",
|
||||||
"VISIT": "Visit site",
|
"VISIT": "Visit site",
|
||||||
"SETTINGS": "Configuracions"
|
"SETTINGS": "Configuracions",
|
||||||
|
"DELETE": "Esborrar"
|
||||||
},
|
},
|
||||||
"PORTAL_CONFIG": {
|
"PORTAL_CONFIG": {
|
||||||
"TITLE": "Portal Configurations",
|
"TITLE": "Portal Configurations",
|
||||||
@ -109,6 +112,51 @@
|
|||||||
"DEFAULT_LOCALE": "Default"
|
"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": {
|
"ADD": {
|
||||||
@ -164,7 +212,6 @@
|
|||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "Slug",
|
||||||
"PLACEHOLDER": "Portal slug for urls",
|
"PLACEHOLDER": "Portal slug for urls",
|
||||||
|
|
||||||
"ERROR": "Slug is required"
|
"ERROR": "Slug is required"
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
@ -196,9 +243,41 @@
|
|||||||
"ERROR": "Portal header text is required"
|
"ERROR": "Portal header text is required"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.",
|
||||||
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
|
"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."
|
"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": {
|
"TABLE": {
|
||||||
@ -224,8 +303,34 @@
|
|||||||
"ERROR": "Error while saving article"
|
"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": {
|
"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": {
|
"SIDEBAR": {
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
@ -263,6 +368,43 @@
|
|||||||
"SUCCESS_MESSAGE": "Category created successfully",
|
"SUCCESS_MESSAGE": "Category created successfully",
|
||||||
"ERROR_MESSAGE": "Unable to create category"
|
"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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,21 @@
|
|||||||
"TITLE": "Perfil",
|
"TITLE": "Perfil",
|
||||||
"NOTE": "La vostra adreça de correu electrònic és la vostra identitat i s'utilitza per iniciar la sessió."
|
"NOTE": "La vostra adreça de correu electrònic és la vostra identitat i s'utilitza per iniciar la sessió."
|
||||||
},
|
},
|
||||||
|
"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",
|
||||||
|
"CARD": {
|
||||||
|
"ENTER_KEY": {
|
||||||
|
"HEADING": "Enter (↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Enter key instead of clicking the send button."
|
||||||
|
},
|
||||||
|
"CMD_ENTER_KEY": {
|
||||||
|
"HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"MESSAGE_SIGNATURE_SECTION": {
|
"MESSAGE_SIGNATURE_SECTION": {
|
||||||
"TITLE": "Personal message signature",
|
"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.",
|
"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.",
|
||||||
@ -197,6 +212,7 @@
|
|||||||
"REPORTS_OVERVIEW": "Overview",
|
"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",
|
"FACEBOOK_REAUTHORIZE": "La teva connexió a Facebook ha caducat, torna a connectar la vostra pàgina de Facebook per continuar els serveis",
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
|
"TITLE": "Help Center (Beta)",
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "All Articles",
|
||||||
"MY_ARTICLES": "My Articles",
|
"MY_ARTICLES": "My Articles",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Draft",
|
||||||
@ -256,7 +272,6 @@
|
|||||||
"GO_TO_SETTINGS": "Go to Settings",
|
"GO_TO_SETTINGS": "Go to Settings",
|
||||||
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
||||||
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
||||||
"TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor",
|
|
||||||
"SWITCH_TO_REPLY": "Switch to Reply",
|
"SWITCH_TO_REPLY": "Switch to Reply",
|
||||||
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
"is_present": "Is present",
|
"is_present": "Is present",
|
||||||
"is_not_present": "Is not present",
|
"is_not_present": "Is not present",
|
||||||
"is_greater_than": "Is greater than",
|
"is_greater_than": "Is greater than",
|
||||||
"is_less_than": "Is lesser than",
|
"is_less_than": "Je menší než",
|
||||||
"days_before": "Is x days before"
|
"days_before": "Is x days before"
|
||||||
},
|
},
|
||||||
"ATTRIBUTE_LABELS": {
|
"ATTRIBUTE_LABELS": {
|
||||||
|
|||||||
@ -7,22 +7,22 @@
|
|||||||
"404": "V této skupině nejsou žádné aktivní konverzace."
|
"404": "V této skupině nejsou žádné aktivní konverzace."
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Konverzace",
|
"TAB_HEADING": "Konverzace",
|
||||||
"MENTION_HEADING": "Zmínka",
|
"MENTION_HEADING": "Zmínky",
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Hledat lidi, chaty, Uložené odpovědi .."
|
"INPUT": "Hledat lidi, chaty, Uložené odpovědi .."
|
||||||
},
|
},
|
||||||
"FILTER_ALL": "Vše",
|
"FILTER_ALL": "Vše",
|
||||||
"ASSIGNEE_TYPE_TABS": {
|
"ASSIGNEE_TYPE_TABS": {
|
||||||
"me": "Mine",
|
"me": "Moje",
|
||||||
"unassigned": "Nepřiřazeno",
|
"unassigned": "Nepřiřazeno",
|
||||||
"all": "Vše"
|
"all": "Vše"
|
||||||
},
|
},
|
||||||
"CHAT_STATUS_FILTER_ITEMS": {
|
"CHAT_STATUS_FILTER_ITEMS": {
|
||||||
"open": {
|
"open": {
|
||||||
"TEXT": "Otevřít"
|
"TEXT": "Otevřené"
|
||||||
},
|
},
|
||||||
"resolved": {
|
"resolved": {
|
||||||
"TEXT": "Vyřešeno"
|
"TEXT": "Vyřešené"
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
"TEXT": "Čekající"
|
"TEXT": "Čekající"
|
||||||
@ -55,11 +55,11 @@
|
|||||||
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
|
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
|
||||||
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
|
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
|
||||||
"LINK_TO_STORY": "Přejít na instagram příběh",
|
"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_MESSAGES": "Žádné zprávy",
|
||||||
"NO_CONTENT": "Žádný obsah k dispozici",
|
"NO_CONTENT": "Žádný obsah k dispozici",
|
||||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
"HIDE_QUOTED_TEXT": "Skrýt citovaný text",
|
||||||
"SHOW_QUOTED_TEXT": "Show Quoted Text",
|
"SHOW_QUOTED_TEXT": "Zobrazit citovaný text",
|
||||||
"MESSAGE_READ": "Přečteno"
|
"MESSAGE_READ": "Přečtené"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
"NOT_AVAILABLE": "Nedostupné",
|
"NOT_AVAILABLE": "Nedostupné",
|
||||||
"EMAIL_ADDRESS": "E-mailová adresa",
|
"EMAIL_ADDRESS": "E-mailová adresa",
|
||||||
"PHONE_NUMBER": "Telefonní číslo",
|
"PHONE_NUMBER": "Telefonní číslo",
|
||||||
|
"IDENTIFIER": "Identifikátor",
|
||||||
"COPY_SUCCESSFUL": "Úspěšně zkopírováno do schránky",
|
"COPY_SUCCESSFUL": "Úspěšně zkopírováno do schránky",
|
||||||
"COMPANY": "Společnost",
|
"COMPANY": "Společnost",
|
||||||
"LOCATION": "Poloha",
|
"LOCATION": "Poloha",
|
||||||
|
|||||||
@ -1,49 +1,49 @@
|
|||||||
{
|
{
|
||||||
"CONTACTS_FILTER": {
|
"CONTACTS_FILTER": {
|
||||||
"TITLE": "Filter Contacts",
|
"TITLE": "Filtrovat kontakty",
|
||||||
"SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.",
|
"SUBTITLE": "Přidejte filtry níže a stiskněte 'Odeslat' pro filtrování kontaktů.",
|
||||||
"ADD_NEW_FILTER": "Add Filter",
|
"ADD_NEW_FILTER": "Přidat filtr",
|
||||||
"CLEAR_ALL_FILTERS": "Clear All Filters",
|
"CLEAR_ALL_FILTERS": "Vymazat všechny filtry",
|
||||||
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
|
"FILTER_DELETE_ERROR": "Pro uložení byste měli mít alespoň jeden filtr",
|
||||||
"SUBMIT_BUTTON_LABEL": "Odeslat",
|
"SUBMIT_BUTTON_LABEL": "Odeslat",
|
||||||
"CANCEL_BUTTON_LABEL": "Zrušit",
|
"CANCEL_BUTTON_LABEL": "Zrušit",
|
||||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
"CLEAR_BUTTON_LABEL": "Vymazat filtry",
|
||||||
"EMPTY_VALUE_ERROR": "Value is required",
|
"EMPTY_VALUE_ERROR": "Hodnota je povinná",
|
||||||
"TOOLTIP_LABEL": "Filter contacts",
|
"TOOLTIP_LABEL": "Filtrovat kontakty",
|
||||||
"QUERY_DROPDOWN_LABELS": {
|
"QUERY_DROPDOWN_LABELS": {
|
||||||
"AND": "AND",
|
"AND": "A",
|
||||||
"OR": "OR"
|
"OR": "NEBO"
|
||||||
},
|
},
|
||||||
"OPERATOR_LABELS": {
|
"OPERATOR_LABELS": {
|
||||||
"equal_to": "Equal to",
|
"equal_to": "Rovno",
|
||||||
"not_equal_to": "Not equal to",
|
"not_equal_to": "Nerovno",
|
||||||
"contains": "Contains",
|
"contains": "Obsahuje",
|
||||||
"does_not_contain": "Does not contain",
|
"does_not_contain": "Neobsahuje",
|
||||||
"is_present": "Is present",
|
"is_present": "Je přítomno",
|
||||||
"is_not_present": "Is not present",
|
"is_not_present": "Není přítomno",
|
||||||
"is_greater_than": "Is greater than",
|
"is_greater_than": "Je větší než",
|
||||||
"is_lesser_than": "Is lesser than",
|
"is_lesser_than": "Je menší než",
|
||||||
"days_before": "Is x days before"
|
"days_before": "Je o x dnů dříve"
|
||||||
},
|
},
|
||||||
"ATTRIBUTES": {
|
"ATTRIBUTES": {
|
||||||
"NAME": "Název",
|
"NAME": "Název",
|
||||||
"EMAIL": "E-mailová adresa",
|
"EMAIL": "E-mailová adresa",
|
||||||
"PHONE_NUMBER": "Telefonní číslo",
|
"PHONE_NUMBER": "Telefonní číslo",
|
||||||
"IDENTIFIER": "Identifier",
|
"IDENTIFIER": "Identifikátor",
|
||||||
"CITY": "Město",
|
"CITY": "Město",
|
||||||
"COUNTRY": "Země",
|
"COUNTRY": "Země",
|
||||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
"CUSTOM_ATTRIBUTE_LIST": "Seznam",
|
||||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
||||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
"CUSTOM_ATTRIBUTE_NUMBER": "Číslo",
|
||||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
"CUSTOM_ATTRIBUTE_LINK": "Odkaz",
|
||||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
"CUSTOM_ATTRIBUTE_CHECKBOX": "Zaškrtávací pole",
|
||||||
"CREATED_AT": "Created At",
|
"CREATED_AT": "Vytvořeno",
|
||||||
"LAST_ACTIVITY": "Poslední aktivita",
|
"LAST_ACTIVITY": "Poslední aktivita",
|
||||||
"REFERER_LINK": "Referrer link"
|
"REFERER_LINK": "Odkazující odkaz"
|
||||||
},
|
},
|
||||||
"GROUPS": {
|
"GROUPS": {
|
||||||
"STANDARD_FILTERS": "Standard Filters",
|
"STANDARD_FILTERS": "Standardní filtry",
|
||||||
"ADDITIONAL_FILTERS": "Additional Filters",
|
"ADDITIONAL_FILTERS": "Další filtry",
|
||||||
"CUSTOM_ATTRIBUTES": "Vlastní atributy"
|
"CUSTOM_ATTRIBUTES": "Vlastní atributy"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"SELECT_A_CONVERSATION": "Please select a conversation from left pane",
|
"SELECT_A_CONVERSATION": "Vyberte prosím konverzaci z levého panelu",
|
||||||
"404": "Sorry, we cannot find the conversation. Please try again",
|
"CSAT_REPLY_MESSAGE": "Ohodnoťte prosím konverzaci",
|
||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"404": "Omlouváme se, konverzaci nelze najít. Zkuste to prosím znovu",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
"SWITCH_VIEW_LAYOUT": "Přepnout rozložení",
|
||||||
|
"DASHBOARD_APP_TAB_MESSAGES": "Zprávy",
|
||||||
"UNVERIFIED_SESSION": "Identita tohoto uživatele není ověřena",
|
"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_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!",
|
"NO_MESSAGE_2": " pro odeslání zprávy na vaši stránku!",
|
||||||
@ -33,7 +34,7 @@
|
|||||||
"REPLYING_TO": "Odpovídáte uživateli:",
|
"REPLYING_TO": "Odpovídáte uživateli:",
|
||||||
"REMOVE_SELECTION": "Odstranit výběr",
|
"REMOVE_SELECTION": "Odstranit výběr",
|
||||||
"DOWNLOAD": "Stáhnout",
|
"DOWNLOAD": "Stáhnout",
|
||||||
"UNKNOWN_FILE_TYPE": "Unknown File",
|
"UNKNOWN_FILE_TYPE": "Neznámý soubor",
|
||||||
"UPLOADING_ATTACHMENTS": "Nahrávání příloh...",
|
"UPLOADING_ATTACHMENTS": "Nahrávání příloh...",
|
||||||
"SUCCESS_DELETE_MESSAGE": "Zpráva byla úspěšně smazána",
|
"SUCCESS_DELETE_MESSAGE": "Zpráva byla úspěšně smazána",
|
||||||
"FAIL_DELETE_MESSSAGE": "Zpráva se nepodařilo odstranit! Zkuste to znovu",
|
"FAIL_DELETE_MESSSAGE": "Zpráva se nepodařilo odstranit! Zkuste to znovu",
|
||||||
@ -62,30 +63,30 @@
|
|||||||
},
|
},
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Označit jako nevyřízené",
|
"PENDING": "Označit jako nevyřízené",
|
||||||
"RESOLVED": "Mark as resolved",
|
"RESOLVED": "Označit jako vyřešené",
|
||||||
"REOPEN": "Reopen conversation",
|
"REOPEN": "Znovu otevřít konverzaci",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze",
|
"TITLE": "Odložit",
|
||||||
"NEXT_REPLY": "Until next reply",
|
"NEXT_REPLY": "Do další odpovědi",
|
||||||
"TOMORROW": "Until tomorrow",
|
"TOMORROW": "Do zítřka",
|
||||||
"NEXT_WEEK": "Until next week"
|
"NEXT_WEEK": "Do příštího týdne"
|
||||||
},
|
},
|
||||||
"ASSIGN_AGENT": "Assign agent",
|
"ASSIGN_AGENT": "Přiřadit agenta",
|
||||||
"ASSIGN_LABEL": "Assign label",
|
"ASSIGN_LABEL": "Přiřadit štítek",
|
||||||
"AGENTS_LOADING": "Loading agents...",
|
"AGENTS_LOADING": "Načítání agentů...",
|
||||||
"ASSIGN_TEAM": "Assign team",
|
"ASSIGN_TEAM": "Přiřadit tým",
|
||||||
"API": {
|
"API": {
|
||||||
"AGENT_ASSIGNMENT": {
|
"AGENT_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"",
|
"SUCCESFUL": "Konverzace id %{conversationId} přiřazena \"%{agentName}\"",
|
||||||
"FAILED": "Couldn't assign agent. Please try again."
|
"FAILED": "Nelze přiřadit agenta. Zkuste to prosím znovu."
|
||||||
},
|
},
|
||||||
"LABEL_ASSIGNMENT": {
|
"LABEL_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}",
|
"SUCCESFUL": "Přiřazený štítek #%{labelName} ke konverzaci id %{conversationId}",
|
||||||
"FAILED": "Couldn't assign label. Please try again."
|
"FAILED": "Nelze přiřadit štítek. Zkuste to prosím znovu."
|
||||||
},
|
},
|
||||||
"TEAM_ASSIGNMENT": {
|
"TEAM_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}",
|
"SUCCESFUL": "Přiřazený tým #%{team} ke konverzaci id %{conversationId}",
|
||||||
"FAILED": "Couldn't assign team. Please try again."
|
"FAILED": "Nelze přiřadit tým. Zkuste to prosím znovu."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -95,7 +96,7 @@
|
|||||||
"DISABLE_SIGN_TOOLTIP": "Zakázat podpis",
|
"DISABLE_SIGN_TOOLTIP": "Zakázat podpis",
|
||||||
"MSG_INPUT": "Shift + zadejte pro nový řádek. Začněte '/' pro výběr zrušené odpovědi.",
|
"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",
|
"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"
|
"CLICK_HERE": "Klikněte zde pro aktualizaci"
|
||||||
},
|
},
|
||||||
"REPLYBOX": {
|
"REPLYBOX": {
|
||||||
@ -110,7 +111,6 @@
|
|||||||
"TIP_AUDIORECORDER_ICON": "Nahrát zvuk",
|
"TIP_AUDIORECORDER_ICON": "Nahrát zvuk",
|
||||||
"TIP_AUDIORECORDER_PERMISSION": "Povolit přístup ke zvuku",
|
"TIP_AUDIORECORDER_PERMISSION": "Povolit přístup ke zvuku",
|
||||||
"TIP_AUDIORECORDER_ERROR": "Zvuk se nepodařilo otevřít",
|
"TIP_AUDIORECORDER_ERROR": "Zvuk se nepodařilo otevřít",
|
||||||
"ENTER_TO_SEND": "Enterem odeslat",
|
|
||||||
"DRAG_DROP": "Přetažením sem připojíte",
|
"DRAG_DROP": "Přetažením sem připojíte",
|
||||||
"START_AUDIO_RECORDING": "Spustit nahrávání zvuku",
|
"START_AUDIO_RECORDING": "Spustit nahrávání zvuku",
|
||||||
"STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku",
|
"STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku",
|
||||||
@ -131,13 +131,13 @@
|
|||||||
},
|
},
|
||||||
"VISIBLE_TO_AGENTS": "Soukromá poznámka: Viditelné pouze pro vás a váš tým",
|
"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": "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": "Konverzace pověřená osoba změněna",
|
||||||
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
"CHANGE_AGENT_FAILED": "Změna přiřazeného agenta se nezdařila",
|
||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "Štítek byl úspěšně přiřazen",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "Přiřazení štítku se nezdařilo",
|
||||||
"CHANGE_TEAM": "Tým konverzace se změnil",
|
"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",
|
"MESSAGE_ERROR": "Nepodařilo se odeslat tuto zprávu, zkuste to prosím později",
|
||||||
"SENT_BY": "Odeslal:",
|
"SENT_BY": "Odeslal:",
|
||||||
"BOT": "Bot",
|
"BOT": "Bot",
|
||||||
@ -150,7 +150,8 @@
|
|||||||
},
|
},
|
||||||
"CONTEXT_MENU": {
|
"CONTEXT_MENU": {
|
||||||
"COPY": "Kopírovat",
|
"COPY": "Kopírovat",
|
||||||
"DELETE": "Vymazat"
|
"DELETE": "Vymazat",
|
||||||
|
"CREATE_A_CANNED_RESPONSE": "Add to canned responses"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
@ -180,7 +181,7 @@
|
|||||||
},
|
},
|
||||||
"TEAM_MEMBERS": {
|
"TEAM_MEMBERS": {
|
||||||
"TITLE": "Pozvěte své členy týmu",
|
"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"
|
"NEW_LINK": "Klikněte zde pro pozvání člena týmu"
|
||||||
},
|
},
|
||||||
"INBOXES": {
|
"INBOXES": {
|
||||||
|
|||||||
@ -1,74 +1,76 @@
|
|||||||
{
|
{
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"FILTER": "Filter by",
|
"FILTER": "Filtrovat podle",
|
||||||
"SORT": "Sort by",
|
"SORT": "Seřadit podle",
|
||||||
"SETTINGS_BUTTON": "Nastavení",
|
"SETTINGS_BUTTON": "Nastavení",
|
||||||
"NEW_BUTTON": "New Article",
|
"NEW_BUTTON": "Nový článek",
|
||||||
"DROPDOWN_OPTIONS": {
|
"DROPDOWN_OPTIONS": {
|
||||||
"PUBLISHED": "Published",
|
"PUBLISHED": "Publikované",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Koncept",
|
||||||
"ARCHIVED": "Archived"
|
"ARCHIVED": "Archivované"
|
||||||
},
|
},
|
||||||
"TITLES": {
|
"TITLES": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "Všechny články",
|
||||||
"MINE": "My Articles",
|
"MINE": "Moje články",
|
||||||
"DRAFT": "Draft Articles",
|
"DRAFT": "Koncepty článků",
|
||||||
"ARCHIVED": "Archived Articles"
|
"ARCHIVED": "Archivované články"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT_HEADER": {
|
"EDIT_HEADER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "Všechny články",
|
||||||
"PUBLISH_BUTTON": "Publish",
|
"PUBLISH_BUTTON": "Publikovat",
|
||||||
"PREVIEW": "Preview",
|
"MOVE_TO_ARCHIVE_BUTTON": "Move to archived",
|
||||||
"ADD_TRANSLATION": "Add translation",
|
"PREVIEW": "Náhled",
|
||||||
"OPEN_SIDEBAR": "Open sidebar",
|
"ADD_TRANSLATION": "Přidat překlad",
|
||||||
"CLOSE_SIDEBAR": "Close sidebar",
|
"OPEN_SIDEBAR": "Otevřít postranní panel",
|
||||||
"SAVING": "Saving...",
|
"CLOSE_SIDEBAR": "Zavřít postranní panel",
|
||||||
"SAVED": "Saved"
|
"SAVING": "Ukládání...",
|
||||||
|
"SAVED": "Uloženo"
|
||||||
},
|
},
|
||||||
"ARTICLE_SETTINGS": {
|
"ARTICLE_SETTINGS": {
|
||||||
"TITLE": "Article Settings",
|
"TITLE": "Nastavení článků",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CATEGORY": {
|
"CATEGORY": {
|
||||||
"LABEL": "Category",
|
"LABEL": "Kategorie",
|
||||||
"TITLE": "Select category",
|
"TITLE": "Vyberte kategorii",
|
||||||
"PLACEHOLDER": "Select category",
|
"PLACEHOLDER": "Vyberte kategorii",
|
||||||
"NO_RESULT": "No category found",
|
"NO_RESULT": "Nebyla nalezena žádná kategorie",
|
||||||
"SEARCH_PLACEHOLDER": "Search category"
|
"SEARCH_PLACEHOLDER": "Hledat kategorii"
|
||||||
},
|
},
|
||||||
"AUTHOR": {
|
"AUTHOR": {
|
||||||
"LABEL": "Author",
|
"LABEL": "Autor",
|
||||||
"TITLE": "Select author",
|
"TITLE": "Vyberte autora",
|
||||||
"PLACEHOLDER": "Select author",
|
"PLACEHOLDER": "Vyberte autora",
|
||||||
"NO_RESULT": "No authors found",
|
"NO_RESULT": "Nebyli nalezeni žádní autoři",
|
||||||
"SEARCH_PLACEHOLDER": "Search author"
|
"SEARCH_PLACEHOLDER": "Hledat autora"
|
||||||
},
|
},
|
||||||
"META_TITLE": {
|
"META_TITLE": {
|
||||||
"LABEL": "Meta title",
|
"LABEL": "Meta titulek",
|
||||||
"PLACEHOLDER": "Add a meta title"
|
"PLACEHOLDER": "Přidat meta titulek"
|
||||||
},
|
},
|
||||||
"META_DESCRIPTION": {
|
"META_DESCRIPTION": {
|
||||||
"LABEL": "Meta description",
|
"LABEL": "Meta popis",
|
||||||
"PLACEHOLDER": "Add your meta description for better SEO results..."
|
"PLACEHOLDER": "Přidejte svůj meta popis pro lepší výsledky SEO..."
|
||||||
},
|
},
|
||||||
"META_TAGS": {
|
"META_TAGS": {
|
||||||
"LABEL": "Meta tags",
|
"LABEL": "Meta tagy",
|
||||||
"PLACEHOLDER": "Add meta tags separated by comma..."
|
"PLACEHOLDER": "Přidat meta tagy oddělené čárkou..."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"ARCHIVE": "Archive article",
|
"ARCHIVE": "Archivovat článek",
|
||||||
"DELETE": "Delete article"
|
"DELETE": "Odstranit článek"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PORTAL": {
|
"PORTAL": {
|
||||||
"HEADER": "Portals",
|
"HEADER": "Portály",
|
||||||
"NEW_BUTTON": "New Portal",
|
"DEFAULT": "Default",
|
||||||
"ACTIVE_BADGE": "active",
|
"NEW_BUTTON": "Nový portál",
|
||||||
|
"ACTIVE_BADGE": "aktivní",
|
||||||
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
||||||
"LOADING_MESSAGE": "Loading portals...",
|
"LOADING_MESSAGE": "Načítání portálů...",
|
||||||
"ARTICLES_LABEL": "articles",
|
"ARTICLES_LABEL": "články",
|
||||||
"NO_PORTALS_MESSAGE": "There are no available portals",
|
"NO_PORTALS_MESSAGE": "There are no available portals",
|
||||||
"ADD_NEW_LOCALE": "Add a new locale",
|
"ADD_NEW_LOCALE": "Add a new locale",
|
||||||
"POPOVER": {
|
"POPOVER": {
|
||||||
@ -81,10 +83,11 @@
|
|||||||
"PORTAL_SETTINGS": {
|
"PORTAL_SETTINGS": {
|
||||||
"LIST_ITEM": {
|
"LIST_ITEM": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"COUNT_LABEL": "articles",
|
"COUNT_LABEL": "články",
|
||||||
"ADD": "Add locale",
|
"ADD": "Add locale",
|
||||||
"VISIT": "Visit site",
|
"VISIT": "Visit site",
|
||||||
"SETTINGS": "Nastavení"
|
"SETTINGS": "Nastavení",
|
||||||
|
"DELETE": "Vymazat"
|
||||||
},
|
},
|
||||||
"PORTAL_CONFIG": {
|
"PORTAL_CONFIG": {
|
||||||
"TITLE": "Portal Configurations",
|
"TITLE": "Portal Configurations",
|
||||||
@ -109,6 +112,51 @@
|
|||||||
"DEFAULT_LOCALE": "Default"
|
"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": {
|
"ADD": {
|
||||||
@ -164,7 +212,6 @@
|
|||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "Slug",
|
||||||
"PLACEHOLDER": "Portal slug for urls",
|
"PLACEHOLDER": "Portal slug for urls",
|
||||||
|
|
||||||
"ERROR": "Slug is required"
|
"ERROR": "Slug is required"
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
@ -196,9 +243,41 @@
|
|||||||
"ERROR": "Portal header text is required"
|
"ERROR": "Portal header text is required"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.",
|
||||||
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
|
"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."
|
"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": {
|
"TABLE": {
|
||||||
@ -224,8 +303,34 @@
|
|||||||
"ERROR": "Error while saving article"
|
"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": {
|
"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": {
|
"SIDEBAR": {
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
@ -263,6 +368,43 @@
|
|||||||
"SUCCESS_MESSAGE": "Category created successfully",
|
"SUCCESS_MESSAGE": "Category created successfully",
|
||||||
"ERROR_MESSAGE": "Unable to create category"
|
"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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -622,7 +622,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WIDGET_VIEW_OPTION": {
|
"WIDGET_VIEW_OPTION": {
|
||||||
"PREVIEW": "Preview",
|
"PREVIEW": "Náhled",
|
||||||
"SCRIPT": "Script"
|
"SCRIPT": "Script"
|
||||||
},
|
},
|
||||||
"WIDGET_BUBBLE_POSITION": {
|
"WIDGET_BUBBLE_POSITION": {
|
||||||
|
|||||||
@ -45,11 +45,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "Poslední 3 měsíce"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "Posledních 6 měsíců"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -57,15 +57,15 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "Vlastní časové rozmezí"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Použít",
|
"CONFIRM": "Použít",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "Zvolte časové rozmezí"
|
||||||
},
|
},
|
||||||
"GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By",
|
"GROUP_BY_FILTER_DROPDOWN_LABEL": "Seskupit podle",
|
||||||
"DURATION_FILTER_LABEL": "Duration",
|
"DURATION_FILTER_LABEL": "Doba trvání",
|
||||||
"GROUP_BY_DAY_OPTIONS": [
|
"GROUP_BY_DAY_OPTIONS": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@ -163,11 +163,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "Poslední 3 měsíce"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "Posledních 6 měsíců"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -175,12 +175,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "Vlastní časové rozmezí"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Použít",
|
"CONFIRM": "Použít",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "Zvolte časové rozmezí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LABEL_REPORTS": {
|
"LABEL_REPORTS": {
|
||||||
@ -230,11 +230,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "Poslední 3 měsíce"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "Posledních 6 měsíců"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -242,12 +242,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "Vlastní časové rozmezí"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Použít",
|
"CONFIRM": "Použít",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "Zvolte časové rozmezí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"INBOX_REPORTS": {
|
"INBOX_REPORTS": {
|
||||||
@ -297,11 +297,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "Poslední 3 měsíce"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "Posledních 6 měsíců"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -309,12 +309,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "Vlastní časové rozmezí"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Použít",
|
"CONFIRM": "Použít",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "Zvolte časové rozmezí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TEAM_REPORTS": {
|
"TEAM_REPORTS": {
|
||||||
@ -364,11 +364,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Last 3 months"
|
"name": "Poslední 3 měsíce"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "Last 6 months"
|
"name": "Posledních 6 měsíců"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -376,12 +376,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "Custom date range"
|
"name": "Vlastní časové rozmezí"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CUSTOM_DATE_RANGE": {
|
"CUSTOM_DATE_RANGE": {
|
||||||
"CONFIRM": "Použít",
|
"CONFIRM": "Použít",
|
||||||
"PLACEHOLDER": "Select date range"
|
"PLACEHOLDER": "Zvolte časové rozmezí"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CSAT_REPORTS": {
|
"CSAT_REPORTS": {
|
||||||
|
|||||||
@ -19,6 +19,21 @@
|
|||||||
"TITLE": "Profil",
|
"TITLE": "Profil",
|
||||||
"NOTE": "Vaše e-mailová adresa je Vaše identita a používá se k přihlášení."
|
"NOTE": "Vaše e-mailová adresa je Vaše identita a používá se k přihlášení."
|
||||||
},
|
},
|
||||||
|
"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",
|
||||||
|
"CARD": {
|
||||||
|
"ENTER_KEY": {
|
||||||
|
"HEADING": "Enter (↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Enter key instead of clicking the send button."
|
||||||
|
},
|
||||||
|
"CMD_ENTER_KEY": {
|
||||||
|
"HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)",
|
||||||
|
"CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"MESSAGE_SIGNATURE_SECTION": {
|
"MESSAGE_SIGNATURE_SECTION": {
|
||||||
"TITLE": "Personal message signature",
|
"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.",
|
"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.",
|
||||||
@ -158,7 +173,7 @@
|
|||||||
"SWITCH": "Switch",
|
"SWITCH": "Switch",
|
||||||
"CONVERSATIONS": "Konverzace",
|
"CONVERSATIONS": "Konverzace",
|
||||||
"ALL_CONVERSATIONS": "All Conversations",
|
"ALL_CONVERSATIONS": "All Conversations",
|
||||||
"MENTIONED_CONVERSATIONS": "Zmínka",
|
"MENTIONED_CONVERSATIONS": "Zmínky",
|
||||||
"REPORTS": "Zprávy",
|
"REPORTS": "Zprávy",
|
||||||
"SETTINGS": "Nastavení",
|
"SETTINGS": "Nastavení",
|
||||||
"CONTACTS": "Kontakty",
|
"CONTACTS": "Kontakty",
|
||||||
@ -197,6 +212,7 @@
|
|||||||
"REPORTS_OVERVIEW": "Overview",
|
"REPORTS_OVERVIEW": "Overview",
|
||||||
"FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
|
"FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
|
"TITLE": "Help Center (Beta)",
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "All Articles",
|
||||||
"MY_ARTICLES": "My Articles",
|
"MY_ARTICLES": "My Articles",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Draft",
|
||||||
@ -256,7 +272,6 @@
|
|||||||
"GO_TO_SETTINGS": "Go to Settings",
|
"GO_TO_SETTINGS": "Go to Settings",
|
||||||
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
||||||
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
||||||
"TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor",
|
|
||||||
"SWITCH_TO_REPLY": "Switch to Reply",
|
"SWITCH_TO_REPLY": "Switch to Reply",
|
||||||
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
"LABEL": "Heslo",
|
"LABEL": "Heslo",
|
||||||
"PLACEHOLDER": "Heslo",
|
"PLACEHOLDER": "Heslo",
|
||||||
"ERROR": "Heslo je příliš krátké",
|
"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": {
|
"CONFIRM_PASSWORD": {
|
||||||
"LABEL": "Potvrzení hesla",
|
"LABEL": "Potvrzení hesla",
|
||||||
|
|||||||
@ -1,91 +1,91 @@
|
|||||||
{
|
{
|
||||||
"FILTER": {
|
"FILTER": {
|
||||||
"TITLE": "Filter Conversations",
|
"TITLE": "Filtrer Samtaler",
|
||||||
"SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.",
|
"SUBTITLE": "Tilføj filtre nedenfor og tryk på 'Anvend filtre' for at filtrere samtaler.",
|
||||||
"ADD_NEW_FILTER": "Add Filter",
|
"ADD_NEW_FILTER": "Tilføj Filter",
|
||||||
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
|
"FILTER_DELETE_ERROR": "Du skal have mindst et filter at gemme",
|
||||||
"SUBMIT_BUTTON_LABEL": "Apply filters",
|
"SUBMIT_BUTTON_LABEL": "Anvend filtre",
|
||||||
"CANCEL_BUTTON_LABEL": "Annuller",
|
"CANCEL_BUTTON_LABEL": "Annuller",
|
||||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
"CLEAR_BUTTON_LABEL": "Ryd Filtre",
|
||||||
"EMPTY_VALUE_ERROR": "Value is required",
|
"EMPTY_VALUE_ERROR": "Værdi er påkrævet",
|
||||||
"TOOLTIP_LABEL": "Filter conversations",
|
"TOOLTIP_LABEL": "Filtrer samtaler",
|
||||||
"QUERY_DROPDOWN_LABELS": {
|
"QUERY_DROPDOWN_LABELS": {
|
||||||
"AND": "AND",
|
"AND": "OG",
|
||||||
"OR": "OR"
|
"OR": "ELLER"
|
||||||
},
|
},
|
||||||
"OPERATOR_LABELS": {
|
"OPERATOR_LABELS": {
|
||||||
"equal_to": "Equal to",
|
"equal_to": "Lig med",
|
||||||
"not_equal_to": "Not equal to",
|
"not_equal_to": "Ikke lig med",
|
||||||
"contains": "Contains",
|
"contains": "Indeholder",
|
||||||
"does_not_contain": "Does not contain",
|
"does_not_contain": "Indeholder ikke",
|
||||||
"is_present": "Is present",
|
"is_present": "Er til stede",
|
||||||
"is_not_present": "Is not present",
|
"is_not_present": "Er ikke til stede",
|
||||||
"is_greater_than": "Is greater than",
|
"is_greater_than": "Er større end",
|
||||||
"is_less_than": "Is lesser than",
|
"is_less_than": "Er mindre end",
|
||||||
"days_before": "Is x days before"
|
"days_before": "Er x dage før"
|
||||||
},
|
},
|
||||||
"ATTRIBUTE_LABELS": {
|
"ATTRIBUTE_LABELS": {
|
||||||
"TRUE": "True",
|
"TRUE": "Sandt",
|
||||||
"FALSE": "False"
|
"FALSE": "Falsk"
|
||||||
},
|
},
|
||||||
"ATTRIBUTES": {
|
"ATTRIBUTES": {
|
||||||
"STATUS": "Status",
|
"STATUS": "Status",
|
||||||
"ASSIGNEE_NAME": "Assignee Name",
|
"ASSIGNEE_NAME": "Ansvarlig Navn",
|
||||||
"INBOX_NAME": "Indbakke Navn",
|
"INBOX_NAME": "Indbakke Navn",
|
||||||
"TEAM_NAME": "Team Name",
|
"TEAM_NAME": "Hold Navn",
|
||||||
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
|
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
|
||||||
"CAMPAIGN_NAME": "Campaign Name",
|
"CAMPAIGN_NAME": "Kampagne Navn",
|
||||||
"LABELS": "Etiketter",
|
"LABELS": "Etiketter",
|
||||||
"BROWSER_LANGUAGE": "Browser Language",
|
"BROWSER_LANGUAGE": "Browser Sprog",
|
||||||
"COUNTRY_NAME": "Country Name",
|
"COUNTRY_NAME": "Land Navn",
|
||||||
"REFERER_LINK": "Referer link",
|
"REFERER_LINK": "Refererer link",
|
||||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
"CUSTOM_ATTRIBUTE_TEXT": "Tekst",
|
||||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
"CUSTOM_ATTRIBUTE_NUMBER": "Nummer",
|
||||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
"CUSTOM_ATTRIBUTE_CHECKBOX": "Afkrydsningsfelt",
|
||||||
"CREATED_AT": "Created At",
|
"CREATED_AT": "Oprettet Den",
|
||||||
"LAST_ACTIVITY": "Last Activity"
|
"LAST_ACTIVITY": "Sidste Aktivitet"
|
||||||
},
|
},
|
||||||
"GROUPS": {
|
"GROUPS": {
|
||||||
"STANDARD_FILTERS": "Standard Filters",
|
"STANDARD_FILTERS": "Standard Filtre",
|
||||||
"ADDITIONAL_FILTERS": "Additional Filters",
|
"ADDITIONAL_FILTERS": "Yderligere Filtre",
|
||||||
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber"
|
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber"
|
||||||
},
|
},
|
||||||
"CUSTOM_VIEWS": {
|
"CUSTOM_VIEWS": {
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Do you want to save this filter?",
|
"TITLE": "Vil du gemme dette filter?",
|
||||||
"LABEL": "Name this filter",
|
"LABEL": "Navngiv dette filter",
|
||||||
"PLACEHOLDER": "Enter a name for this filter",
|
"PLACEHOLDER": "Angiv et navn for dette filter",
|
||||||
"ERROR_MESSAGE": "Name is required",
|
"ERROR_MESSAGE": "Navn er påkrævet",
|
||||||
"SAVE_BUTTON": "Save filter",
|
"SAVE_BUTTON": "Gem filter",
|
||||||
"CANCEL_BUTTON": "Annuller",
|
"CANCEL_BUTTON": "Annuller",
|
||||||
"API_FOLDERS": {
|
"API_FOLDERS": {
|
||||||
"SUCCESS_MESSAGE": "Folder created successfully",
|
"SUCCESS_MESSAGE": "Mappe oprettet",
|
||||||
"ERROR_MESSAGE": "Error while creating folder"
|
"ERROR_MESSAGE": "Fejl under oprettelse af mappe"
|
||||||
},
|
},
|
||||||
"API_SEGMENTS": {
|
"API_SEGMENTS": {
|
||||||
"SUCCESS_MESSAGE": "Segment created successfully",
|
"SUCCESS_MESSAGE": "Segmentet er oprettet",
|
||||||
"ERROR_MESSAGE": "Error while creating segment"
|
"ERROR_MESSAGE": "Fejl under oprettelse af segment"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"DELETE_BUTTON": "Delete filter",
|
"DELETE_BUTTON": "Slet filter",
|
||||||
"MODAL": {
|
"MODAL": {
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
"TITLE": "Bekræft Sletning",
|
"TITLE": "Bekræft Sletning",
|
||||||
"MESSAGE": "Are you sure to delete the filter ",
|
"MESSAGE": "Er du sikker på du vil slette filteret ",
|
||||||
"YES": "Ja, Slet",
|
"YES": "Ja, Slet",
|
||||||
"NO": "Nej, behold det"
|
"NO": "Nej, behold det"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"API_FOLDERS": {
|
"API_FOLDERS": {
|
||||||
"SUCCESS_MESSAGE": "Folder deleted successfully",
|
"SUCCESS_MESSAGE": "Mappen blev slettet",
|
||||||
"ERROR_MESSAGE": "Error while deleting folder"
|
"ERROR_MESSAGE": "Fejl under sletning af mappe"
|
||||||
},
|
},
|
||||||
"API_SEGMENTS": {
|
"API_SEGMENTS": {
|
||||||
"SUCCESS_MESSAGE": "Segment deleted successfully",
|
"SUCCESS_MESSAGE": "Segmentet blev slettet",
|
||||||
"ERROR_MESSAGE": "Error while deleting segment"
|
"ERROR_MESSAGE": "Fejl under sletning af segment"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -93,19 +93,19 @@
|
|||||||
"NO_RESULTS": "Ingen resultater fundet."
|
"NO_RESULTS": "Ingen resultater fundet."
|
||||||
},
|
},
|
||||||
"MULTI_SELECTOR": {
|
"MULTI_SELECTOR": {
|
||||||
"PLACEHOLDER": "None",
|
"PLACEHOLDER": "Ingen",
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"AGENT": "Select agent",
|
"AGENT": "Vælg agent",
|
||||||
"TEAM": "Select team"
|
"TEAM": "Vælg hold"
|
||||||
},
|
},
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"NO_RESULTS": {
|
"NO_RESULTS": {
|
||||||
"AGENT": "Ingen agenter fundet",
|
"AGENT": "Ingen agenter fundet",
|
||||||
"TEAM": "No teams found"
|
"TEAM": "Ingen hold fundet"
|
||||||
},
|
},
|
||||||
"PLACEHOLDER": {
|
"PLACEHOLDER": {
|
||||||
"AGENT": "Search agents",
|
"AGENT": "Søg agenter",
|
||||||
"TEAM": "Search teams"
|
"TEAM": "Søg i teams"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,98 +1,98 @@
|
|||||||
{
|
{
|
||||||
"ATTRIBUTES_MGMT": {
|
"ATTRIBUTES_MGMT": {
|
||||||
"HEADER": "Brugerdefinerede Egenskaber",
|
"HEADER": "Brugerdefinerede Egenskaber",
|
||||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
"HEADER_BTN_TXT": "Tilføj Tilpasset Attribut",
|
||||||
"LOADING": "Fetching custom attributes",
|
"LOADING": "Henter brugerdefinerede attributter",
|
||||||
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
|
"SIDEBAR_TXT": "<p><b>Brugerdefinerede attributter</b> <p>En brugerdefineret attribut sporer fakta om dine kontakter/samtale — såsom abonnementet, eller når de bestilte det første element osv. <br /><br />For at oprette en brugerdefineret attribut, klik blot på<b>Tilføj brugerdefineret attribut.</b> Du kan også redigere eller slette en eksisterende brugerdefineret attribut ved at klikke på Rediger eller Slet knappen.</p>",
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Add Custom Attribute",
|
"TITLE": "Tilføj Tilpasset Attribut",
|
||||||
"SUBMIT": "Opret",
|
"SUBMIT": "Opret",
|
||||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Display Name",
|
"LABEL": "Vis Navn",
|
||||||
"PLACEHOLDER": "Enter custom attribute display name",
|
"PLACEHOLDER": "Angiv brugerdefineret attribut visningsnavn",
|
||||||
"ERROR": "Name is required"
|
"ERROR": "Navn er påkrævet"
|
||||||
},
|
},
|
||||||
"DESC": {
|
"DESC": {
|
||||||
"LABEL": "Beskrivelse",
|
"LABEL": "Beskrivelse",
|
||||||
"PLACEHOLDER": "Enter custom attribute description",
|
"PLACEHOLDER": "Angiv brugerdefineret attribut beskrivelse",
|
||||||
"ERROR": "Description is required"
|
"ERROR": "Beskrivelse er påkrævet"
|
||||||
},
|
},
|
||||||
"MODEL": {
|
"MODEL": {
|
||||||
"LABEL": "Applies to",
|
"LABEL": "Gælder for",
|
||||||
"PLACEHOLDER": "Please select one",
|
"PLACEHOLDER": "Vælg venligst en",
|
||||||
"ERROR": "Model is required"
|
"ERROR": "Model er påkrævet"
|
||||||
},
|
},
|
||||||
"TYPE": {
|
"TYPE": {
|
||||||
"LABEL": "Type",
|
"LABEL": "Type",
|
||||||
"PLACEHOLDER": "Please select a type",
|
"PLACEHOLDER": "Vælg venligst en type",
|
||||||
"ERROR": "Type is required",
|
"ERROR": "Type er påkrævet",
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LABEL": "List Values",
|
"LABEL": "Liste Værdier",
|
||||||
"PLACEHOLDER": "Please enter value and press enter key",
|
"PLACEHOLDER": "Indtast venligst værdi og tryk på enter tasten",
|
||||||
"ERROR": "Must have at least one value"
|
"ERROR": "Skal have mindst én værdi"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"KEY": {
|
"KEY": {
|
||||||
"LABEL": "Key",
|
"LABEL": "Nøgle",
|
||||||
"PLACEHOLDER": "Enter custom attribute key",
|
"PLACEHOLDER": "Angiv brugerdefineret attributnøgle",
|
||||||
"ERROR": "Key is required",
|
"ERROR": "Nøgle er påkrævet",
|
||||||
"IN_VALID": "Invalid key"
|
"IN_VALID": "Ugyldig nøgle"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
"SUCCESS_MESSAGE": "Brugerdefineret attribut blev tilføjet",
|
||||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
"ERROR_MESSAGE": "Kunne ikke oprette en brugerdefineret attribut. Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"BUTTON_TEXT": "Slet",
|
"BUTTON_TEXT": "Slet",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
"SUCCESS_MESSAGE": "Brugerdefineret attribut slettet.",
|
||||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
"ERROR_MESSAGE": "Kunne ikke slette den brugerdefinerede attribut. Prøv igen."
|
||||||
},
|
},
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
"TITLE": "Are you sure want to delete - %{attributeName}",
|
"TITLE": "Er du sikker på du vil slette - %{attributeName}",
|
||||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
"PLACE_HOLDER": "Skriv venligst {attributeName} for at bekræfte",
|
||||||
"MESSAGE": "Deleting will remove the custom attribute",
|
"MESSAGE": "Sletning vil fjerne den brugerdefinerede attribut",
|
||||||
"YES": "Slet ",
|
"YES": "Slet ",
|
||||||
"NO": "Annuller"
|
"NO": "Annuller"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"TITLE": "Edit Custom Attribute",
|
"TITLE": "Rediger Brugerdefineret Attribut",
|
||||||
"UPDATE_BUTTON_TEXT": "Opdater",
|
"UPDATE_BUTTON_TEXT": "Opdater",
|
||||||
"TYPE": {
|
"TYPE": {
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LABEL": "List Values",
|
"LABEL": "Liste Værdier",
|
||||||
"PLACEHOLDER": "Please enter values and press enter key"
|
"PLACEHOLDER": "Indtast værdier og tryk på enter tasten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
"SUCCESS_MESSAGE": "Brugerdefineret attribut opdateret",
|
||||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
"ERROR_MESSAGE": "Der opstod en fejl under opdatering af brugerdefineret attribut. Prøv igen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABS": {
|
"TABS": {
|
||||||
"HEADER": "Brugerdefinerede Egenskaber",
|
"HEADER": "Brugerdefinerede Egenskaber",
|
||||||
"CONVERSATION": "Conversation",
|
"CONVERSATION": "Samtale",
|
||||||
"CONTACT": "Contact"
|
"CONTACT": "Kontakt"
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"TABLE_HEADER": [
|
"TABLE_HEADER": [
|
||||||
"Navn",
|
"Navn",
|
||||||
"Beskrivelse",
|
"Beskrivelse",
|
||||||
"Type",
|
"Type",
|
||||||
"Key"
|
"Nøgle"
|
||||||
],
|
],
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"EDIT": "Rediger",
|
"EDIT": "Rediger",
|
||||||
"DELETE": "Slet"
|
"DELETE": "Slet"
|
||||||
},
|
},
|
||||||
"EMPTY_RESULT": {
|
"EMPTY_RESULT": {
|
||||||
"404": "There are no custom attributes created",
|
"404": "Der er ingen brugerdefinerede attributter oprettet",
|
||||||
"NOT_FOUND": "There are no custom attributes configured"
|
"NOT_FOUND": "Der er ingen brugerdefinerede attributter konfigureret"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,54 +1,54 @@
|
|||||||
{
|
{
|
||||||
"AUTOMATION": {
|
"AUTOMATION": {
|
||||||
"HEADER": "Automations",
|
"HEADER": "Automatiseringer",
|
||||||
"HEADER_BTN_TXT": "Add Automation Rule",
|
"HEADER_BTN_TXT": "Tilføj Automatiseringsregel",
|
||||||
"LOADING": "Fetching automation rules",
|
"LOADING": "Henter automatiseringsregler",
|
||||||
"SIDEBAR_TXT": "<p><b>Automation Rules</b> <p>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.</p>",
|
"SIDEBAR_TXT": "<p><b>Automatiseringsregler</b> <p>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.</p>",
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Add Automation Rule",
|
"TITLE": "Tilføj Automatiseringsregel",
|
||||||
"SUBMIT": "Opret",
|
"SUBMIT": "Opret",
|
||||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Rule Name",
|
"LABEL": "Regel Navn",
|
||||||
"PLACEHOLDER": "Enter rule name",
|
"PLACEHOLDER": "Indtast regelnavn",
|
||||||
"ERROR": "Name is required"
|
"ERROR": "Navn er påkrævet"
|
||||||
},
|
},
|
||||||
"DESC": {
|
"DESC": {
|
||||||
"LABEL": "Beskrivelse",
|
"LABEL": "Beskrivelse",
|
||||||
"PLACEHOLDER": "Enter rule description",
|
"PLACEHOLDER": "Indtast regel beskrivelse",
|
||||||
"ERROR": "Description is required"
|
"ERROR": "Beskrivelse er påkrævet"
|
||||||
},
|
},
|
||||||
"EVENT": {
|
"EVENT": {
|
||||||
"LABEL": "Event",
|
"LABEL": "Begivenhed",
|
||||||
"PLACEHOLDER": "Please select one",
|
"PLACEHOLDER": "Vælg venligst en",
|
||||||
"ERROR": "Event is required"
|
"ERROR": "Begivenhed er påkrævet"
|
||||||
},
|
},
|
||||||
"CONDITIONS": {
|
"CONDITIONS": {
|
||||||
"LABEL": "Conditions"
|
"LABEL": "Betingelser"
|
||||||
},
|
},
|
||||||
"ACTIONS": {
|
"ACTIONS": {
|
||||||
"LABEL": "Handlinger"
|
"LABEL": "Handlinger"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONDITION_BUTTON_LABEL": "Add Condition",
|
"CONDITION_BUTTON_LABEL": "Tilføj Betingelse",
|
||||||
"ACTION_BUTTON_LABEL": "Add Action",
|
"ACTION_BUTTON_LABEL": "Tilføj Handling",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Automation rule added successfully",
|
"SUCCESS_MESSAGE": "Automatiseringsregel tilføjet med succes",
|
||||||
"ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later"
|
"ERROR_MESSAGE": "Kunne ikke oprette en automatiseringsregel. Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"TABLE_HEADER": [
|
"TABLE_HEADER": [
|
||||||
"Navn",
|
"Navn",
|
||||||
"Beskrivelse",
|
"Beskrivelse",
|
||||||
"Active",
|
"Aktiv",
|
||||||
"Created on"
|
"Oprettet den"
|
||||||
],
|
],
|
||||||
"404": "No automation rules found"
|
"404": "Ingen automatiseringsregler fundet"
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"TITLE": "Delete Automation Rule",
|
"TITLE": "Slet Automatiseringsregel",
|
||||||
"SUBMIT": "Slet",
|
"SUBMIT": "Slet",
|
||||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
@ -58,24 +58,24 @@
|
|||||||
"NO": "Nej, Behold "
|
"NO": "Nej, Behold "
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Automation rule deleted successfully",
|
"SUCCESS_MESSAGE": "Automatiseringsregel slettet",
|
||||||
"ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later"
|
"ERROR_MESSAGE": "Kunne ikke slette en automatiseringsregel, prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"TITLE": "Edit Automation Rule",
|
"TITLE": "Rediger Automatiseringsregel",
|
||||||
"SUBMIT": "Opdater",
|
"SUBMIT": "Opdater",
|
||||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Automation rule updated successfully",
|
"SUCCESS_MESSAGE": "Automatiseringsregel opdateret",
|
||||||
"ERROR_MESSAGE": "Could not update automation rule, Please try again later"
|
"ERROR_MESSAGE": "Kunne ikke opdatere automatiseringsreglen. Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CLONE": {
|
"CLONE": {
|
||||||
"TOOLTIP": "Clone",
|
"TOOLTIP": "Klon",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Automation cloned successfully",
|
"SUCCESS_MESSAGE": "Automatisering klonet med succes",
|
||||||
"ERROR_MESSAGE": "Could not clone automation rule, Please try again later"
|
"ERROR_MESSAGE": "Kunne ikke klone automatiseringsreglen. Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
@ -83,34 +83,34 @@
|
|||||||
"CREATE": "Opret",
|
"CREATE": "Opret",
|
||||||
"DELETE": "Slet",
|
"DELETE": "Slet",
|
||||||
"CANCEL": "Annuller",
|
"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": {
|
"CONDITION": {
|
||||||
"DELETE_MESSAGE": "You need to have atleast one condition to save"
|
"DELETE_MESSAGE": "Du skal have mindst én betingelse for at gemme"
|
||||||
},
|
},
|
||||||
"ACTION": {
|
"ACTION": {
|
||||||
"DELETE_MESSAGE": "You need to have atleast one action to save",
|
"DELETE_MESSAGE": "Du skal have mindst én handling for at gemme",
|
||||||
"TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here",
|
"TEAM_MESSAGE_INPUT_PLACEHOLDER": "Indtast din besked her",
|
||||||
"TEAM_DROPDOWN_PLACEHOLDER": "Select teams"
|
"TEAM_DROPDOWN_PLACEHOLDER": "Vælg teams"
|
||||||
},
|
},
|
||||||
"TOGGLE": {
|
"TOGGLE": {
|
||||||
"ACTIVATION_TITLE": "Activate Automation Rule",
|
"ACTIVATION_TITLE": "Aktivér Automatiseringsregel",
|
||||||
"DEACTIVATION_TITLE": "Deactivate Automation Rule",
|
"DEACTIVATION_TITLE": "Deaktiver Automatiseringsregel",
|
||||||
"ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?",
|
"ACTIVATION_DESCRIPTION": "Denne handling vil aktivere automatiseringsreglen '{automationName}'. Er du sikker på du vil fortsætte?",
|
||||||
"DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?",
|
"DEACTIVATION_DESCRIPTION": "Denne handling vil deaktivere automatiseringsreglen '{automationName}'. Er du sikker på du vil fortsætte?",
|
||||||
"ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully",
|
"ACTIVATION_SUCCESFUL": "Automatiseringsregel Aktiveret",
|
||||||
"DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully",
|
"DEACTIVATION_SUCCESFUL": "Automatiseringsregel Deaktiveret",
|
||||||
"ACTIVATION_ERROR": "Could not Activate Automation, Please try again later",
|
"ACTIVATION_ERROR": "Kunne ikke aktivere automatisering, prøv igen senere",
|
||||||
"DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later",
|
"DEACTIVATION_ERROR": "Kunne ikke deaktivere automatisering, prøv igen senere",
|
||||||
"CONFIRMATION_LABEL": "Yes",
|
"CONFIRMATION_LABEL": "Ja",
|
||||||
"CANCEL_LABEL": "No"
|
"CANCEL_LABEL": "Nej"
|
||||||
},
|
},
|
||||||
"ATTACHMENT": {
|
"ATTACHMENT": {
|
||||||
"UPLOAD_ERROR": "Could not upload attachment, Please try again",
|
"UPLOAD_ERROR": "Kunne ikke uploade vedhæftning, Prøv venligst igen",
|
||||||
"LABEL_IDLE": "Upload Attachment",
|
"LABEL_IDLE": "Upload Vedhæftning",
|
||||||
"LABEL_UPLOADING": "Uploader...",
|
"LABEL_UPLOADING": "Uploader...",
|
||||||
"LABEL_UPLOADED": "Succesfully Uploaded",
|
"LABEL_UPLOADED": "Succesfuldt Uploadet",
|
||||||
"LABEL_UPLOAD_FAILED": "Upload Failed"
|
"LABEL_UPLOAD_FAILED": "Upload Mislykkedes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,29 @@
|
|||||||
{
|
{
|
||||||
"BULK_ACTION": {
|
"BULK_ACTION": {
|
||||||
"CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected",
|
"CONVERSATIONS_SELECTED": "%{conversationCount} samtaler valgt",
|
||||||
"AGENT_SELECT_LABEL": "Select Agent",
|
"AGENT_SELECT_LABEL": "Vælg Agent",
|
||||||
"ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to",
|
"ASSIGN_CONFIRMATION_LABEL": "Er du sikker på, at du vil tildele %{conversationCount} %{conversationLabel} til",
|
||||||
"GO_BACK_LABEL": "Go back",
|
"GO_BACK_LABEL": "Gå tilbage",
|
||||||
"ASSIGN_LABEL": "Assign",
|
"ASSIGN_LABEL": "Tildel",
|
||||||
"ASSIGN_AGENT_TOOLTIP": "Assign Agent",
|
"ASSIGN_AGENT_TOOLTIP": "Tildel Agent",
|
||||||
"ASSIGN_SUCCESFUL": "Conversations assigned successfully",
|
"ASSIGN_SUCCESFUL": "Samtaler tildelt",
|
||||||
"ASSIGN_FAILED": "Failed to assign conversations, please try again",
|
"ASSIGN_FAILED": "Mislykkedes at tildele samtaler, prøv igen",
|
||||||
"RESOLVE_SUCCESFUL": "Conversations resolved successfully",
|
"RESOLVE_SUCCESFUL": "Samtaler løst med succes",
|
||||||
"RESOLVE_FAILED": "Failed to resolve conversations, please try again",
|
"RESOLVE_FAILED": "Mislykkedes at løse samtaler, prøv igen",
|
||||||
"ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.",
|
"ALL_CONVERSATIONS_SELECTED_ALERT": "Samtaler synlig på denne side er kun valgt.",
|
||||||
"AGENT_LIST_LOADING": "Loading Agents",
|
"AGENT_LIST_LOADING": "Indlæser Agenter",
|
||||||
"UPDATE": {
|
"UPDATE": {
|
||||||
"CHANGE_STATUS": "Change status",
|
"CHANGE_STATUS": "Skift status",
|
||||||
"SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply",
|
"SNOOZE_UNTIL_NEXT_REPLY": "Udsæt til næste svar",
|
||||||
"UPDATE_SUCCESFUL": "Conversation status updated successfully.",
|
"UPDATE_SUCCESFUL": "Samtalens status blev opdateret.",
|
||||||
"UPDATE_FAILED": "Failed to update conversations, please try again"
|
"UPDATE_FAILED": "Mislykkedes at opdatere samtaler, prøv igen"
|
||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"ASSIGN_LABELS": "Assign Labels",
|
"ASSIGN_LABELS": "Tildel Etiketter",
|
||||||
"NO_LABELS_FOUND": "No labels found for",
|
"NO_LABELS_FOUND": "Ingen etiketter fundet for",
|
||||||
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
|
"ASSIGN_SELECTED_LABELS": "Tildel valgte etiketter",
|
||||||
"ASSIGN_SUCCESFUL": "Labels assigned successfully",
|
"ASSIGN_SUCCESFUL": "Etiketter tildelt med succes",
|
||||||
"ASSIGN_FAILED": "Failed to assign labels, please try again"
|
"ASSIGN_FAILED": "Kunne ikke tildele etiketter. Prøv igen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,65 +1,65 @@
|
|||||||
{
|
{
|
||||||
"CAMPAIGN": {
|
"CAMPAIGN": {
|
||||||
"HEADER": "Campaigns",
|
"HEADER": "Kampagner",
|
||||||
"SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on <b>Add Campaign</b> to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
|
"SIDEBAR_TXT": "Proaktive beskeder giver kunden mulighed for at sende udgående beskeder til deres kontakter, hvilket ville udløse flere samtaler. Klik på <b>Tilføj kampagne</b> 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": {
|
"HEADER_BTN_TXT": {
|
||||||
"ONE_OFF": "Create a one off campaign",
|
"ONE_OFF": "Opret en kampagne fra",
|
||||||
"ONGOING": "Create a ongoing campaign"
|
"ONGOING": "Opret en igangværende kampagne"
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Create a campaign",
|
"TITLE": "Opret en kampagne",
|
||||||
"DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
|
"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",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"CREATE_BUTTON_TEXT": "Opret",
|
"CREATE_BUTTON_TEXT": "Opret",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"LABEL": "Title",
|
"LABEL": "Titel",
|
||||||
"PLACEHOLDER": "Please enter the title of campaign",
|
"PLACEHOLDER": "Indtast titlen på kampagnen",
|
||||||
"ERROR": "Title is required"
|
"ERROR": "Titel er påkrævet"
|
||||||
},
|
},
|
||||||
"SCHEDULED_AT": {
|
"SCHEDULED_AT": {
|
||||||
"LABEL": "Scheduled time",
|
"LABEL": "Planlagt tid",
|
||||||
"PLACEHOLDER": "Please select the time",
|
"PLACEHOLDER": "Vælg venligst tid",
|
||||||
"CONFIRM": "Confirm",
|
"CONFIRM": "Bekræft",
|
||||||
"ERROR": "Scheduled time is required"
|
"ERROR": "Planlagt tid er påkrævet"
|
||||||
},
|
},
|
||||||
"AUDIENCE": {
|
"AUDIENCE": {
|
||||||
"LABEL": "Audience",
|
"LABEL": "Målgruppe",
|
||||||
"PLACEHOLDER": "Select the customer labels",
|
"PLACEHOLDER": "Vælg kunde etiketter",
|
||||||
"ERROR": "Audience is required"
|
"ERROR": "Målgruppe er påkrævet"
|
||||||
},
|
},
|
||||||
"INBOX": {
|
"INBOX": {
|
||||||
"LABEL": "Select Inbox",
|
"LABEL": "Vælg Indbakke",
|
||||||
"PLACEHOLDER": "Select Inbox",
|
"PLACEHOLDER": "Vælg Indbakke",
|
||||||
"ERROR": "Inbox is required"
|
"ERROR": "Indbakke er påkrævet"
|
||||||
},
|
},
|
||||||
"MESSAGE": {
|
"MESSAGE": {
|
||||||
"LABEL": "Besked",
|
"LABEL": "Besked",
|
||||||
"PLACEHOLDER": "Please enter the message of campaign",
|
"PLACEHOLDER": "Indtast venligst meddelelsen af kampagnen",
|
||||||
"ERROR": "Message is required"
|
"ERROR": "Beskeden er påkrævet"
|
||||||
},
|
},
|
||||||
"SENT_BY": {
|
"SENT_BY": {
|
||||||
"LABEL": "Sent by",
|
"LABEL": "Sendt af",
|
||||||
"PLACEHOLDER": "Please select the the content of campaign",
|
"PLACEHOLDER": "Vælg venligst indholdet af kampagnen",
|
||||||
"ERROR": "Sender is required"
|
"ERROR": "Afsenderen er påkrævet"
|
||||||
},
|
},
|
||||||
"END_POINT": {
|
"END_POINT": {
|
||||||
"LABEL": "URL",
|
"LABEL": "URL",
|
||||||
"PLACEHOLDER": "Please enter the URL",
|
"PLACEHOLDER": "Indtast venligst URL",
|
||||||
"ERROR": "Angiv en gyldig URL"
|
"ERROR": "Angiv en gyldig URL"
|
||||||
},
|
},
|
||||||
"TIME_ON_PAGE": {
|
"TIME_ON_PAGE": {
|
||||||
"LABEL": "Time on page(Seconds)",
|
"LABEL": "Tid på side (sekunder)",
|
||||||
"PLACEHOLDER": "Please enter the time",
|
"PLACEHOLDER": "Indtast venligst tid",
|
||||||
"ERROR": "Time on page is required"
|
"ERROR": "Tid på siden er påkrævet"
|
||||||
},
|
},
|
||||||
"ENABLED": "Enable campaign",
|
"ENABLED": "Aktiver kampagne",
|
||||||
"TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours",
|
"TRIGGER_ONLY_BUSINESS_HOURS": "Udløs kun i åbningstiden",
|
||||||
"SUBMIT": "Add Campaign"
|
"SUBMIT": "Tilføj Kampagne"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Campaign created successfully",
|
"SUCCESS_MESSAGE": "Kampagne oprettet",
|
||||||
"ERROR_MESSAGE": "There was an error. Please try again."
|
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
@ -71,56 +71,56 @@
|
|||||||
"NO": "Nej, Behold "
|
"NO": "Nej, Behold "
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Campaign deleted successfully",
|
"SUCCESS_MESSAGE": "Kampagne slettet",
|
||||||
"ERROR_MESSAGE": "Could not delete the campaign. Please try again later."
|
"ERROR_MESSAGE": "Kunne ikke slette kampagnen. Prøv igen senere."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"TITLE": "Edit campaign",
|
"TITLE": "Rediger kampagne",
|
||||||
"UPDATE_BUTTON_TEXT": "Opdater",
|
"UPDATE_BUTTON_TEXT": "Opdater",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Campaign updated successfully",
|
"SUCCESS_MESSAGE": "Kampagne opdateret",
|
||||||
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LOADING_MESSAGE": "Loading campaigns...",
|
"LOADING_MESSAGE": "Indlæser kampagner...",
|
||||||
"404": "There are no campaigns created for this inbox.",
|
"404": "Der er ingen kampagner oprettet for denne indbakke.",
|
||||||
"TABLE_HEADER": {
|
"TABLE_HEADER": {
|
||||||
"TITLE": "Title",
|
"TITLE": "Titel",
|
||||||
"MESSAGE": "Besked",
|
"MESSAGE": "Besked",
|
||||||
"INBOX": "Inbox",
|
"INBOX": "Indbakke",
|
||||||
"STATUS": "Status",
|
"STATUS": "Status",
|
||||||
"SENDER": "Sender",
|
"SENDER": "Afsender",
|
||||||
"URL": "URL",
|
"URL": "URL",
|
||||||
"SCHEDULED_AT": "Scheduled time",
|
"SCHEDULED_AT": "Planlagt tid",
|
||||||
"TIME_ON_PAGE": "Time(Seconds)",
|
"TIME_ON_PAGE": "Tid(sekunder)",
|
||||||
"CREATED_AT": "Created at"
|
"CREATED_AT": "Oprettet den"
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"ADD": "Add",
|
"ADD": "Tilføj",
|
||||||
"EDIT": "Rediger",
|
"EDIT": "Rediger",
|
||||||
"DELETE": "Slet"
|
"DELETE": "Slet"
|
||||||
},
|
},
|
||||||
"STATUS": {
|
"STATUS": {
|
||||||
"ENABLED": "Aktiveret",
|
"ENABLED": "Aktiveret",
|
||||||
"DISABLED": "Deaktiveret",
|
"DISABLED": "Deaktiveret",
|
||||||
"COMPLETED": "Completed",
|
"COMPLETED": "Afsluttet",
|
||||||
"ACTIVE": "Active"
|
"ACTIVE": "Aktiv"
|
||||||
},
|
},
|
||||||
"SENDER": {
|
"SENDER": {
|
||||||
"BOT": "Bot"
|
"BOT": "Bot"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ONE_OFF": {
|
"ONE_OFF": {
|
||||||
"HEADER": "One off campaigns",
|
"HEADER": "Kampagner",
|
||||||
"404": "There are no one off campaigns created",
|
"404": "Der er ingen slukkede kampagner oprettet",
|
||||||
"INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns"
|
"INBOXES_NOT_FOUND": "Opret venligst en sms-indbakke og begynd at tilføje kampagner"
|
||||||
},
|
},
|
||||||
"ONGOING": {
|
"ONGOING": {
|
||||||
"HEADER": "Ongoing campaigns",
|
"HEADER": "Igangværende kampagner",
|
||||||
"404": "There are no ongoing campaigns created",
|
"404": "Der er ingen igangværende kampagner oprettet",
|
||||||
"INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns"
|
"INBOXES_NOT_FOUND": "Opret venligst en hjemmeside indbakke og begynd at tilføje kampagner"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
"HEADER_BTN_TXT": "Tilføj Standardsvar",
|
"HEADER_BTN_TXT": "Tilføj Standardsvar",
|
||||||
"LOADING": "Henter Standardsvar",
|
"LOADING": "Henter Standardsvar",
|
||||||
"SEARCH_404": "Der er ingen elementer, der matcher denne forespørgsel",
|
"SEARCH_404": "Der er ingen elementer, der matcher denne forespørgsel",
|
||||||
"SIDEBAR_TXT": "<p><b>Canned Responses</b> </p><p> Canned Responses are saved reply templates which can be used to quickly send out a reply to a conversation. </p><p> For creating a Canned Response, just click on the <b>Add Canned Response</b>. You can also edit or delete an existing Canned Response by clicking on the Edit or Delete button </p><p> Canned responses are used with the help of <b>Short Codes</b>. Agents can access canned responses while on a chat by typing <b>'/'</b> followed by the short code. </p>",
|
"SIDEBAR_TXT": "<p><b>Standardsvar</b> </p><p> Standardsvar er gemte svarskabeloner, som kan bruges til hurtigt at sende et svar på en samtale. </p><p> For at oprette et standardsvar, klik blot på <b>Tilføj standardsvar</b>. Du kan også redigere eller slette et eksisterende standardsvar ved at klikke på Rediger eller Slet knappen </p><p> Standardsvar bruges ved hjælp af <b>Short Codes</b>. Agenter kan tilgå standardsvar på en chat ved at skrive <b>'/'</b> efterfulgt af din short code </p>",
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"404": "Der er ingen tilgængelige standardsvar på denne konto.",
|
"404": "Der er ingen tilgængelige standardsvar på denne konto.",
|
||||||
"TITLE": "Administrer standardsvar",
|
"TITLE": "Administrer standardsvar",
|
||||||
@ -17,12 +17,12 @@
|
|||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Tilføj Standardsvar",
|
"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",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"SHORT_CODE": {
|
"SHORT_CODE": {
|
||||||
"LABEL": "Short Code",
|
"LABEL": "Short Code",
|
||||||
"PLACEHOLDER": "Please enter a short code",
|
"PLACEHOLDER": "Indtast venligst en shortcode",
|
||||||
"ERROR": "Short Code er påkrævet"
|
"ERROR": "Short Code er påkrævet"
|
||||||
},
|
},
|
||||||
"CONTENT": {
|
"CONTENT": {
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
"404": "Der er ingen aktive samtaler i denne gruppe."
|
"404": "Der er ingen aktive samtaler i denne gruppe."
|
||||||
},
|
},
|
||||||
"TAB_HEADING": "Samtaler",
|
"TAB_HEADING": "Samtaler",
|
||||||
"MENTION_HEADING": "Mentions",
|
"MENTION_HEADING": "Omtaler",
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"INPUT": "Søg efter Mennesker, Chats, Gemte svar .."
|
"INPUT": "Søg efter Mennesker, Chats, Gemte svar .."
|
||||||
},
|
},
|
||||||
@ -25,10 +25,10 @@
|
|||||||
"TEXT": "Løst"
|
"TEXT": "Løst"
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
"TEXT": "Pending"
|
"TEXT": "Afventer"
|
||||||
},
|
},
|
||||||
"snoozed": {
|
"snoozed": {
|
||||||
"TEXT": "Snoozed"
|
"TEXT": "Udsat"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ATTACHMENTS": {
|
"ATTACHMENTS": {
|
||||||
@ -54,12 +54,12 @@
|
|||||||
"RECEIVED_VIA_EMAIL": "Modtaget via e-mail",
|
"RECEIVED_VIA_EMAIL": "Modtaget via e-mail",
|
||||||
"VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter",
|
"VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter",
|
||||||
"REPLY_TO_TWEET": "Svar på dette tweet",
|
"REPLY_TO_TWEET": "Svar på dette tweet",
|
||||||
"LINK_TO_STORY": "Go to instagram story",
|
"LINK_TO_STORY": "Gå til instagram historie",
|
||||||
"SENT": "Sent successfully",
|
"SENT": "Sendt med succes",
|
||||||
"NO_MESSAGES": "No Messages",
|
"NO_MESSAGES": "Ingen Beskeder",
|
||||||
"NO_CONTENT": "No content available",
|
"NO_CONTENT": "Intet tilgængeligt indhold",
|
||||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
"HIDE_QUOTED_TEXT": "Skjul Citeret Tekst",
|
||||||
"SHOW_QUOTED_TEXT": "Show Quoted Text",
|
"SHOW_QUOTED_TEXT": "Vis Citeret Tekst",
|
||||||
"MESSAGE_READ": "Read"
|
"MESSAGE_READ": "Læst"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,39 +3,40 @@
|
|||||||
"NOT_AVAILABLE": "Ikke Tilgængelig",
|
"NOT_AVAILABLE": "Ikke Tilgængelig",
|
||||||
"EMAIL_ADDRESS": "E-Mail Adresse",
|
"EMAIL_ADDRESS": "E-Mail Adresse",
|
||||||
"PHONE_NUMBER": "Telefonnummer",
|
"PHONE_NUMBER": "Telefonnummer",
|
||||||
|
"IDENTIFIER": "Identifier",
|
||||||
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
|
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
|
||||||
"COMPANY": "Virksomhed",
|
"COMPANY": "Virksomhed",
|
||||||
"LOCATION": "Lokation",
|
"LOCATION": "Lokation",
|
||||||
"BROWSER_LANGUAGE": "Browser Language",
|
"BROWSER_LANGUAGE": "Browser Sprog",
|
||||||
"CONVERSATION_TITLE": "Samtaledetaljer",
|
"CONVERSATION_TITLE": "Samtaledetaljer",
|
||||||
"VIEW_PROFILE": "View Profile",
|
"VIEW_PROFILE": "Vis Profil",
|
||||||
"BROWSER": "Browser",
|
"BROWSER": "Browser",
|
||||||
"OS": "Operativsystem",
|
"OS": "Operativsystem",
|
||||||
"INITIATED_FROM": "Startet fra",
|
"INITIATED_FROM": "Startet fra",
|
||||||
"INITIATED_AT": "Startet fra",
|
"INITIATED_AT": "Startet fra",
|
||||||
"IP_ADDRESS": "IP Address",
|
"IP_ADDRESS": "Ip Adresse",
|
||||||
"NEW_MESSAGE": "New message",
|
"NEW_MESSAGE": "Ny besked",
|
||||||
"CONVERSATIONS": {
|
"CONVERSATIONS": {
|
||||||
"NO_RECORDS_FOUND": "Der er ingen tidligere samtaler tilknyttet denne kontakt.",
|
"NO_RECORDS_FOUND": "Der er ingen tidligere samtaler tilknyttet denne kontakt.",
|
||||||
"TITLE": "Tidligere Samtaler"
|
"TITLE": "Tidligere Samtaler"
|
||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"CONTACT": {
|
"CONTACT": {
|
||||||
"TITLE": "Contact Labels",
|
"TITLE": "Kontakt Labels",
|
||||||
"ERROR": "Couldn't update labels"
|
"ERROR": "Kunne ikke opdatere etiketter"
|
||||||
},
|
},
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"TITLE": "Samtale Etiketter",
|
"TITLE": "Samtale Etiketter",
|
||||||
"ADD_BUTTON": "Add Labels"
|
"ADD_BUTTON": "Tilføj Labels"
|
||||||
},
|
},
|
||||||
"LABEL_SELECT": {
|
"LABEL_SELECT": {
|
||||||
"TITLE": "Add Labels",
|
"TITLE": "Tilføj Labels",
|
||||||
"PLACEHOLDER": "Search labels",
|
"PLACEHOLDER": "Søg efter labels",
|
||||||
"NO_RESULT": "No labels found"
|
"NO_RESULT": "Ingen labels fundet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MERGE_CONTACT": "Merge contact",
|
"MERGE_CONTACT": "Sammenflet kontakt",
|
||||||
"CONTACT_ACTIONS": "Contact actions",
|
"CONTACT_ACTIONS": "Kontakt handlinger",
|
||||||
"MUTE_CONTACT": "Gør Samtale Lydløs",
|
"MUTE_CONTACT": "Gør Samtale Lydløs",
|
||||||
"UNMUTE_CONTACT": "Fjern Lydløs",
|
"UNMUTE_CONTACT": "Fjern Lydløs",
|
||||||
"MUTED_SUCCESS": "Denne samtale er gjort tavs i 6 timer",
|
"MUTED_SUCCESS": "Denne samtale er gjort tavs i 6 timer",
|
||||||
@ -44,7 +45,7 @@
|
|||||||
"EDIT_LABEL": "Rediger",
|
"EDIT_LABEL": "Rediger",
|
||||||
"SIDEBAR_SECTIONS": {
|
"SIDEBAR_SECTIONS": {
|
||||||
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber",
|
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber",
|
||||||
"CONTACT_LABELS": "Contact Labels",
|
"CONTACT_LABELS": "Kontakt Labels",
|
||||||
"PREVIOUS_CONVERSATIONS": "Tidligere Samtaler"
|
"PREVIOUS_CONVERSATIONS": "Tidligere Samtaler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -54,35 +55,35 @@
|
|||||||
"DESC": "Rediger kontaktoplysninger"
|
"DESC": "Rediger kontaktoplysninger"
|
||||||
},
|
},
|
||||||
"CREATE_CONTACT": {
|
"CREATE_CONTACT": {
|
||||||
"BUTTON_LABEL": "New Contact",
|
"BUTTON_LABEL": "Ny Kontakt",
|
||||||
"TITLE": "Create new contact",
|
"TITLE": "Opret ny kontakt",
|
||||||
"DESC": "Add basic information details about the contact."
|
"DESC": "Tilføj grundlæggende oplysninger om kontakten."
|
||||||
},
|
},
|
||||||
"IMPORT_CONTACTS": {
|
"IMPORT_CONTACTS": {
|
||||||
"BUTTON_LABEL": "Import",
|
"BUTTON_LABEL": "Importér",
|
||||||
"TITLE": "Import Contacts",
|
"TITLE": "Importér Kontakter",
|
||||||
"DESC": "Import contacts through a CSV file.",
|
"DESC": "Importér kontakter via en CSV-fil.",
|
||||||
"DOWNLOAD_LABEL": "Download a sample csv.",
|
"DOWNLOAD_LABEL": "Download en prøve csv.",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"LABEL": "CSV File",
|
"LABEL": "CSV Fil",
|
||||||
"SUBMIT": "Import",
|
"SUBMIT": "Importer",
|
||||||
"CANCEL": "Annuller"
|
"CANCEL": "Annuller"
|
||||||
},
|
},
|
||||||
"SUCCESS_MESSAGE": "Contacts saved successfully",
|
"SUCCESS_MESSAGE": "Kontakter gemt",
|
||||||
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
||||||
},
|
},
|
||||||
"DELETE_NOTE": {
|
"DELETE_NOTE": {
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
"TITLE": "Bekræft Sletning",
|
"TITLE": "Bekræft Sletning",
|
||||||
"MESSAGE": "Are you want sure to delete this note?",
|
"MESSAGE": "Er du sikker på at slette denne note?",
|
||||||
"YES": "Yes, Delete it",
|
"YES": "Ja, Slet",
|
||||||
"NO": "Nej, behold det"
|
"NO": "Nej, behold det"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DELETE_CONTACT": {
|
"DELETE_CONTACT": {
|
||||||
"BUTTON_LABEL": "Delete Contact",
|
"BUTTON_LABEL": "Slet Kontakt",
|
||||||
"TITLE": "Delete contact",
|
"TITLE": "Slet kontakt",
|
||||||
"DESC": "Delete contact details",
|
"DESC": "Slet kontaktoplysninger",
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
"TITLE": "Bekræft Sletning",
|
"TITLE": "Bekræft Sletning",
|
||||||
"MESSAGE": "Er du sikker på du vil slette ",
|
"MESSAGE": "Er du sikker på du vil slette ",
|
||||||
@ -90,8 +91,8 @@
|
|||||||
"NO": "Nej, Behold"
|
"NO": "Nej, Behold"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Contact deleted successfully",
|
"SUCCESS_MESSAGE": "Kontakten blev slettet",
|
||||||
"ERROR_MESSAGE": "Could not delete contact. Please try again later."
|
"ERROR_MESSAGE": "Kunne ikke slette kontakten. Prøv igen senere."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACT_FORM": {
|
"CONTACT_FORM": {
|
||||||
@ -118,9 +119,9 @@
|
|||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
"PLACEHOLDER": "Indtast telefonnummeret på kontaktpersonen",
|
"PLACEHOLDER": "Indtast telefonnummeret på kontaktpersonen",
|
||||||
"LABEL": "Telefonnummer",
|
"LABEL": "Telefonnummer",
|
||||||
"HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
|
"HELP": "Telefonnummer skal være af E.164 format fx: +1415555555 [+] [landekode] [områdekode] [lokalt telefonnummer]",
|
||||||
"ERROR": "Phone number should be either empty or of E.164 format",
|
"ERROR": "Telefonnummer skal være enten tomt eller i E.164-format",
|
||||||
"DUPLICATE": "This phone number is in use for another contact."
|
"DUPLICATE": "Dette telefonnummer er i brug for en anden kontakt."
|
||||||
},
|
},
|
||||||
"LOCATION": {
|
"LOCATION": {
|
||||||
"PLACEHOLDER": "Angiv placeringen af kontaktpersonen",
|
"PLACEHOLDER": "Angiv placeringen af kontaktpersonen",
|
||||||
@ -151,30 +152,30 @@
|
|||||||
},
|
},
|
||||||
"DELETE_AVATAR": {
|
"DELETE_AVATAR": {
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Contact avatar deleted successfully",
|
"SUCCESS_MESSAGE": "Kontakt avatar slettet",
|
||||||
"ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later."
|
"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"
|
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
||||||
},
|
},
|
||||||
"NEW_CONVERSATION": {
|
"NEW_CONVERSATION": {
|
||||||
"BUTTON_LABEL": "Start conversation",
|
"BUTTON_LABEL": "Start samtale",
|
||||||
"TITLE": "New conversation",
|
"TITLE": "Ny samtale",
|
||||||
"DESC": "Start en samtale ved at sende en besked.",
|
"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": {
|
"FORM": {
|
||||||
"TO": {
|
"TO": {
|
||||||
"LABEL": "To"
|
"LABEL": "Til"
|
||||||
},
|
},
|
||||||
"INBOX": {
|
"INBOX": {
|
||||||
"LABEL": "Inbox",
|
"LABEL": "Indbakke",
|
||||||
"ERROR": "Select an inbox"
|
"ERROR": "Vælg en indbakke"
|
||||||
},
|
},
|
||||||
"SUBJECT": {
|
"SUBJECT": {
|
||||||
"LABEL": "Subject",
|
"LABEL": "Emne",
|
||||||
"PLACEHOLDER": "Subject",
|
"PLACEHOLDER": "Emne",
|
||||||
"ERROR": "Subject can't be empty"
|
"ERROR": "Emne må ikke være tomt"
|
||||||
},
|
},
|
||||||
"MESSAGE": {
|
"MESSAGE": {
|
||||||
"LABEL": "Besked",
|
"LABEL": "Besked",
|
||||||
@ -190,157 +191,157 @@
|
|||||||
},
|
},
|
||||||
"CONTACTS_PAGE": {
|
"CONTACTS_PAGE": {
|
||||||
"HEADER": "Kontakter",
|
"HEADER": "Kontakter",
|
||||||
"FIELDS": "Contact fields",
|
"FIELDS": "Kontakt felter",
|
||||||
"SEARCH_BUTTON": "Søg",
|
"SEARCH_BUTTON": "Søg",
|
||||||
"SEARCH_INPUT_PLACEHOLDER": "Søg efter kontakter",
|
"SEARCH_INPUT_PLACEHOLDER": "Søg efter kontakter",
|
||||||
"FILTER_CONTACTS": "Filter",
|
"FILTER_CONTACTS": "Filtrer",
|
||||||
"FILTER_CONTACTS_SAVE": "Save filter",
|
"FILTER_CONTACTS_SAVE": "Gem filter",
|
||||||
"FILTER_CONTACTS_DELETE": "Delete filter",
|
"FILTER_CONTACTS_DELETE": "Slet filter",
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LOADING_MESSAGE": "Indlæser kontakter...",
|
"LOADING_MESSAGE": "Indlæser kontakter...",
|
||||||
"404": "Ingen kontakter matcher din søgning 🔍",
|
"404": "Ingen kontakter matcher din søgning 🔍",
|
||||||
"NO_CONTACTS": "There are no available contacts",
|
"NO_CONTACTS": "Der er ingen tilgængelige kontakter",
|
||||||
"TABLE_HEADER": {
|
"TABLE_HEADER": {
|
||||||
"NAME": "Navn",
|
"NAME": "Navn",
|
||||||
"PHONE_NUMBER": "Telefonnummer",
|
"PHONE_NUMBER": "Telefonnummer",
|
||||||
"CONVERSATIONS": "Samtaler",
|
"CONVERSATIONS": "Samtaler",
|
||||||
"LAST_ACTIVITY": "Last Activity",
|
"LAST_ACTIVITY": "Sidste Aktivitet",
|
||||||
"COUNTRY": "Country",
|
"COUNTRY": "Land",
|
||||||
"CITY": "City",
|
"CITY": "By",
|
||||||
"SOCIAL_PROFILES": "Social Profiles",
|
"SOCIAL_PROFILES": "Social Profiles",
|
||||||
"COMPANY": "Virksomhed",
|
"COMPANY": "Virksomhed",
|
||||||
"EMAIL_ADDRESS": "E-Mail Adresse"
|
"EMAIL_ADDRESS": "E-Mail Adresse"
|
||||||
},
|
},
|
||||||
"VIEW_DETAILS": "View details"
|
"VIEW_DETAILS": "Se detaljer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONTACT_PROFILE": {
|
"CONTACT_PROFILE": {
|
||||||
"BACK_BUTTON": "Kontakter",
|
"BACK_BUTTON": "Kontakter",
|
||||||
"LOADING": "Loading contact profile..."
|
"LOADING": "Indlæser kontaktprofil..."
|
||||||
},
|
},
|
||||||
"REMINDER": {
|
"REMINDER": {
|
||||||
"ADD_BUTTON": {
|
"ADD_BUTTON": {
|
||||||
"BUTTON": "Add",
|
"BUTTON": "Tilføj",
|
||||||
"TITLE": "Shift + Enter to create a task"
|
"TITLE": "Shift + Enter for at oprette en opgave"
|
||||||
},
|
},
|
||||||
"FOOTER": {
|
"FOOTER": {
|
||||||
"DUE_DATE": "Due date",
|
"DUE_DATE": "Forfaldsdato",
|
||||||
"LABEL_TITLE": "Set type"
|
"LABEL_TITLE": "Angiv type"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"NOTES": {
|
"NOTES": {
|
||||||
"FETCHING_NOTES": "Fetching notes...",
|
"FETCHING_NOTES": "Henter noter...",
|
||||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
"NOT_AVAILABLE": "Der er ingen noter oprettet til denne kontakt",
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"TITLE": "Notes"
|
"TITLE": "Noter"
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LABEL": "added a note"
|
"LABEL": "tilføjede en note"
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"BUTTON": "Add",
|
"BUTTON": "Tilføj",
|
||||||
"PLACEHOLDER": "Add a note",
|
"PLACEHOLDER": "Tilføj en note",
|
||||||
"TITLE": "Shift + Enter to create a note"
|
"TITLE": "Skift + Enter for at oprette en note"
|
||||||
},
|
},
|
||||||
"CONTENT_HEADER": {
|
"CONTENT_HEADER": {
|
||||||
"DELETE": "Delete note"
|
"DELETE": "Slet note"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EVENTS": {
|
"EVENTS": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"TITLE": "Activities"
|
"TITLE": "Aktiviteter"
|
||||||
},
|
},
|
||||||
"BUTTON": {
|
"BUTTON": {
|
||||||
"PILL_BUTTON_NOTES": "notes",
|
"PILL_BUTTON_NOTES": "noter",
|
||||||
"PILL_BUTTON_EVENTS": "events",
|
"PILL_BUTTON_EVENTS": "begivenheder",
|
||||||
"PILL_BUTTON_CONVO": "samtaler"
|
"PILL_BUTTON_CONVO": "samtaler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CUSTOM_ATTRIBUTES": {
|
"CUSTOM_ATTRIBUTES": {
|
||||||
"ADD_BUTTON_TEXT": "Add attributes",
|
"ADD_BUTTON_TEXT": "Tilføj attributter",
|
||||||
"BUTTON": "Add custom attribute",
|
"BUTTON": "Tilføj brugerdefineret attribut",
|
||||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
"NOT_AVAILABLE": "Der er ingen brugerdefinerede attributter tilgængelige for denne kontakt.",
|
||||||
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
|
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
|
||||||
"ACTIONS": {
|
"ACTIONS": {
|
||||||
"COPY": "Copy attribute",
|
"COPY": "Kopier attribut",
|
||||||
"DELETE": "Delete attribute",
|
"DELETE": "Slet egenskab",
|
||||||
"EDIT": "Edit attribute"
|
"EDIT": "Rediger attribut"
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Create custom attribute",
|
"TITLE": "Opret brugerdefineret attribut",
|
||||||
"DESC": "Add custom information to this contact."
|
"DESC": "Tilføj brugerdefineret information til denne kontakt."
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CREATE": "Add attribute",
|
"CREATE": "Tilføj attribut",
|
||||||
"CANCEL": "Annuller",
|
"CANCEL": "Annuller",
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Custom attribute name",
|
"LABEL": "Brugerdefineret attributnavn",
|
||||||
"PLACEHOLDER": "Eg: shopify id",
|
"PLACEHOLDER": "F. eks.: shopify id",
|
||||||
"ERROR": "Invalid custom attribute name"
|
"ERROR": "Ugyldigt brugerdefineret attributnavn"
|
||||||
},
|
},
|
||||||
"VALUE": {
|
"VALUE": {
|
||||||
"LABEL": "Attribute value",
|
"LABEL": "Egenskab værdi",
|
||||||
"PLACEHOLDER": "Eg: 11901 "
|
"PLACEHOLDER": "Eg: 11901 "
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Create new attribute ",
|
"TITLE": "Opret ny egenskab ",
|
||||||
"SUCCESS": "Attribute added successfully",
|
"SUCCESS": "Egenskab tilføjet",
|
||||||
"ERROR": "Unable to add attribute. Please try again later"
|
"ERROR": "Kan ikke tilføje attribut. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"UPDATE": {
|
"UPDATE": {
|
||||||
"SUCCESS": "Attribute updated successfully",
|
"SUCCESS": "Attributten er opdateret",
|
||||||
"ERROR": "Unable to update attribute. Please try again later"
|
"ERROR": "Kan ikke opdatere attributten. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"SUCCESS": "Attribute deleted successfully",
|
"SUCCESS": "Attributten blev slettet",
|
||||||
"ERROR": "Unable to delete attribute. Please try again later"
|
"ERROR": "Kan ikke slette attributten. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"ATTRIBUTE_SELECT": {
|
"ATTRIBUTE_SELECT": {
|
||||||
"TITLE": "Add attributes",
|
"TITLE": "Tilføj attributter",
|
||||||
"PLACEHOLDER": "Search attributes",
|
"PLACEHOLDER": "Søg attributter",
|
||||||
"NO_RESULT": "No attributes found"
|
"NO_RESULT": "Ingen attributter fundet"
|
||||||
},
|
},
|
||||||
"ATTRIBUTE_TYPE": {
|
"ATTRIBUTE_TYPE": {
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"PLACEHOLDER": "Select value",
|
"PLACEHOLDER": "Vælg værdi",
|
||||||
"SEARCH_INPUT_PLACEHOLDER": "Search value",
|
"SEARCH_INPUT_PLACEHOLDER": "Søg værdi",
|
||||||
"NO_RESULT": "No result found"
|
"NO_RESULT": "Ingen resultater fundet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"VALIDATIONS": {
|
"VALIDATIONS": {
|
||||||
"REQUIRED": "Valid value is required",
|
"REQUIRED": "Gyldig værdi er påkrævet",
|
||||||
"INVALID_URL": "Invalid URL"
|
"INVALID_URL": "Ugyldig URL"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"MERGE_CONTACTS": {
|
"MERGE_CONTACTS": {
|
||||||
"TITLE": "Merge contacts",
|
"TITLE": "Sammenflet kontakter",
|
||||||
"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.",
|
"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": {
|
"PRIMARY": {
|
||||||
"TITLE": "Primary contact",
|
"TITLE": "Primær kontakt",
|
||||||
"HELP_LABEL": "To be kept"
|
"HELP_LABEL": "Skal opbevares"
|
||||||
},
|
},
|
||||||
"CHILD": {
|
"CHILD": {
|
||||||
"TITLE": "Contact to merge",
|
"TITLE": "Kontakt for sammenfletning",
|
||||||
"PLACEHOLDER": "Search for a contact",
|
"PLACEHOLDER": "Søg efter en kontakt",
|
||||||
"HELP_LABEL": "To be deleted"
|
"HELP_LABEL": "Skal slettes"
|
||||||
},
|
},
|
||||||
"SUMMARY": {
|
"SUMMARY": {
|
||||||
"TITLE": "Summary",
|
"TITLE": "Oversigt",
|
||||||
"DELETE_WARNING": "Contact of <strong>%{childContactName}</strong> will be deleted.",
|
"DELETE_WARNING": "Kontakt af <strong>%{childContactName}</strong> vil blive slettet.",
|
||||||
"ATTRIBUTE_WARNING": "Contact details of <strong>%{childContactName}</strong> will be copied to <strong>%{primaryContactName}</strong>."
|
"ATTRIBUTE_WARNING": "Kontaktoplysninger på <strong>%{childContactName}</strong> vil blive kopieret til <strong>%{primaryContactName}</strong>."
|
||||||
},
|
},
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"ERROR": "ERROR_MESSAGE"
|
"ERROR": "FEJL_MEDDELELSE"
|
||||||
},
|
},
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"SUBMIT": " Merge contacts",
|
"SUBMIT": " Sammenflet kontakter",
|
||||||
"CANCEL": "Annuller",
|
"CANCEL": "Annuller",
|
||||||
"CHILD_CONTACT": {
|
"CHILD_CONTACT": {
|
||||||
"ERROR": "Select a child contact to merge"
|
"ERROR": "Vælg en underordnet kontakt at flette"
|
||||||
},
|
},
|
||||||
"SUCCESS_MESSAGE": "Contact merged successfully",
|
"SUCCESS_MESSAGE": "Kontakt flettet med succes",
|
||||||
"ERROR_MESSAGE": "Could not merge contacts, try again!"
|
"ERROR_MESSAGE": "Kunne ikke sammenflette kontakter, prøv igen!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,49 +1,49 @@
|
|||||||
{
|
{
|
||||||
"CONTACTS_FILTER": {
|
"CONTACTS_FILTER": {
|
||||||
"TITLE": "Filter Contacts",
|
"TITLE": "Filtrer Kontakter",
|
||||||
"SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.",
|
"SUBTITLE": "Tilføj filtre nedenfor og tryk på 'Send' for at filtrere kontakter.",
|
||||||
"ADD_NEW_FILTER": "Add Filter",
|
"ADD_NEW_FILTER": "Tilføj Filter",
|
||||||
"CLEAR_ALL_FILTERS": "Clear All Filters",
|
"CLEAR_ALL_FILTERS": "Ryd Alle Filtre",
|
||||||
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
|
"FILTER_DELETE_ERROR": "Du skal have mindst et filter at gemme",
|
||||||
"SUBMIT_BUTTON_LABEL": "Send",
|
"SUBMIT_BUTTON_LABEL": "Send",
|
||||||
"CANCEL_BUTTON_LABEL": "Annuller",
|
"CANCEL_BUTTON_LABEL": "Annuller",
|
||||||
"CLEAR_BUTTON_LABEL": "Clear Filters",
|
"CLEAR_BUTTON_LABEL": "Ryd Filtre",
|
||||||
"EMPTY_VALUE_ERROR": "Value is required",
|
"EMPTY_VALUE_ERROR": "Værdi er påkrævet",
|
||||||
"TOOLTIP_LABEL": "Filter contacts",
|
"TOOLTIP_LABEL": "Filtrer kontaktpersoner",
|
||||||
"QUERY_DROPDOWN_LABELS": {
|
"QUERY_DROPDOWN_LABELS": {
|
||||||
"AND": "AND",
|
"AND": "OG",
|
||||||
"OR": "OR"
|
"OR": "ELLER"
|
||||||
},
|
},
|
||||||
"OPERATOR_LABELS": {
|
"OPERATOR_LABELS": {
|
||||||
"equal_to": "Equal to",
|
"equal_to": "Lig med",
|
||||||
"not_equal_to": "Not equal to",
|
"not_equal_to": "Ikke lig med",
|
||||||
"contains": "Contains",
|
"contains": "Indeholder",
|
||||||
"does_not_contain": "Does not contain",
|
"does_not_contain": "Indeholder ikke",
|
||||||
"is_present": "Is present",
|
"is_present": "Er til stede",
|
||||||
"is_not_present": "Is not present",
|
"is_not_present": "Er ikke til stede",
|
||||||
"is_greater_than": "Is greater than",
|
"is_greater_than": "Er større end",
|
||||||
"is_lesser_than": "Is lesser than",
|
"is_lesser_than": "Er mindre end",
|
||||||
"days_before": "Is x days before"
|
"days_before": "Er x dage før"
|
||||||
},
|
},
|
||||||
"ATTRIBUTES": {
|
"ATTRIBUTES": {
|
||||||
"NAME": "Navn",
|
"NAME": "Navn",
|
||||||
"EMAIL": "E-mail",
|
"EMAIL": "E-mail",
|
||||||
"PHONE_NUMBER": "Telefonnummer",
|
"PHONE_NUMBER": "Telefonnummer",
|
||||||
"IDENTIFIER": "Identifier",
|
"IDENTIFIER": "Identifier",
|
||||||
"CITY": "City",
|
"CITY": "By",
|
||||||
"COUNTRY": "Country",
|
"COUNTRY": "Land",
|
||||||
"CUSTOM_ATTRIBUTE_LIST": "List",
|
"CUSTOM_ATTRIBUTE_LIST": "Liste",
|
||||||
"CUSTOM_ATTRIBUTE_TEXT": "Text",
|
"CUSTOM_ATTRIBUTE_TEXT": "Tekst",
|
||||||
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
|
"CUSTOM_ATTRIBUTE_NUMBER": "Nummer",
|
||||||
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
"CUSTOM_ATTRIBUTE_LINK": "Link",
|
||||||
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
|
"CUSTOM_ATTRIBUTE_CHECKBOX": "Afkrydsningsfelt",
|
||||||
"CREATED_AT": "Created At",
|
"CREATED_AT": "Oprettet Den",
|
||||||
"LAST_ACTIVITY": "Last Activity",
|
"LAST_ACTIVITY": "Sidste Aktivitet",
|
||||||
"REFERER_LINK": "Referrer link"
|
"REFERER_LINK": "Link til reference"
|
||||||
},
|
},
|
||||||
"GROUPS": {
|
"GROUPS": {
|
||||||
"STANDARD_FILTERS": "Standard Filters",
|
"STANDARD_FILTERS": "Standard Filtre",
|
||||||
"ADDITIONAL_FILTERS": "Additional Filters",
|
"ADDITIONAL_FILTERS": "Yderligere Filtre",
|
||||||
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber"
|
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"CONVERSATION": {
|
"CONVERSATION": {
|
||||||
"SELECT_A_CONVERSATION": "Vælg venligst en samtale fra venstre rude",
|
"SELECT_A_CONVERSATION": "Vælg venligst en samtale fra venstre rude",
|
||||||
"404": "Sorry, we cannot find the conversation. Please try again",
|
"CSAT_REPLY_MESSAGE": "Bedøm venligst samtalen",
|
||||||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
"404": "Beklager, vi kan ikke finde samtalen. Prøv igen",
|
||||||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
"SWITCH_VIEW_LAYOUT": "Skift layout",
|
||||||
"UNVERIFIED_SESSION": "The identity of this user is not verified",
|
"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_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_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.",
|
"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_MESSAGES": "Søg efter beskeder i samtaler",
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"TITLE": "Søg efter beskeder",
|
"TITLE": "Søg efter beskeder",
|
||||||
"RESULT_TITLE": "Search Results",
|
"RESULT_TITLE": "Søgeresultater",
|
||||||
"LOADING_MESSAGE": "Behandler data...",
|
"LOADING_MESSAGE": "Behandler data...",
|
||||||
"PLACEHOLDER": "Skriv tekst for at søge i beskeder",
|
"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_MESSAGES": "Ulæste Beskeder",
|
||||||
"UNREAD_MESSAGE": "Unread Message",
|
"UNREAD_MESSAGE": "Ulæst Besked",
|
||||||
"CLICK_HERE": "Klik her",
|
"CLICK_HERE": "Klik her",
|
||||||
"LOADING_INBOXES": "Indlæser indbakker",
|
"LOADING_INBOXES": "Indlæser indbakker",
|
||||||
"LOADING_CONVERSATIONS": "Indlæser Samtaler",
|
"LOADING_CONVERSATIONS": "Indlæser Samtaler",
|
||||||
"CANNOT_REPLY": "Du kan ikke svare på grund af",
|
"CANNOT_REPLY": "Du kan ikke svare på grund af",
|
||||||
"24_HOURS_WINDOW": "24 timers beskedvindue begrænsning",
|
"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?",
|
"NOT_ASSIGNED_TO_YOU": "Denne samtale er ikke tildelt dig. Vil du tildele denne samtale til dig selv?",
|
||||||
"ASSIGN_TO_ME": "Assign to me",
|
"ASSIGN_TO_ME": "Tildel til mig",
|
||||||
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
|
"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",
|
"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:",
|
"REPLYING_TO": "Du svarer til:",
|
||||||
"REMOVE_SELECTION": "Fjern Markering",
|
"REMOVE_SELECTION": "Fjern Markering",
|
||||||
"DOWNLOAD": "Download",
|
"DOWNLOAD": "Download",
|
||||||
"UNKNOWN_FILE_TYPE": "Unknown File",
|
"UNKNOWN_FILE_TYPE": "Ukendt Fil",
|
||||||
"UPLOADING_ATTACHMENTS": "Uploading attachments...",
|
"UPLOADING_ATTACHMENTS": "Uploader vedhæftede filer...",
|
||||||
"SUCCESS_DELETE_MESSAGE": "Message deleted successfully",
|
"SUCCESS_DELETE_MESSAGE": "Besked slettet",
|
||||||
"FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again",
|
"FAIL_DELETE_MESSSAGE": "Kunne ikke slette beskeden! Prøv igen",
|
||||||
"NO_RESPONSE": "No response",
|
"NO_RESPONSE": "Intet svar",
|
||||||
"RATING_TITLE": "Rating",
|
"RATING_TITLE": "Bedømmelse",
|
||||||
"FEEDBACK_TITLE": "Feedback",
|
"FEEDBACK_TITLE": "Tilbagemelding",
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"RESOLVE_ACTION": "Løs",
|
"RESOLVE_ACTION": "Løs",
|
||||||
"REOPEN_ACTION": "Genåben",
|
"REOPEN_ACTION": "Genåben",
|
||||||
@ -47,56 +48,56 @@
|
|||||||
"OPEN": "Mere",
|
"OPEN": "Mere",
|
||||||
"CLOSE": "Luk",
|
"CLOSE": "Luk",
|
||||||
"DETAILS": "detaljer",
|
"DETAILS": "detaljer",
|
||||||
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
|
"SNOOZED_UNTIL_TOMORROW": "Udsat til i morgen",
|
||||||
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
|
"SNOOZED_UNTIL_NEXT_WEEK": "Udsat indtil næste uge",
|
||||||
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply"
|
"SNOOZED_UNTIL_NEXT_REPLY": "Udsat indtil næste svar"
|
||||||
},
|
},
|
||||||
"RESOLVE_DROPDOWN": {
|
"RESOLVE_DROPDOWN": {
|
||||||
"MARK_PENDING": "Mark as pending",
|
"MARK_PENDING": "Markér som afventende",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze until",
|
"TITLE": "Udsæt til",
|
||||||
"NEXT_REPLY": "Next reply",
|
"NEXT_REPLY": "Næste svar",
|
||||||
"TOMORROW": "Tomorrow",
|
"TOMORROW": "I Morgen",
|
||||||
"NEXT_WEEK": "Next week"
|
"NEXT_WEEK": "Næste uge"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CARD_CONTEXT_MENU": {
|
"CARD_CONTEXT_MENU": {
|
||||||
"PENDING": "Mark as pending",
|
"PENDING": "Markér som afventende",
|
||||||
"RESOLVED": "Mark as resolved",
|
"RESOLVED": "Marker som løst",
|
||||||
"REOPEN": "Reopen conversation",
|
"REOPEN": "Genåbn samtale",
|
||||||
"SNOOZE": {
|
"SNOOZE": {
|
||||||
"TITLE": "Snooze",
|
"TITLE": "Udsæt",
|
||||||
"NEXT_REPLY": "Until next reply",
|
"NEXT_REPLY": "Indtil næste svar",
|
||||||
"TOMORROW": "Until tomorrow",
|
"TOMORROW": "Indtil i morgen",
|
||||||
"NEXT_WEEK": "Until next week"
|
"NEXT_WEEK": "Indtil næste uge"
|
||||||
},
|
},
|
||||||
"ASSIGN_AGENT": "Assign agent",
|
"ASSIGN_AGENT": "Tildel agent",
|
||||||
"ASSIGN_LABEL": "Assign label",
|
"ASSIGN_LABEL": "Tildel etiket",
|
||||||
"AGENTS_LOADING": "Loading agents...",
|
"AGENTS_LOADING": "Indlæser agenter...",
|
||||||
"ASSIGN_TEAM": "Assign team",
|
"ASSIGN_TEAM": "Tildel team",
|
||||||
"API": {
|
"API": {
|
||||||
"AGENT_ASSIGNMENT": {
|
"AGENT_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"",
|
"SUCCESFUL": "Samtale id %{conversationId} tildelt \"%{agentName}\"",
|
||||||
"FAILED": "Couldn't assign agent. Please try again."
|
"FAILED": "Kunne ikke tildele agent. Prøv venligst igen."
|
||||||
},
|
},
|
||||||
"LABEL_ASSIGNMENT": {
|
"LABEL_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}",
|
"SUCCESFUL": "Tildelt etiket #%{labelName} til samtale-id %{conversationId}",
|
||||||
"FAILED": "Couldn't assign label. Please try again."
|
"FAILED": "Kunne ikke tildele etiket. Prøv venligst igen."
|
||||||
},
|
},
|
||||||
"TEAM_ASSIGNMENT": {
|
"TEAM_ASSIGNMENT": {
|
||||||
"SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}",
|
"SUCCESFUL": "Tildelt team \"%{team}\" til samtale-id %{conversationId}",
|
||||||
"FAILED": "Couldn't assign team. Please try again."
|
"FAILED": "Kunne ikke tildele team. Prøv venligst igen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"FOOTER": {
|
"FOOTER": {
|
||||||
"MESSAGE_SIGN_TOOLTIP": "Message signature",
|
"MESSAGE_SIGN_TOOLTIP": "Besked signatur",
|
||||||
"ENABLE_SIGN_TOOLTIP": "Enable signature",
|
"ENABLE_SIGN_TOOLTIP": "Aktiver signatur",
|
||||||
"DISABLE_SIGN_TOOLTIP": "Disable signature",
|
"DISABLE_SIGN_TOOLTIP": "Deaktivér signatur",
|
||||||
"MSG_INPUT": "Shift + enter for ny linje. Start med '/' for at vælge et standardsvar.",
|
"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",
|
"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.",
|
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Beskedsignatur er ikke konfigureret, konfigurer den i profilindstillinger.",
|
||||||
"CLICK_HERE": "Click here to update"
|
"CLICK_HERE": "Klik her for at opdatere"
|
||||||
},
|
},
|
||||||
"REPLYBOX": {
|
"REPLYBOX": {
|
||||||
"REPLY": "Svar",
|
"REPLY": "Svar",
|
||||||
@ -104,53 +105,53 @@
|
|||||||
"SEND": "Send",
|
"SEND": "Send",
|
||||||
"CREATE": "Tilføj Note",
|
"CREATE": "Tilføj Note",
|
||||||
"TWEET": "Tweet",
|
"TWEET": "Tweet",
|
||||||
"TIP_FORMAT_ICON": "Show rich text editor",
|
"TIP_FORMAT_ICON": "Vis rig teksteditor",
|
||||||
"TIP_EMOJI_ICON": "Show emoji selector",
|
"TIP_EMOJI_ICON": "Vis emoji-vælger",
|
||||||
"TIP_ATTACH_ICON": "Attach files",
|
"TIP_ATTACH_ICON": "Vedhæft filer",
|
||||||
"TIP_AUDIORECORDER_ICON": "Record audio",
|
"TIP_AUDIORECORDER_ICON": "Optag lyd",
|
||||||
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
"TIP_AUDIORECORDER_PERMISSION": "Tillad adgang til lyd",
|
||||||
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
"TIP_AUDIORECORDER_ERROR": "Kunne ikke åbne lyden",
|
||||||
"ENTER_TO_SEND": "Enter to send",
|
"DRAG_DROP": "Træk og slip her for at vedhæfte",
|
||||||
"DRAG_DROP": "Drag and drop here to attach",
|
"START_AUDIO_RECORDING": "Start lydoptagelse",
|
||||||
"START_AUDIO_RECORDING": "Start audio recording",
|
"STOP_AUDIO_RECORDING": "Stop lydoptagelse",
|
||||||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
|
||||||
"": "",
|
"": "",
|
||||||
"EMAIL_HEAD": {
|
"EMAIL_HEAD": {
|
||||||
"ADD_BCC": "Add bcc",
|
"ADD_BCC": "Tilføj bcc",
|
||||||
"CC": {
|
"CC": {
|
||||||
"LABEL": "CC",
|
"LABEL": "CC",
|
||||||
"PLACEHOLDER": "Emails separated by commas",
|
"PLACEHOLDER": "E-mails adskilt af kommaer",
|
||||||
"ERROR": "Please enter valid email addresses"
|
"ERROR": "Indtast venligst gyldige e-mailadresser"
|
||||||
},
|
},
|
||||||
"BCC": {
|
"BCC": {
|
||||||
"LABEL": "BCC",
|
"LABEL": "BCC",
|
||||||
"PLACEHOLDER": "Emails separated by commas",
|
"PLACEHOLDER": "E-mails adskilt af kommaer",
|
||||||
"ERROR": "Please enter valid email addresses"
|
"ERROR": "Indtast venligst gyldige e-mailadresser"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"VISIBLE_TO_AGENTS": "Privat Note: Kun synlig for dig og dit team",
|
"VISIBLE_TO_AGENTS": "Privat Note: Kun synlig for dig og dit team",
|
||||||
"CHANGE_STATUS": "Samtalestatus ændret",
|
"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": "Samtaleansvarlig ændret",
|
||||||
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
"CHANGE_AGENT_FAILED": "Ændring af ansvarlig mislykkedes",
|
||||||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
"ASSIGN_LABEL_SUCCESFUL": "Label tildelt",
|
||||||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
"ASSIGN_LABEL_FAILED": "Tildeling af etiket mislykkedes",
|
||||||
"CHANGE_TEAM": "Conversation team changed",
|
"CHANGE_TEAM": "Samtaleholdet er ændret",
|
||||||
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
|
"FILE_SIZE_LIMIT": "Filen overskrider grænsen på {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} for vedhæftede filer",
|
||||||
"MESSAGE_ERROR": "Unable to send this message, please try again later",
|
"MESSAGE_ERROR": "Kunne ikke sende denne besked, prøv igen senere",
|
||||||
"SENT_BY": "Sent by:",
|
"SENT_BY": "Sendt af:",
|
||||||
"BOT": "Bot",
|
"BOT": "Bot",
|
||||||
"SEND_FAILED": "Couldn't send message! Try again",
|
"SEND_FAILED": "Kunne ikke sende besked! Prøv igen",
|
||||||
"TRY_AGAIN": "retry",
|
"TRY_AGAIN": "prøv igen",
|
||||||
"ASSIGNMENT": {
|
"ASSIGNMENT": {
|
||||||
"SELECT_AGENT": "Select Agent",
|
"SELECT_AGENT": "Vælg Agent",
|
||||||
"REMOVE": "Fjern",
|
"REMOVE": "Fjern",
|
||||||
"ASSIGN": "Assign"
|
"ASSIGN": "Tildel"
|
||||||
},
|
},
|
||||||
"CONTEXT_MENU": {
|
"CONTEXT_MENU": {
|
||||||
"COPY": "Kopiér",
|
"COPY": "Kopiér",
|
||||||
"DELETE": "Slet"
|
"DELETE": "Slet",
|
||||||
|
"CREATE_A_CANNED_RESPONSE": "Add to canned responses"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_TRANSCRIPT": {
|
"EMAIL_TRANSCRIPT": {
|
||||||
@ -171,71 +172,71 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ONBOARDING": {
|
"ONBOARDING": {
|
||||||
"TITLE": "Hey 👋, Welcome to %{installationName}!",
|
"TITLE": "Hej 👋, Velkommen til %{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.",
|
"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": "Read our latest updates",
|
"READ_LATEST_UPDATES": "Læs vores seneste opdateringer",
|
||||||
"ALL_CONVERSATION": {
|
"ALL_CONVERSATION": {
|
||||||
"TITLE": "All your conversations in one place",
|
"TITLE": "Alle dine samtaler på ét sted",
|
||||||
"DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status."
|
"DESCRIPTION": "Se alle samtaler fra dine kunder på et enkelt betjeningspanel. Du kan filtrere samtaler efter indgående kanal, etiket og status."
|
||||||
},
|
},
|
||||||
"TEAM_MEMBERS": {
|
"TEAM_MEMBERS": {
|
||||||
"TITLE": "Invite your team members",
|
"TITLE": "Inviter dine teammedlemmer",
|
||||||
"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": "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": "Click here to invite a team member"
|
"NEW_LINK": "Klik her for at invitere et teammedlem"
|
||||||
},
|
},
|
||||||
"INBOXES": {
|
"INBOXES": {
|
||||||
"TITLE": "Connect Inboxes",
|
"TITLE": "Forbind Indbakker",
|
||||||
"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.",
|
"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": "Click here to create an inbox"
|
"NEW_LINK": "Klik her for at oprette en indbakke"
|
||||||
},
|
},
|
||||||
"LABELS": {
|
"LABELS": {
|
||||||
"TITLE": "Organize conversations with labels",
|
"TITLE": "Organiser samtaler med etiketter",
|
||||||
"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.",
|
"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": "Click here to create tags"
|
"NEW_LINK": "Klik her for at oprette tags"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONVERSATION_SIDEBAR": {
|
"CONVERSATION_SIDEBAR": {
|
||||||
"ASSIGNEE_LABEL": "Assigned Agent",
|
"ASSIGNEE_LABEL": "Tildelt Agent",
|
||||||
"SELF_ASSIGN": "Assign to me",
|
"SELF_ASSIGN": "Tildel til mig",
|
||||||
"TEAM_LABEL": "Assigned Team",
|
"TEAM_LABEL": "Tildelt Team",
|
||||||
"SELECT": {
|
"SELECT": {
|
||||||
"PLACEHOLDER": "None"
|
"PLACEHOLDER": "Ingen"
|
||||||
},
|
},
|
||||||
"ACCORDION": {
|
"ACCORDION": {
|
||||||
"CONTACT_DETAILS": "Contact Details",
|
"CONTACT_DETAILS": "Kontaktoplysninger",
|
||||||
"CONVERSATION_ACTIONS": "Conversation Actions",
|
"CONVERSATION_ACTIONS": "Samtale Handlinger",
|
||||||
"CONVERSATION_LABELS": "Samtale Etiketter",
|
"CONVERSATION_LABELS": "Samtale Etiketter",
|
||||||
"CONVERSATION_INFO": "Conversation Information",
|
"CONVERSATION_INFO": "Samtale Information",
|
||||||
"CONTACT_ATTRIBUTES": "Contact Attributes",
|
"CONTACT_ATTRIBUTES": "Kontakt Attributter",
|
||||||
"PREVIOUS_CONVERSATION": "Tidligere Samtaler"
|
"PREVIOUS_CONVERSATION": "Tidligere Samtaler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||||
"ADD_BUTTON_TEXT": "Create attribute",
|
"ADD_BUTTON_TEXT": "Opret ny egenskab",
|
||||||
"UPDATE": {
|
"UPDATE": {
|
||||||
"SUCCESS": "Attribute updated successfully",
|
"SUCCESS": "Attributten er opdateret",
|
||||||
"ERROR": "Unable to update attribute. Please try again later"
|
"ERROR": "Kan ikke opdatere attributten. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Add",
|
"TITLE": "Tilføj",
|
||||||
"SUCCESS": "Attribute added successfully",
|
"SUCCESS": "Egenskab tilføjet",
|
||||||
"ERROR": "Unable to add attribute. Please try again later"
|
"ERROR": "Kan ikke tilføje attribut. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"SUCCESS": "Attribute deleted successfully",
|
"SUCCESS": "Attributten blev slettet",
|
||||||
"ERROR": "Unable to delete attribute. Please try again later"
|
"ERROR": "Kan ikke slette attributten. Prøv igen senere"
|
||||||
},
|
},
|
||||||
"ATTRIBUTE_SELECT": {
|
"ATTRIBUTE_SELECT": {
|
||||||
"TITLE": "Add attributes",
|
"TITLE": "Tilføj attributter",
|
||||||
"PLACEHOLDER": "Search attributes",
|
"PLACEHOLDER": "Søg attributter",
|
||||||
"NO_RESULT": "No attributes found"
|
"NO_RESULT": "Ingen attributter fundet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EMAIL_HEADER": {
|
"EMAIL_HEADER": {
|
||||||
"FROM": "From",
|
"FROM": "Fra",
|
||||||
"TO": "To",
|
"TO": "Til",
|
||||||
"BCC": "Bcc",
|
"BCC": "Bcc",
|
||||||
"CC": "Cc",
|
"CC": "Cc",
|
||||||
"SUBJECT": "Subject"
|
"SUBJECT": "Emne"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"CSAT": {
|
"CSAT": {
|
||||||
"TITLE": "Rate your conversation",
|
"TITLE": "Bedøm din samtale",
|
||||||
"PLACEHOLDER": "Tell us more..."
|
"PLACEHOLDER": "Fortæl os mere..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,8 +14,8 @@
|
|||||||
"NOTE": ""
|
"NOTE": ""
|
||||||
},
|
},
|
||||||
"ACCOUNT_ID": {
|
"ACCOUNT_ID": {
|
||||||
"TITLE": "Account ID",
|
"TITLE": "Konto SID",
|
||||||
"NOTE": "This ID is required if you are building an API based integration"
|
"NOTE": "Dette ID er påkrævet, hvis du bygger en API-baseret integration"
|
||||||
},
|
},
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Kontonavn",
|
"LABEL": "Kontonavn",
|
||||||
@ -40,36 +40,36 @@
|
|||||||
"AUTO_RESOLVE_DURATION": {
|
"AUTO_RESOLVE_DURATION": {
|
||||||
"LABEL": "Antal dage efter en ticket skal løses automatisk, hvis der ikke er nogen aktivitet",
|
"LABEL": "Antal dage efter en ticket skal løses automatisk, hvis der ikke er nogen aktivitet",
|
||||||
"PLACEHOLDER": "30",
|
"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": {
|
"FEATURES": {
|
||||||
"INBOUND_EMAIL_ENABLED": "Samtale kontinuitet med e-mails er aktiveret for din konto.",
|
"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."
|
"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.",
|
"UPDATE_CHATWOOT": "En opdatering %{latestChatwootVersion} til Chatwoot er tilgængelig. Opdater venligst din instans.",
|
||||||
"LEARN_MORE": "Learn more"
|
"LEARN_MORE": "Lær mere"
|
||||||
},
|
},
|
||||||
"FORMS": {
|
"FORMS": {
|
||||||
"MULTISELECT": {
|
"MULTISELECT": {
|
||||||
"ENTER_TO_SELECT": "Press enter to select",
|
"ENTER_TO_SELECT": "Tryk enter for at vælge",
|
||||||
"ENTER_TO_REMOVE": "Press enter to remove",
|
"ENTER_TO_REMOVE": "Tryk enter for at fjerne",
|
||||||
"SELECT_ONE": "Select one"
|
"SELECT_ONE": "Vælg en"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"NOTIFICATIONS_PAGE": {
|
"NOTIFICATIONS_PAGE": {
|
||||||
"HEADER": "Notifications",
|
"HEADER": "Notifikationer",
|
||||||
"MARK_ALL_DONE": "Mark All Done",
|
"MARK_ALL_DONE": "Markér Alle Udførte",
|
||||||
"DELETE_TITLE": "deleted",
|
"DELETE_TITLE": "slettet",
|
||||||
"UNREAD_NOTIFICATION": {
|
"UNREAD_NOTIFICATION": {
|
||||||
"TITLE": "Unread Notifications",
|
"TITLE": "Ulæste Notifikationer",
|
||||||
"ALL_NOTIFICATIONS": "View all notifications",
|
"ALL_NOTIFICATIONS": "Se alle notifikationer",
|
||||||
"LOADING_UNREAD_MESSAGE": "Loading unread notifications...",
|
"LOADING_UNREAD_MESSAGE": "Indlæser ulæste notifikationer...",
|
||||||
"EMPTY_MESSAGE": "You have no unread notifications"
|
"EMPTY_MESSAGE": "Du har ingen ulæste notifikationer"
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"LOADING_MESSAGE": "Loading notifications...",
|
"LOADING_MESSAGE": "Indlæser notifikationer...",
|
||||||
"404": "No Notifications",
|
"404": "Ingen Notifikationer",
|
||||||
"TABLE_HEADER": [
|
"TABLE_HEADER": [
|
||||||
"Navn",
|
"Navn",
|
||||||
"Telefonnummer",
|
"Telefonnummer",
|
||||||
@ -78,63 +78,63 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"TYPE_LABEL": {
|
"TYPE_LABEL": {
|
||||||
"conversation_creation": "New conversation",
|
"conversation_creation": "Ny samtale",
|
||||||
"conversation_assignment": "Conversation Assigned",
|
"conversation_assignment": "Samtale Tildelt",
|
||||||
"assigned_conversation_new_message": "New Message",
|
"assigned_conversation_new_message": "Ny Besked",
|
||||||
"conversation_mention": "Mention"
|
"conversation_mention": "Omtale"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"NETWORK": {
|
"NETWORK": {
|
||||||
"NOTIFICATION": {
|
"NOTIFICATION": {
|
||||||
"TEXT": "Disconnected from Chatwoot"
|
"TEXT": "Afbrudt fra Chatwoot"
|
||||||
},
|
},
|
||||||
"BUTTON": {
|
"BUTTON": {
|
||||||
"REFRESH": "Refresh"
|
"REFRESH": "Opdater"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"COMMAND_BAR": {
|
"COMMAND_BAR": {
|
||||||
"SEARCH_PLACEHOLDER": "Search or jump to",
|
"SEARCH_PLACEHOLDER": "Søg eller hop til",
|
||||||
"SECTIONS": {
|
"SECTIONS": {
|
||||||
"GENERAL": "General",
|
"GENERAL": "Generelt",
|
||||||
"REPORTS": "Rapporter",
|
"REPORTS": "Rapporter",
|
||||||
"CONVERSATION": "Conversation",
|
"CONVERSATION": "Samtale",
|
||||||
"CHANGE_ASSIGNEE": "Change Assignee",
|
"CHANGE_ASSIGNEE": "Skift Modtager",
|
||||||
"CHANGE_TEAM": "Change Team",
|
"CHANGE_TEAM": "Skift Team",
|
||||||
"ADD_LABEL": "Add label to the conversation",
|
"ADD_LABEL": "Tilføj etiket til samtalen",
|
||||||
"REMOVE_LABEL": "Remove label from the conversation",
|
"REMOVE_LABEL": "Fjern etiket fra samtalen",
|
||||||
"SETTINGS": "Indstillinger"
|
"SETTINGS": "Indstillinger"
|
||||||
},
|
},
|
||||||
"COMMANDS": {
|
"COMMANDS": {
|
||||||
"GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
|
"GO_TO_CONVERSATION_DASHBOARD": "Gå til Konversationspanel",
|
||||||
"GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
|
"GO_TO_CONTACTS_DASHBOARD": "Gå til Contacts Dashboard",
|
||||||
"GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview",
|
"GO_TO_REPORTS_OVERVIEW": "Gå til Oversigt over rapporter",
|
||||||
"GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports",
|
"GO_TO_CONVERSATION_REPORTS": "Gå til Konversationsrapporter",
|
||||||
"GO_TO_AGENT_REPORTS": "Go to Agent Reports",
|
"GO_TO_AGENT_REPORTS": "Gå til Agent rapporter",
|
||||||
"GO_TO_LABEL_REPORTS": "Go to Label Reports",
|
"GO_TO_LABEL_REPORTS": "Gå til Label rapporter",
|
||||||
"GO_TO_INBOX_REPORTS": "Go to Inbox Reports",
|
"GO_TO_INBOX_REPORTS": "Gå til Indbakke Rapporter",
|
||||||
"GO_TO_TEAM_REPORTS": "Go to Team Reports",
|
"GO_TO_TEAM_REPORTS": "Gå til holdrapporter",
|
||||||
"GO_TO_SETTINGS_AGENTS": "Go to Agent Settings",
|
"GO_TO_SETTINGS_AGENTS": "Gå til Agent indstillinger",
|
||||||
"GO_TO_SETTINGS_TEAMS": "Go to Team Settings",
|
"GO_TO_SETTINGS_TEAMS": "Gå til teamindstillinger",
|
||||||
"GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings",
|
"GO_TO_SETTINGS_INBOXES": "Gå til Indbakkeindstillinger",
|
||||||
"GO_TO_SETTINGS_LABELS": "Go to Label Settings",
|
"GO_TO_SETTINGS_LABELS": "Gå til Label indstillinger",
|
||||||
"GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings",
|
"GO_TO_SETTINGS_CANNED_RESPONSES": "Gå til Indstillinger for scannede svar",
|
||||||
"GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings",
|
"GO_TO_SETTINGS_APPLICATIONS": "Gå til programindstillinger",
|
||||||
"GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings",
|
"GO_TO_SETTINGS_ACCOUNT": "Gå til kontoindstillinger",
|
||||||
"GO_TO_SETTINGS_PROFILE": "Go to Profile Settings",
|
"GO_TO_SETTINGS_PROFILE": "Gå til profilindstillinger",
|
||||||
"GO_TO_NOTIFICATIONS": "Go to Notifications",
|
"GO_TO_NOTIFICATIONS": "Gå til Notifikationer",
|
||||||
"ADD_LABELS_TO_CONVERSATION": "Add label to the conversation",
|
"ADD_LABELS_TO_CONVERSATION": "Tilføj etiket til samtalen",
|
||||||
"ASSIGN_AN_AGENT": "Assign an agent",
|
"ASSIGN_AN_AGENT": "Tildel en agent",
|
||||||
"ASSIGN_A_TEAM": "Assign a team",
|
"ASSIGN_A_TEAM": "Tildel et team",
|
||||||
"MUTE_CONVERSATION": "Mute conversation",
|
"MUTE_CONVERSATION": "Gør samtale lydløs",
|
||||||
"UNMUTE_CONVERSATION": "Unmute conversation",
|
"UNMUTE_CONVERSATION": "Fjern samtale",
|
||||||
"REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation",
|
"REMOVE_LABEL_FROM_CONVERSATION": "Fjern etiket fra samtalen",
|
||||||
"REOPEN_CONVERSATION": "Reopen conversation",
|
"REOPEN_CONVERSATION": "Genåbn samtale",
|
||||||
"RESOLVE_CONVERSATION": "Resolve conversation",
|
"RESOLVE_CONVERSATION": "Løs samtale",
|
||||||
"SEND_TRANSCRIPT": "Send an email transcript",
|
"SEND_TRANSCRIPT": "Send en e-mail udskrift",
|
||||||
"SNOOZE_CONVERSATION": "Snooze Conversation",
|
"SNOOZE_CONVERSATION": "Udsæt Samtale",
|
||||||
"UNTIL_NEXT_REPLY": "Until next reply",
|
"UNTIL_NEXT_REPLY": "Indtil næste svar",
|
||||||
"UNTIL_NEXT_WEEK": "Until next week",
|
"UNTIL_NEXT_WEEK": "Indtil næste uge",
|
||||||
"UNTIL_TOMORROW": "Until tomorrow"
|
"UNTIL_TOMORROW": "Indtil i morgen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,267 +1,409 @@
|
|||||||
{
|
{
|
||||||
"HELP_CENTER": {
|
"HELP_CENTER": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"FILTER": "Filter by",
|
"FILTER": "Filtrer efter",
|
||||||
"SORT": "Sort by",
|
"SORT": "Sorter efter",
|
||||||
"SETTINGS_BUTTON": "Indstillinger",
|
"SETTINGS_BUTTON": "Indstillinger",
|
||||||
"NEW_BUTTON": "New Article",
|
"NEW_BUTTON": "Ny Artikel",
|
||||||
"DROPDOWN_OPTIONS": {
|
"DROPDOWN_OPTIONS": {
|
||||||
"PUBLISHED": "Published",
|
"PUBLISHED": "Publiceret",
|
||||||
"DRAFT": "Draft",
|
"DRAFT": "Kladde",
|
||||||
"ARCHIVED": "Archived"
|
"ARCHIVED": "Arkiveret"
|
||||||
},
|
},
|
||||||
"TITLES": {
|
"TITLES": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "Alle Artikler",
|
||||||
"MINE": "My Articles",
|
"MINE": "Alle Artikler",
|
||||||
"DRAFT": "Draft Articles",
|
"DRAFT": "Kladde Artikler",
|
||||||
"ARCHIVED": "Archived Articles"
|
"ARCHIVED": "Arkiverede Artikler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT_HEADER": {
|
"EDIT_HEADER": {
|
||||||
"ALL_ARTICLES": "All Articles",
|
"ALL_ARTICLES": "Alle Artikler",
|
||||||
"PUBLISH_BUTTON": "Publish",
|
"PUBLISH_BUTTON": "Udgiv",
|
||||||
"PREVIEW": "Preview",
|
"MOVE_TO_ARCHIVE_BUTTON": "Flyt til arkiveret",
|
||||||
"ADD_TRANSLATION": "Add translation",
|
"PREVIEW": "Eksempelvisning",
|
||||||
"OPEN_SIDEBAR": "Open sidebar",
|
"ADD_TRANSLATION": "Tilføj oversættelse",
|
||||||
"CLOSE_SIDEBAR": "Close sidebar",
|
"OPEN_SIDEBAR": "Åbn sidepanel",
|
||||||
"SAVING": "Saving...",
|
"CLOSE_SIDEBAR": "Luk sidepanel",
|
||||||
"SAVED": "Saved"
|
"SAVING": "Gemmer...",
|
||||||
|
"SAVED": "Gemt"
|
||||||
},
|
},
|
||||||
"ARTICLE_SETTINGS": {
|
"ARTICLE_SETTINGS": {
|
||||||
"TITLE": "Article Settings",
|
"TITLE": "Artikel Indstillinger",
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"CATEGORY": {
|
"CATEGORY": {
|
||||||
"LABEL": "Category",
|
"LABEL": "Kategori",
|
||||||
"TITLE": "Select category",
|
"TITLE": "Vælg kategori",
|
||||||
"PLACEHOLDER": "Select category",
|
"PLACEHOLDER": "Vælg kategori",
|
||||||
"NO_RESULT": "No category found",
|
"NO_RESULT": "Ingen kategori fundet",
|
||||||
"SEARCH_PLACEHOLDER": "Search category"
|
"SEARCH_PLACEHOLDER": "Søg kategori"
|
||||||
},
|
},
|
||||||
"AUTHOR": {
|
"AUTHOR": {
|
||||||
"LABEL": "Author",
|
"LABEL": "Forfatter",
|
||||||
"TITLE": "Select author",
|
"TITLE": "Vælg forfatter",
|
||||||
"PLACEHOLDER": "Select author",
|
"PLACEHOLDER": "Vælg forfatter",
|
||||||
"NO_RESULT": "No authors found",
|
"NO_RESULT": "Ingen forfattere fundet",
|
||||||
"SEARCH_PLACEHOLDER": "Search author"
|
"SEARCH_PLACEHOLDER": "Søg efter forfatter"
|
||||||
},
|
},
|
||||||
"META_TITLE": {
|
"META_TITLE": {
|
||||||
"LABEL": "Meta title",
|
"LABEL": "Meta titel",
|
||||||
"PLACEHOLDER": "Add a meta title"
|
"PLACEHOLDER": "Add a meta title"
|
||||||
},
|
},
|
||||||
"META_DESCRIPTION": {
|
"META_DESCRIPTION": {
|
||||||
"LABEL": "Meta description",
|
"LABEL": "Meta beskrivelse",
|
||||||
"PLACEHOLDER": "Add your meta description for better SEO results..."
|
"PLACEHOLDER": "Tilføj din meta beskrivelse for bedre SEO resultater..."
|
||||||
},
|
},
|
||||||
"META_TAGS": {
|
"META_TAGS": {
|
||||||
"LABEL": "Meta tags",
|
"LABEL": "Meta tags",
|
||||||
"PLACEHOLDER": "Add meta tags separated by comma..."
|
"PLACEHOLDER": "Tilføj meta-tags adskilt af komma..."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"ARCHIVE": "Archive article",
|
"ARCHIVE": "Arkiv artikel",
|
||||||
"DELETE": "Delete article"
|
"DELETE": "Slet artikel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PORTAL": {
|
"PORTAL": {
|
||||||
"HEADER": "Portals",
|
"HEADER": "Portals",
|
||||||
"NEW_BUTTON": "New Portal",
|
"DEFAULT": "Standard",
|
||||||
"ACTIVE_BADGE": "active",
|
"NEW_BUTTON": "Ny Portal",
|
||||||
"CHOOSE_LOCALE_LABEL": "Choose a locale",
|
"ACTIVE_BADGE": "aktiv",
|
||||||
"LOADING_MESSAGE": "Loading portals...",
|
"CHOOSE_LOCALE_LABEL": "Vælg en landestandard",
|
||||||
"ARTICLES_LABEL": "articles",
|
"LOADING_MESSAGE": "Indlæser portaler...",
|
||||||
"NO_PORTALS_MESSAGE": "There are no available portals",
|
"ARTICLES_LABEL": "artikler",
|
||||||
"ADD_NEW_LOCALE": "Add a new locale",
|
"NO_PORTALS_MESSAGE": "Der er ingen tilgængelige portaler",
|
||||||
|
"ADD_NEW_LOCALE": "Tilføj en ny landestandard",
|
||||||
"POPOVER": {
|
"POPOVER": {
|
||||||
"TITLE": "Portals",
|
"TITLE": "Portals",
|
||||||
"PORTAL_SETTINGS": "Portal settings",
|
"PORTAL_SETTINGS": "Portal indstillinger",
|
||||||
"SUBTITLE": "You have multiple portals and can have different locales for each portal.",
|
"SUBTITLE": "Du har flere portaler og kan have forskellige landestandarder for hver portal.",
|
||||||
"CANCEL_BUTTON_LABEL": "Annuller",
|
"CANCEL_BUTTON_LABEL": "Annuller",
|
||||||
"CHOOSE_LOCALE_BUTTON": "Choose Locale"
|
"CHOOSE_LOCALE_BUTTON": "Vælg Landestandard"
|
||||||
},
|
},
|
||||||
"PORTAL_SETTINGS": {
|
"PORTAL_SETTINGS": {
|
||||||
"LIST_ITEM": {
|
"LIST_ITEM": {
|
||||||
"HEADER": {
|
"HEADER": {
|
||||||
"COUNT_LABEL": "articles",
|
"COUNT_LABEL": "artikler",
|
||||||
"ADD": "Add locale",
|
"ADD": "Tilføj landestandard",
|
||||||
"VISIT": "Visit site",
|
"VISIT": "Besøg websted",
|
||||||
"SETTINGS": "Indstillinger"
|
"SETTINGS": "Indstillinger",
|
||||||
|
"DELETE": "Slet"
|
||||||
},
|
},
|
||||||
"PORTAL_CONFIG": {
|
"PORTAL_CONFIG": {
|
||||||
"TITLE": "Portal Configurations",
|
"TITLE": "Portal Konfigurationer",
|
||||||
"ITEMS": {
|
"ITEMS": {
|
||||||
"NAME": "Navn",
|
"NAME": "Navn",
|
||||||
"DOMAIN": "Custom domain",
|
"DOMAIN": "Tilpasset domæne",
|
||||||
"SLUG": "Slug",
|
"SLUG": "Snegl",
|
||||||
"TITLE": "Portal title",
|
"TITLE": "Portal titel",
|
||||||
"THEME": "Theme color",
|
"THEME": "Tema farve",
|
||||||
"SUB_TEXT": "Portal sub text"
|
"SUB_TEXT": "Portal undertekst"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AVAILABLE_LOCALES": {
|
"AVAILABLE_LOCALES": {
|
||||||
"TITLE": "Available locales",
|
"TITLE": "Tilgængelige landestandarder",
|
||||||
"TABLE": {
|
"TABLE": {
|
||||||
"NAME": "Locale name",
|
"NAME": "Landestandard navn",
|
||||||
"CODE": "Locale code",
|
"CODE": "Landestandard kode",
|
||||||
"ARTICLE_COUNT": "No. of articles",
|
"ARTICLE_COUNT": "Antal varer",
|
||||||
"CATEGORIES": "No. of categories",
|
"CATEGORIES": "Antal kategorier",
|
||||||
"SWAP": "Swap",
|
"SWAP": "Byt",
|
||||||
"DELETE": "Slet",
|
"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": {
|
"ADD": {
|
||||||
"CREATE_FLOW": [
|
"CREATE_FLOW": [
|
||||||
{
|
{
|
||||||
"title": "Help center information",
|
"title": "Information om hjælpecenter",
|
||||||
"route": "new_portal_information",
|
"route": "new_portal_information",
|
||||||
"body": "Basic information about portal",
|
"body": "Grundlæggende oplysninger om portal",
|
||||||
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
|
"CREATE_BASIC_SETTING_BUTTON": "Opret grundlæggende portal indstillinger"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Help center customization",
|
"title": "Tilpasning af hjælpecenter",
|
||||||
"route": "portal_customization",
|
"route": "portal_tilpasning",
|
||||||
"body": "Customize portal",
|
"body": "Tilpas portal",
|
||||||
"UPDATE_PORTAL_BUTTON": "Update portal settings"
|
"UPDATE_PORTAL_BUTTON": "Opdater portalindstillinger"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Voila! 🎉",
|
"title": "Voila! 🎉",
|
||||||
"route": "portal_finish",
|
"route": "portal_finish",
|
||||||
"body": "You're all set!",
|
"body": "Du er klar!",
|
||||||
"FINISH": "Finish"
|
"FINISH": "Afslut"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CREATE_FLOW_PAGE": {
|
"CREATE_FLOW_PAGE": {
|
||||||
"BACK_BUTTON": "Tilbage",
|
"BACK_BUTTON": "Tilbage",
|
||||||
"BASIC_SETTINGS_PAGE": {
|
"BASIC_SETTINGS_PAGE": {
|
||||||
"HEADER": "Create Portal",
|
"HEADER": "Opret Portal",
|
||||||
"TITLE": "Help center information",
|
"TITLE": "Information om hjælpecenter",
|
||||||
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
|
"CREATE_BASIC_SETTING_BUTTON": "Opret grundlæggende portal indstillinger"
|
||||||
},
|
},
|
||||||
"CUSTOMIZATION_PAGE": {
|
"CUSTOMIZATION_PAGE": {
|
||||||
"HEADER": "Portal customisation",
|
"HEADER": "Tilpasning af portal",
|
||||||
"TITLE": "Help center customization",
|
"TITLE": "Tilpasning af hjælpecenter",
|
||||||
"UPDATE_PORTAL_BUTTON": "Update portal settings"
|
"UPDATE_PORTAL_BUTTON": "Opdater portalindstillinger"
|
||||||
},
|
},
|
||||||
"FINISH_PAGE": {
|
"FINISH_PAGE": {
|
||||||
"TITLE": "Voila!🎉 You're all set up!",
|
"TITLE": "Voila!🎉 Alt er sat op!",
|
||||||
"MESSAGE": "You can now see this created portal on your all portals page.",
|
"MESSAGE": "Du kan nu se denne oprettede portal på alle portaler siden.",
|
||||||
"FINISH": "Go to all portals page"
|
"FINISH": "Gå til alle portaler side"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LOGO": {
|
"LOGO": {
|
||||||
"LABEL": "Logo",
|
"LABEL": "Logo",
|
||||||
"UPLOAD_BUTTON": "Upload 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": {
|
"NAME": {
|
||||||
"LABEL": "Navn",
|
"LABEL": "Navn",
|
||||||
"PLACEHOLDER": "Portal name",
|
"PLACEHOLDER": "Portal navn",
|
||||||
"HELP_TEXT": "The name will be used in the public facing portal internally.",
|
"HELP_TEXT": "Navnet vil blive brugt i den offentlige vendende portal internt.",
|
||||||
"ERROR": "Name is required"
|
"ERROR": "Navn er påkrævet"
|
||||||
},
|
},
|
||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "Snegl",
|
||||||
"PLACEHOLDER": "Portal slug for urls",
|
"PLACEHOLDER": "Portal slug for webadresser",
|
||||||
|
"ERROR": "Slug er påkrævet"
|
||||||
"ERROR": "Slug is required"
|
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
"LABEL": "Custom Domain",
|
"LABEL": "Tilpasset Domæne",
|
||||||
"PLACEHOLDER": "Portal custom domain",
|
"PLACEHOLDER": "Portal brugerdefineret domæne",
|
||||||
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
|
"HELP_TEXT": "Tilføj kun Hvis du vil bruge et brugerdefineret domæne til dine portaler.",
|
||||||
"ERROR": "Custom Domain is required"
|
"ERROR": "Brugerdefineret domæne er påkrævet"
|
||||||
},
|
},
|
||||||
"HOME_PAGE_LINK": {
|
"HOME_PAGE_LINK": {
|
||||||
"LABEL": "Home Page Link",
|
"LABEL": "Link Til Hjemmeside",
|
||||||
"PLACEHOLDER": "Portal home page link",
|
"PLACEHOLDER": "Link til portalens hjemmeside",
|
||||||
"HELP_TEXT": "The link used to return from the portal to the home page.",
|
"HELP_TEXT": "Linket, der bruges til at vende tilbage fra portalen til hjemmesiden.",
|
||||||
"ERROR": "Home Page Link is required"
|
"ERROR": "Hjemmeside Link er påkrævet"
|
||||||
},
|
},
|
||||||
"THEME_COLOR": {
|
"THEME_COLOR": {
|
||||||
"LABEL": "Portal theme color",
|
"LABEL": "Portal tema farve",
|
||||||
"HELP_TEXT": "This color will show as the theme color for the portal."
|
"HELP_TEXT": "Denne farve vil blive vist som temafarven for portalen."
|
||||||
},
|
},
|
||||||
"PAGE_TITLE": {
|
"PAGE_TITLE": {
|
||||||
"LABEL": "Page Title",
|
"LABEL": "Side Titel",
|
||||||
"PLACEHOLDER": "Portal page title",
|
"PLACEHOLDER": "Portal side titel",
|
||||||
"HELP_TEXT": "The page title will be used in the public facing portal.",
|
"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": {
|
"HEADER_TEXT": {
|
||||||
"LABEL": "Header Text",
|
"LABEL": "Header Tekst",
|
||||||
"PLACEHOLDER": "Portal header text",
|
"PLACEHOLDER": "Portal header tekst",
|
||||||
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
|
"HELP_TEXT": "Portal header tekst vil blive brugt i den offentlige vender portal.",
|
||||||
"ERROR": "Portal header text is required"
|
"ERROR": "Portal header tekst er påkrævet"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
|
"SUCCESS_MESSAGE_FOR_BASIC": "Portal oprettet.",
|
||||||
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
|
"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": {
|
"TABLE": {
|
||||||
"LOADING_MESSAGE": "Loading articles...",
|
"LOADING_MESSAGE": "Indlæser artikler...",
|
||||||
"404": "No articles matches your search 🔍",
|
"404": "Ingen artikler matcher din søgning 🔍",
|
||||||
"NO_ARTICLES": "There are no available articles",
|
"NO_ARTICLES": "Der er ingen tilgængelige artikler",
|
||||||
"HEADERS": {
|
"HEADERS": {
|
||||||
"TITLE": "Title",
|
"TITLE": "Titel",
|
||||||
"CATEGORY": "Category",
|
"CATEGORY": "Kategori",
|
||||||
"READ_COUNT": "Read count",
|
"READ_COUNT": "Læse antal",
|
||||||
"STATUS": "Status",
|
"STATUS": "Status",
|
||||||
"LAST_EDITED": "Last edited"
|
"LAST_EDITED": "Sidst redigeret"
|
||||||
},
|
},
|
||||||
"COLUMNS": {
|
"COLUMNS": {
|
||||||
"BY": "by"
|
"BY": "af"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"EDIT_ARTICLE": {
|
"EDIT_ARTICLE": {
|
||||||
"LOADING": "Loading article...",
|
"LOADING": "Indlæser artikel...",
|
||||||
"TITLE_PLACEHOLDER": "Article title goes here",
|
"TITLE_PLACEHOLDER": "Artikel titel vises her",
|
||||||
"CONTENT_PLACEHOLDER": "Write your article here",
|
"CONTENT_PLACEHOLDER": "Skriv din artikel her",
|
||||||
"API": {
|
"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": {
|
"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": {
|
"SIDEBAR": {
|
||||||
"SEARCH": {
|
"SEARCH": {
|
||||||
"PLACEHOLDER": "Search for articles"
|
"PLACEHOLDER": "Søg efter artikler"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"CATEGORY": {
|
"CATEGORY": {
|
||||||
"ADD": {
|
"ADD": {
|
||||||
"TITLE": "Create a category",
|
"TITLE": "Opret en kategori",
|
||||||
"SUB_TITLE": "The category will be used in the public facing portal to categorize articles.",
|
"SUB_TITLE": "Kategorien vil blive brugt i den offentlige vender portal til at kategorisere artikler.",
|
||||||
"PORTAL": "Portal",
|
"PORTAL": "Portal",
|
||||||
"LOCALE": "Locale",
|
"LOCALE": "Landestandard",
|
||||||
"NAME": {
|
"NAME": {
|
||||||
"LABEL": "Navn",
|
"LABEL": "Navn",
|
||||||
"PLACEHOLDER": "Category name",
|
"PLACEHOLDER": "Kategori navn",
|
||||||
"HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.",
|
"HELP_TEXT": "Kategorinavnet vil blive brugt i den offentlige vendende portal til at kategorisere artikler.",
|
||||||
"ERROR": "Name is required"
|
"ERROR": "Navn er påkrævet"
|
||||||
},
|
},
|
||||||
"SLUG": {
|
"SLUG": {
|
||||||
"LABEL": "Slug",
|
"LABEL": "Snegl",
|
||||||
"PLACEHOLDER": "Category slug for urls",
|
"PLACEHOLDER": "Kategori slug for webls",
|
||||||
"HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug",
|
"HELP_TEXT": "app.chatwoot.com/hc/my-portal/da-DK/categories/my-slug",
|
||||||
"ERROR": "Slug is required"
|
"ERROR": "Slug er påkrævet"
|
||||||
},
|
},
|
||||||
"DESCRIPTION": {
|
"DESCRIPTION": {
|
||||||
"LABEL": "Beskrivelse",
|
"LABEL": "Beskrivelse",
|
||||||
"PLACEHOLDER": "Give a short description about the category.",
|
"PLACEHOLDER": "Giv en kort beskrivelse af kategorien.",
|
||||||
"ERROR": "Description is required"
|
"ERROR": "Beskrivelse er påkrævet"
|
||||||
},
|
},
|
||||||
"BUTTONS": {
|
"BUTTONS": {
|
||||||
"CREATE": "Create category",
|
"CREATE": "Opret kategori",
|
||||||
"CANCEL": "Annuller"
|
"CANCEL": "Annuller"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Category created successfully",
|
"SUCCESS_MESSAGE": "Kategori oprettet",
|
||||||
"ERROR_MESSAGE": "Unable to create category"
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,8 +30,8 @@
|
|||||||
"ADD": {
|
"ADD": {
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "Indbakke Navn",
|
"LABEL": "Indbakke Navn",
|
||||||
"PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)",
|
"PLACEHOLDER": "Indtast dit indbakke navn (f. eks. Acme Inc)",
|
||||||
"ERROR": "Please enter a valid inbox name"
|
"ERROR": "Angiv et gyldigt indbakke navn"
|
||||||
},
|
},
|
||||||
"WEBSITE_NAME": {
|
"WEBSITE_NAME": {
|
||||||
"LABEL": "Websted Navn",
|
"LABEL": "Websted Navn",
|
||||||
@ -48,9 +48,9 @@
|
|||||||
},
|
},
|
||||||
"TWITTER": {
|
"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' ",
|
"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": {
|
"TWEETS": {
|
||||||
"ENABLE": "Create conversations from mentioned Tweets"
|
"ENABLE": "Opret samtaler fra nævnte Tweets"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WEBSITE_CHANNEL": {
|
"WEBSITE_CHANNEL": {
|
||||||
@ -62,7 +62,7 @@
|
|||||||
},
|
},
|
||||||
"CHANNEL_WEBHOOK_URL": {
|
"CHANNEL_WEBHOOK_URL": {
|
||||||
"LABEL": "Webhook URL",
|
"LABEL": "Webhook URL",
|
||||||
"PLACEHOLDER": "Enter your Webhook URL",
|
"PLACEHOLDER": "Indtast din Webhook URL",
|
||||||
"ERROR": "Angiv en gyldig URL"
|
"ERROR": "Angiv en gyldig URL"
|
||||||
},
|
},
|
||||||
"CHANNEL_DOMAIN": {
|
"CHANNEL_DOMAIN": {
|
||||||
@ -83,7 +83,7 @@
|
|||||||
},
|
},
|
||||||
"CHANNEL_GREETING_TOGGLE": {
|
"CHANNEL_GREETING_TOGGLE": {
|
||||||
"LABEL": "Aktivér kanal start hilsen",
|
"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",
|
"ENABLED": "Aktiveret",
|
||||||
"DISABLED": "Deaktiveret"
|
"DISABLED": "Deaktiveret"
|
||||||
},
|
},
|
||||||
@ -100,22 +100,22 @@
|
|||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Opret indbakke",
|
"SUBMIT_BUTTON": "Opret indbakke",
|
||||||
"API": {
|
"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": {
|
"TWILIO": {
|
||||||
"TITLE": "Twilio SMS/WhatsApp Channel",
|
"TITLE": "Twilio SMS/Whatsapp Kanal",
|
||||||
"DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.",
|
"DESC": "Integrer Twilio og start med at supportere dine kunder via SMS eller Whatsapp.",
|
||||||
"ACCOUNT_SID": {
|
"ACCOUNT_SID": {
|
||||||
"LABEL": "Konto SID",
|
"LABEL": "Konto SID",
|
||||||
"PLACEHOLDER": "Indtast venligst din Twilio konto SID",
|
"PLACEHOLDER": "Indtast venligst din Twilio konto SID",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"MESSAGING_SERVICE_SID": {
|
"MESSAGING_SERVICE_SID": {
|
||||||
"LABEL": "Messaging Service SID",
|
"LABEL": "SID For Beskedtjeneste",
|
||||||
"PLACEHOLDER": "Please enter your Twilio Messaging Service SID",
|
"PLACEHOLDER": "Indtast venligst din Twilio Messaging Service SID",
|
||||||
"ERROR": "Dette felt er påkrævet",
|
"ERROR": "Dette felt er påkrævet",
|
||||||
"USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service"
|
"USE_MESSAGING_SERVICE": "Brug en Twilio-meddelelsestjeneste"
|
||||||
},
|
},
|
||||||
"CHANNEL_TYPE": {
|
"CHANNEL_TYPE": {
|
||||||
"LABEL": "Kanaltype",
|
"LABEL": "Kanaltype",
|
||||||
@ -128,7 +128,7 @@
|
|||||||
},
|
},
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "Indbakke Navn",
|
"LABEL": "Indbakke Navn",
|
||||||
"PLACEHOLDER": "Please enter a inbox name",
|
"PLACEHOLDER": "Indtast venligst et indbakke navn",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
@ -146,40 +146,40 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"SMS": {
|
"SMS": {
|
||||||
"TITLE": "SMS Channel",
|
"TITLE": "SMS Kanal",
|
||||||
"DESC": "Start supporting your customers via SMS.",
|
"DESC": "Begynd at støtte dine kunder via SMS.",
|
||||||
"PROVIDERS": {
|
"PROVIDERS": {
|
||||||
"LABEL": "API Provider",
|
"LABEL": "API Provider",
|
||||||
"TWILIO": "Twilio",
|
"TWILIO": "Twilio",
|
||||||
"BANDWIDTH": "Bandwidth"
|
"BANDWIDTH": "Båndbredde"
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE": "We were not able to save the SMS channel"
|
"ERROR_MESSAGE": "Vi kunne ikke gemme SMS-kanalen"
|
||||||
},
|
},
|
||||||
"BANDWIDTH": {
|
"BANDWIDTH": {
|
||||||
"ACCOUNT_ID": {
|
"ACCOUNT_ID": {
|
||||||
"LABEL": "Account ID",
|
"LABEL": "Konto SID",
|
||||||
"PLACEHOLDER": "Please enter your Bandwidth Account ID",
|
"PLACEHOLDER": "Indtast venligst dit Båndbredde Konto ID",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
"LABEL": "API Key",
|
"LABEL": "API Nøgle",
|
||||||
"PLACEHOLDER": "Please enter your Bandwith API Key",
|
"PLACEHOLDER": "Indtast venligst dit Båndbredde Konto ID",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"API_SECRET": {
|
"API_SECRET": {
|
||||||
"LABEL": "API Secret",
|
"LABEL": "API Hemmelighed",
|
||||||
"PLACEHOLDER": "Please enter your Bandwith API Secret",
|
"PLACEHOLDER": "Indtast venligst dit Bandwith API Secret",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"APPLICATION_ID": {
|
"APPLICATION_ID": {
|
||||||
"LABEL": "Application ID",
|
"LABEL": "Applikations ID",
|
||||||
"PLACEHOLDER": "Please enter your Bandwidth Application ID",
|
"PLACEHOLDER": "Indtast venligst dit Båndbredde-program-id",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"INBOX_NAME": {
|
"INBOX_NAME": {
|
||||||
"LABEL": "Indbakke Navn",
|
"LABEL": "Indbakke Navn",
|
||||||
"PLACEHOLDER": "Please enter a inbox name",
|
"PLACEHOLDER": "Indtast venligst et indbakke navn",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
@ -187,28 +187,28 @@
|
|||||||
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
|
||||||
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Bandwidth Channel",
|
"SUBMIT_BUTTON": "Opret Båndbredde Kanal",
|
||||||
"API": {
|
"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": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"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": {
|
"WHATSAPP": {
|
||||||
"TITLE": "WhatsApp Channel",
|
"TITLE": "WhatsApp Kanal",
|
||||||
"DESC": "Start supporting your customers via WhatsApp.",
|
"DESC": "Begynd at støtte dine kunder via WhatsApp.",
|
||||||
"PROVIDERS": {
|
"PROVIDERS": {
|
||||||
"LABEL": "API Provider",
|
"LABEL": "API Provider",
|
||||||
"TWILIO": "Twilio",
|
"TWILIO": "Twilio",
|
||||||
"WHATSAPP_CLOUD": "WhatsApp Cloud",
|
"WHATSAPP_CLOUD": "WhatsApp Sky",
|
||||||
"360_DIALOG": "360Dialog"
|
"360_DIALOG": "360Dialog"
|
||||||
},
|
},
|
||||||
"INBOX_NAME": {
|
"INBOX_NAME": {
|
||||||
"LABEL": "Indbakke Navn",
|
"LABEL": "Indbakke Navn",
|
||||||
"PLACEHOLDER": "Please enter an inbox name",
|
"PLACEHOLDER": "Indtast venligst et indbakkens navn",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER": {
|
"PHONE_NUMBER": {
|
||||||
@ -217,33 +217,33 @@
|
|||||||
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
|
||||||
},
|
},
|
||||||
"PHONE_NUMBER_ID": {
|
"PHONE_NUMBER_ID": {
|
||||||
"LABEL": "Phone number ID",
|
"LABEL": "Telefonnummer ID",
|
||||||
"PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.",
|
"PLACEHOLDER": "Indtast venligst telefonnummer ID indhentet fra Facebook udviklerdashboard.",
|
||||||
"ERROR": "Please enter a valid value."
|
"ERROR": "Angiv en gyldig værdi."
|
||||||
},
|
},
|
||||||
"BUSINESS_ACCOUNT_ID": {
|
"BUSINESS_ACCOUNT_ID": {
|
||||||
"LABEL": "Business Account ID",
|
"LABEL": "Business Konto ID",
|
||||||
"PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.",
|
"PLACEHOLDER": "Indtast venligst Business Account ID opnået fra Facebook udvikler dashboard.",
|
||||||
"ERROR": "Please enter a valid value."
|
"ERROR": "Angiv en gyldig værdi."
|
||||||
},
|
},
|
||||||
"WEBHOOK_VERIFY_TOKEN": {
|
"WEBHOOK_VERIFY_TOKEN": {
|
||||||
"LABEL": "Webhook Verify Token",
|
"LABEL": "Webhook Verificér Token",
|
||||||
"PLACEHOLDER": "Enter a verify token which you want to configure for facebook webhooks.",
|
"PLACEHOLDER": "Indtast en verificeringstoken, som du vil konfigurere for facebook webhooks.",
|
||||||
"ERROR": "Please enter a valid value."
|
"ERROR": "Angiv en gyldig værdi."
|
||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
"LABEL": "API key",
|
"LABEL": "API Nøgle",
|
||||||
"SUBTITLE": "Configure the WhatsApp API key.",
|
"SUBTITLE": "Konfigurer WhatsApp API-nøglen.",
|
||||||
"PLACEHOLDER": "API key",
|
"PLACEHOLDER": "API Nøgle",
|
||||||
"ERROR": "Please enter a valid value."
|
"ERROR": "Angiv en gyldig værdi."
|
||||||
},
|
},
|
||||||
"API_CALLBACK": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"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": {
|
"API": {
|
||||||
"ERROR_MESSAGE": "We were not able to save the WhatsApp channel"
|
"ERROR_MESSAGE": "Vi kunne ikke gemme WhatsApp-kanalen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"API_CHANNEL": {
|
"API_CHANNEL": {
|
||||||
@ -284,56 +284,56 @@
|
|||||||
"FINISH_MESSAGE": "Begynd at videresende dine e-mails til følgende e-mailadresse."
|
"FINISH_MESSAGE": "Begynd at videresende dine e-mails til følgende e-mailadresse."
|
||||||
},
|
},
|
||||||
"LINE_CHANNEL": {
|
"LINE_CHANNEL": {
|
||||||
"TITLE": "LINE Channel",
|
"TITLE": "LINE Kanal",
|
||||||
"DESC": "Integrate with LINE channel and start supporting your customers.",
|
"DESC": "Integrér med LINE-kanalen og begynd at støtte dine kunder.",
|
||||||
"CHANNEL_NAME": {
|
"CHANNEL_NAME": {
|
||||||
"LABEL": "Kanalnavn",
|
"LABEL": "Kanalnavn",
|
||||||
"PLACEHOLDER": "Indtast et kanalnavn",
|
"PLACEHOLDER": "Indtast et kanalnavn",
|
||||||
"ERROR": "Dette felt er påkrævet"
|
"ERROR": "Dette felt er påkrævet"
|
||||||
},
|
},
|
||||||
"LINE_CHANNEL_ID": {
|
"LINE_CHANNEL_ID": {
|
||||||
"LABEL": "LINE Channel ID",
|
"LABEL": "LINE Kanal ID",
|
||||||
"PLACEHOLDER": "LINE Channel ID"
|
"PLACEHOLDER": "LINE Kanal ID"
|
||||||
},
|
},
|
||||||
"LINE_CHANNEL_SECRET": {
|
"LINE_CHANNEL_SECRET": {
|
||||||
"LABEL": "LINE Channel Secret",
|
"LABEL": "LINE Kanal Hemmelighed",
|
||||||
"PLACEHOLDER": "LINE Channel Secret"
|
"PLACEHOLDER": "LINE Kanal Hemmelighed"
|
||||||
},
|
},
|
||||||
"LINE_CHANNEL_TOKEN": {
|
"LINE_CHANNEL_TOKEN": {
|
||||||
"LABEL": "LINE Channel Token",
|
"LABEL": "LINE Kanal Token",
|
||||||
"PLACEHOLDER": "LINE Channel Token"
|
"PLACEHOLDER": "LINE Kanal Token"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create LINE Channel",
|
"SUBMIT_BUTTON": "Opret LINE Kanal",
|
||||||
"API": {
|
"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": {
|
"API_CALLBACK": {
|
||||||
"TITLE": "Callback URL",
|
"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": {
|
"TELEGRAM_CHANNEL": {
|
||||||
"TITLE": "Telegram Channel",
|
"TITLE": "Telegram Kanal",
|
||||||
"DESC": "Integrate with Telegram channel and start supporting your customers.",
|
"DESC": "Integrér med Telegram-kanalen og begynd at støtte dine kunder.",
|
||||||
"BOT_TOKEN": {
|
"BOT_TOKEN": {
|
||||||
"LABEL": "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"
|
"PLACEHOLDER": "Bot Token"
|
||||||
},
|
},
|
||||||
"SUBMIT_BUTTON": "Create Telegram Channel",
|
"SUBMIT_BUTTON": "Opret Telegram Kanal",
|
||||||
"API": {
|
"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": {
|
"AUTH": {
|
||||||
"TITLE": "Choose a channel",
|
"TITLE": "Vælg en kanal",
|
||||||
"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 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": {
|
"AGENTS": {
|
||||||
"TITLE": "Agenter",
|
"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. <br> <b>PS:</b> 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.",
|
"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. <br> <b>PS:</b> 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",
|
"VALIDATION_ERROR": "Tilføj mindst én agent til din nye indbakke",
|
||||||
"PICK_AGENTS": "Pick agents for the inbox"
|
"PICK_AGENTS": "Vælg agenter for indbakken"
|
||||||
},
|
},
|
||||||
"DETAILS": {
|
"DETAILS": {
|
||||||
"TITLE": "Indbakke Detaljer",
|
"TITLE": "Indbakke Detaljer",
|
||||||
@ -359,7 +359,7 @@
|
|||||||
"TITLE": "Din indbakke er klar!",
|
"TITLE": "Din indbakke er klar!",
|
||||||
"MESSAGE": "Du kan nu engagere dig med dine kunder gennem din nye kanal. Glædelig supportering ",
|
"MESSAGE": "Du kan nu engagere dig med dine kunder gennem din nye kanal. Glædelig supportering ",
|
||||||
"BUTTON_TEXT": "Tag mig med dertil",
|
"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."
|
"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",
|
"REAUTH": "Genautorisér",
|
||||||
@ -368,7 +368,7 @@
|
|||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Indbakkeindstillinger opdateret",
|
"SUCCESS_MESSAGE": "Indbakkeindstillinger opdateret",
|
||||||
"AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatisk tildeling 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": {
|
"EMAIL_COLLECT_BOX": {
|
||||||
"ENABLED": "Aktiveret",
|
"ENABLED": "Aktiveret",
|
||||||
@ -387,33 +387,33 @@
|
|||||||
"DISABLED": "Deaktiveret"
|
"DISABLED": "Deaktiveret"
|
||||||
},
|
},
|
||||||
"ENABLE_HMAC": {
|
"ENABLE_HMAC": {
|
||||||
"LABEL": "Enable"
|
"LABEL": "Aktiver"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"BUTTON_TEXT": "Slet",
|
"BUTTON_TEXT": "Slet",
|
||||||
"AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar",
|
"AVATAR_DELETE_BUTTON_TEXT": "Slet Avatar",
|
||||||
"CONFIRM": {
|
"CONFIRM": {
|
||||||
"TITLE": "Bekræft Sletning",
|
"TITLE": "Bekræft Sletning",
|
||||||
"MESSAGE": "Er du sikker på du vil slette ",
|
"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 ",
|
"YES": "Ja, Slet ",
|
||||||
"NO": "Nej, Behold "
|
"NO": "Nej, Behold "
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Indbakken blev slettet",
|
"SUCCESS_MESSAGE": "Indbakken blev slettet",
|
||||||
"ERROR_MESSAGE": "Kunne ikke slette indbakken. Prøv igen senere.",
|
"ERROR_MESSAGE": "Kunne ikke slette indbakken. Prøv igen senere.",
|
||||||
"AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully",
|
"AVATAR_SUCCESS_MESSAGE": "Indbakke avatar slettet",
|
||||||
"AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later."
|
"AVATAR_ERROR_MESSAGE": "Kunne ikke slette indbakken avatar. Prøv igen senere."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"TABS": {
|
"TABS": {
|
||||||
"SETTINGS": "Indstillinger",
|
"SETTINGS": "Indstillinger",
|
||||||
"COLLABORATORS": "Samarbejdspartnere",
|
"COLLABORATORS": "Samarbejdspartnere",
|
||||||
"CONFIGURATION": "Konfiguration",
|
"CONFIGURATION": "Konfiguration",
|
||||||
"CAMPAIGN": "Campaigns",
|
"CAMPAIGN": "Kampagner",
|
||||||
"PRE_CHAT_FORM": "Pre Chat Form",
|
"PRE_CHAT_FORM": "Pre Chat Form",
|
||||||
"BUSINESS_HOURS": "Business Hours",
|
"BUSINESS_HOURS": "Forretningstider",
|
||||||
"WIDGET_BUILDER": "Widget Builder"
|
"WIDGET_BUILDER": "Widget Builder"
|
||||||
},
|
},
|
||||||
"SETTINGS": "Indstillinger",
|
"SETTINGS": "Indstillinger",
|
||||||
@ -421,43 +421,43 @@
|
|||||||
"LABEL": "Funktioner",
|
"LABEL": "Funktioner",
|
||||||
"DISPLAY_FILE_PICKER": "Vis filvælger på widget'en",
|
"DISPLAY_FILE_PICKER": "Vis filvælger på widget'en",
|
||||||
"DISPLAY_EMOJI_PICKER": "Vis emoji-væ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": {
|
"SETTINGS_POPUP": {
|
||||||
"MESSENGER_HEADING": "Messenger- Script",
|
"MESSENGER_HEADING": "Messenger- Script",
|
||||||
"MESSENGER_SUB_HEAD": "Placer denne knap inde i din body tag",
|
"MESSENGER_SUB_HEAD": "Placer denne knap inde i din body tag",
|
||||||
"INBOX_AGENTS": "Agenter",
|
"INBOX_AGENTS": "Agenter",
|
||||||
"INBOX_AGENTS_SUB_TEXT": "Tilføj eller fjern agenter fra denne indbakke",
|
"INBOX_AGENTS_SUB_TEXT": "Tilføj eller fjern agenter fra denne indbakke",
|
||||||
"AGENT_ASSIGNMENT": "Conversation Assignment",
|
"AGENT_ASSIGNMENT": "Samtale Tildeling",
|
||||||
"AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
|
"AGENT_ASSIGNMENT_SUB_TEXT": "Opdater indstillinger for samtale",
|
||||||
"UPDATE": "Opdater",
|
"UPDATE": "Opdater",
|
||||||
"ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
|
"ENABLE_EMAIL_COLLECT_BOX": "Aktiver boks til indsamling af e-mail",
|
||||||
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",
|
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Aktiver eller deaktivér opsamlingsboks for e-mail ved ny samtale",
|
||||||
"AUTO_ASSIGNMENT": "Aktiver automatisk tildeling",
|
"AUTO_ASSIGNMENT": "Aktiver automatisk tildeling",
|
||||||
"ENABLE_CSAT": "Enable CSAT",
|
"ENABLE_CSAT": "Aktiver CSAT",
|
||||||
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
"ENABLE_CSAT_SUB_TEXT": "Aktiver/deaktivér CSAT(Customer satisfaction) undersøgelse efter at have løst en samtale",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email",
|
"ENABLE_CONTINUITY_VIA_EMAIL": "Aktivér konversationskontinuitet via e-mail",
|
||||||
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.",
|
"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_TITLE": "Indbakke Indstillinger",
|
||||||
"INBOX_UPDATE_SUB_TEXT": "Opdater dine indbakkeindstillinger",
|
"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.",
|
"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_VERIFICATION": "Bruger Identitetsvalidering",
|
||||||
"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": "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": "Enforce User Identity Validation",
|
"HMAC_MANDATORY_VERIFICATION": "Gennemtving Validering Af Bruger Identitet",
|
||||||
"HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.",
|
"HMAC_MANDATORY_DESCRIPTION": "Hvis aktiveret, vil forespørgsler der mangler 'identifier_hash' blive afvist.",
|
||||||
"INBOX_IDENTIFIER": "Inbox Identifier",
|
"INBOX_IDENTIFIER": "Identifikator For Indbakke",
|
||||||
"INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.",
|
"INBOX_IDENTIFIER_SUB_TEXT": "Brug den `inbox_identifier` token vist her til godkendelse dine API-klienter.",
|
||||||
"FORWARD_EMAIL_TITLE": "Forward to Email",
|
"FORWARD_EMAIL_TITLE": "Videresend til e-mail",
|
||||||
"FORWARD_EMAIL_SUB_TEXT": "Begynd at videresende dine e-mails til følgende e-mailadresse.",
|
"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": "Tillad beskeder efter samtalen løst",
|
||||||
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Allow the end-users to send messages even after the conversation is resolved.",
|
"ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Tillad slutbrugere at sende beskeder, selv efter samtalen er løst.",
|
||||||
"WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.",
|
"WHATSAPP_SECTION_SUBHEADER": "Denne API-nøgle bruges til integration med WhatsApp API'erne.",
|
||||||
"WHATSAPP_SECTION_TITLE": "API Key"
|
"WHATSAPP_SECTION_TITLE": "API Nøgle"
|
||||||
},
|
},
|
||||||
"AUTO_ASSIGNMENT": {
|
"AUTO_ASSIGNMENT": {
|
||||||
"MAX_ASSIGNMENT_LIMIT": "Auto assignment limit",
|
"MAX_ASSIGNMENT_LIMIT": "Grænse for automatisk tildeling",
|
||||||
"MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Please enter a value greater than 0",
|
"MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Indtast en værdi større end 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_SUB_TEXT": "Begræns det maksimale antal samtaler fra denne indbakke, der kan være auto tildelt en agent"
|
||||||
},
|
},
|
||||||
"FACEBOOK_REAUTHORIZE": {
|
"FACEBOOK_REAUTHORIZE": {
|
||||||
"TITLE": "Genautorisér",
|
"TITLE": "Genautorisér",
|
||||||
@ -466,64 +466,64 @@
|
|||||||
"MESSAGE_ERROR": "Der opstod en fejl, prøv igen"
|
"MESSAGE_ERROR": "Der opstod en fejl, prøv igen"
|
||||||
},
|
},
|
||||||
"PRE_CHAT_FORM": {
|
"PRE_CHAT_FORM": {
|
||||||
"DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.",
|
"DESCRIPTION": "Forud chat formularer gør det muligt for dig at fange brugeroplysninger, før de starter samtale med dig.",
|
||||||
"SET_FIELDS": "Pre chat form fields",
|
"SET_FIELDS": "Tidligere chatformularfelter",
|
||||||
"SET_FIELDS_HEADER": {
|
"SET_FIELDS_HEADER": {
|
||||||
"FIELDS": "Fields",
|
"FIELDS": "Felter",
|
||||||
"LABEL": "Label",
|
"LABEL": "Etiketter",
|
||||||
"PLACE_HOLDER": "Placeholder",
|
"PLACE_HOLDER": "Pladsholder",
|
||||||
"KEY": "Key",
|
"KEY": "Nøgle",
|
||||||
"TYPE": "Type",
|
"TYPE": "Type",
|
||||||
"REQUIRED": "Required"
|
"REQUIRED": "Påkrævet"
|
||||||
},
|
},
|
||||||
"ENABLE": {
|
"ENABLE": {
|
||||||
"LABEL": "Enable pre chat form",
|
"LABEL": "Aktiver præ-chat formular",
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"ENABLED": "Yes",
|
"ENABLED": "Ja",
|
||||||
"DISABLED": "No"
|
"DISABLED": "Nej"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PRE_CHAT_MESSAGE": {
|
"PRE_CHAT_MESSAGE": {
|
||||||
"LABEL": "Pre chat message",
|
"LABEL": "Tidligere chatbesked",
|
||||||
"PLACEHOLDER": "This message would be visible to the users along with the form"
|
"PLACEHOLDER": "Denne meddelelse vil være synlig for brugerne sammen med formularen"
|
||||||
},
|
},
|
||||||
"REQUIRE_EMAIL": {
|
"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": {
|
"BUSINESS_HOURS": {
|
||||||
"TITLE": "Set your availability",
|
"TITLE": "Indstil din tilgængelighed",
|
||||||
"SUBTITLE": "Set your availability on your livechat widget",
|
"SUBTITLE": "Indstil din tilgængelighed på din livechat widget",
|
||||||
"WEEKLY_TITLE": "Set your weekly hours",
|
"WEEKLY_TITLE": "Indstil dine ugentlige timer",
|
||||||
"TIMEZONE_LABEL": "Select timezone",
|
"TIMEZONE_LABEL": "Vælg tidszone",
|
||||||
"UPDATE": "Update business hours settings",
|
"UPDATE": "Opdater indstillinger for åbningstider",
|
||||||
"TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
|
"TOGGLE_AVAILABILITY": "Aktiver forretningstilgængelighed for denne indbakke",
|
||||||
"UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors",
|
"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.",
|
"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": {
|
"DAY": {
|
||||||
"ENABLE": "Enable availability for this day",
|
"ENABLE": "Aktiver tilgængelighed for denne dag",
|
||||||
"UNAVAILABLE": "Unavailable",
|
"UNAVAILABLE": "Unavailable",
|
||||||
"HOURS": "hours",
|
"HOURS": "timer",
|
||||||
"VALIDATION_ERROR": "Starting time should be before closing time.",
|
"VALIDATION_ERROR": "Starttidspunkt bør være før lukketid.",
|
||||||
"CHOOSE": "Choose"
|
"CHOOSE": "Vælg"
|
||||||
},
|
},
|
||||||
"ALL_DAY": "All-Day"
|
"ALL_DAY": "All-Day"
|
||||||
},
|
},
|
||||||
"IMAP": {
|
"IMAP": {
|
||||||
"TITLE": "IMAP",
|
"TITLE": "IMAP",
|
||||||
"SUBTITLE": "Set your IMAP details",
|
"SUBTITLE": "Indstil dine IMAP-oplysninger",
|
||||||
"NOTE_TEXT": "To enable SMTP, please configure IMAP.",
|
"NOTE_TEXT": "For at aktivere SMTP skal du konfigurere IMAP.",
|
||||||
"UPDATE": "Update IMAP settings",
|
"UPDATE": "Opdater indstillinger",
|
||||||
"TOGGLE_AVAILABILITY": "Enable IMAP configuration for this inbox",
|
"TOGGLE_AVAILABILITY": "Aktiver IMAP- konfiguration for denne indbakke",
|
||||||
"TOGGLE_HELP": "Enabling IMAP will help the user to recieve email",
|
"TOGGLE_HELP": "Aktivering af IMAP, vil hjælpe brugeren med at modtage e-mail",
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"SUCCESS_MESSAGE": "IMAP settings updated successfully",
|
"SUCCESS_MESSAGE": "Indbakkeindstillinger opdateret",
|
||||||
"ERROR_MESSAGE": "Unable to update IMAP settings"
|
"ERROR_MESSAGE": "Kunne ikke opdatere IMAP-indstillinger"
|
||||||
},
|
},
|
||||||
"ADDRESS": {
|
"ADDRESS": {
|
||||||
"LABEL": "Address",
|
"LABEL": "Ip Adresse",
|
||||||
"PLACE_HOLDER": "Address (Eg: imap.gmail.com)"
|
"PLACE_HOLDER": "Adresse (f.eks.: imap.gmail.com)"
|
||||||
},
|
},
|
||||||
"PORT": {
|
"PORT": {
|
||||||
"LABEL": "Port",
|
"LABEL": "Port",
|
||||||
@ -537,21 +537,21 @@
|
|||||||
"LABEL": "Adgangskode",
|
"LABEL": "Adgangskode",
|
||||||
"PLACE_HOLDER": "Adgangskode"
|
"PLACE_HOLDER": "Adgangskode"
|
||||||
},
|
},
|
||||||
"ENABLE_SSL": "Enable SSL"
|
"ENABLE_SSL": "Aktiver SSL"
|
||||||
},
|
},
|
||||||
"SMTP": {
|
"SMTP": {
|
||||||
"TITLE": "SMTP",
|
"TITLE": "Smtp",
|
||||||
"SUBTITLE": "Set your SMTP details",
|
"SUBTITLE": "Indstil dine IMAP-oplysninger",
|
||||||
"UPDATE": "Update SMTP settings",
|
"UPDATE": "Opdater SMTP indstillinger",
|
||||||
"TOGGLE_AVAILABILITY": "Enable SMTP configuration for this inbox",
|
"TOGGLE_AVAILABILITY": "Aktiver SMTP konfiguration for denne indbakke",
|
||||||
"TOGGLE_HELP": "Enabling SMTP will help the user to send email",
|
"TOGGLE_HELP": "Aktivering af SMTP vil hjælpe brugeren med at sende e-mail",
|
||||||
"EDIT": {
|
"EDIT": {
|
||||||
"SUCCESS_MESSAGE": "SMTP settings updated successfully",
|
"SUCCESS_MESSAGE": "SMTP indstillinger opdateret",
|
||||||
"ERROR_MESSAGE": "Unable to update SMTP settings"
|
"ERROR_MESSAGE": "Kan ikke opdatere SMTP indstillinger"
|
||||||
},
|
},
|
||||||
"ADDRESS": {
|
"ADDRESS": {
|
||||||
"LABEL": "Address",
|
"LABEL": "Ip Adresse",
|
||||||
"PLACE_HOLDER": "Address (Eg: smtp.gmail.com)"
|
"PLACE_HOLDER": "Adresse (f.eks.: smtp.gmail.com)"
|
||||||
},
|
},
|
||||||
"PORT": {
|
"PORT": {
|
||||||
"LABEL": "Port",
|
"LABEL": "Port",
|
||||||
@ -566,23 +566,23 @@
|
|||||||
"PLACE_HOLDER": "Adgangskode"
|
"PLACE_HOLDER": "Adgangskode"
|
||||||
},
|
},
|
||||||
"DOMAIN": {
|
"DOMAIN": {
|
||||||
"LABEL": "Domain",
|
"LABEL": "Domæne",
|
||||||
"PLACE_HOLDER": "Domain"
|
"PLACE_HOLDER": "Domæne"
|
||||||
},
|
},
|
||||||
"ENCRYPTION": "Encryption",
|
"ENCRYPTION": "Kryptering",
|
||||||
"SSL_TLS": "SSL/TLS",
|
"SSL_TLS": "SSL/TLS",
|
||||||
"START_TLS": "STARTTLS",
|
"START_TLS": "STARTTLS",
|
||||||
"OPEN_SSL_VERIFY_MODE": "Open SSL Verify Mode",
|
"OPEN_SSL_VERIFY_MODE": "Åbn SSL-bekræftelsestilstand",
|
||||||
"AUTH_MECHANISM": "Authentication"
|
"AUTH_MECHANISM": "Godkendelse"
|
||||||
},
|
},
|
||||||
"NOTE": "Note: ",
|
"NOTE": "Bemærk: ",
|
||||||
"WIDGET_BUILDER": {
|
"WIDGET_BUILDER": {
|
||||||
"WIDGET_OPTIONS": {
|
"WIDGET_OPTIONS": {
|
||||||
"AVATAR": {
|
"AVATAR": {
|
||||||
"LABEL": "Website Avatar",
|
"LABEL": "Websted Avatar",
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Avatar deleted successfully",
|
"SUCCESS_MESSAGE": "Avatar slettet",
|
||||||
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
"ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -594,14 +594,14 @@
|
|||||||
},
|
},
|
||||||
"WELCOME_HEADING": {
|
"WELCOME_HEADING": {
|
||||||
"LABEL": "Velkomstoverskrift",
|
"LABEL": "Velkomstoverskrift",
|
||||||
"PLACE_HOLDER": "Hi there!"
|
"PLACE_HOLDER": "Hej der!"
|
||||||
},
|
},
|
||||||
"WELCOME_TAGLINE": {
|
"WELCOME_TAGLINE": {
|
||||||
"LABEL": "Velkomst 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."
|
"PLACE_HOLDER": "Vi gør det nemt at komme i kontakt med os. Spørg os om noget, eller del din feedback."
|
||||||
},
|
},
|
||||||
"REPLY_TIME": {
|
"REPLY_TIME": {
|
||||||
"LABEL": "Reply Time",
|
"LABEL": "Svar Tid",
|
||||||
"IN_A_FEW_MINUTES": "På nogle få minutter",
|
"IN_A_FEW_MINUTES": "På nogle få minutter",
|
||||||
"IN_A_FEW_HOURS": "Om et par timer",
|
"IN_A_FEW_HOURS": "Om et par timer",
|
||||||
"IN_A_DAY": "På en dag"
|
"IN_A_DAY": "På en dag"
|
||||||
@ -611,31 +611,31 @@
|
|||||||
"WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type",
|
"WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type",
|
||||||
"WIDGET_BUBBLE_LAUNCHER_TITLE": {
|
"WIDGET_BUBBLE_LAUNCHER_TITLE": {
|
||||||
"DEFAULT": "Chat med os",
|
"DEFAULT": "Chat med os",
|
||||||
"LABEL": "Widget Bubble Launcher Title",
|
"LABEL": "Widget Bubble Launcher Titel",
|
||||||
"PLACE_HOLDER": "Chat med os"
|
"PLACE_HOLDER": "Chat med os"
|
||||||
},
|
},
|
||||||
"UPDATE": {
|
"UPDATE": {
|
||||||
"BUTTON_TEXT": "Update Widget Settings",
|
"BUTTON_TEXT": "Opdater Widget Indstillinger",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Widget settings updated successfully",
|
"SUCCESS_MESSAGE": "Widget-indstillinger opdateret",
|
||||||
"ERROR_MESSAGE": "Unable to update widget settings"
|
"ERROR_MESSAGE": "Kan ikke opdatere widget-indstillinger"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WIDGET_VIEW_OPTION": {
|
"WIDGET_VIEW_OPTION": {
|
||||||
"PREVIEW": "Preview",
|
"PREVIEW": "Eksempelvisning",
|
||||||
"SCRIPT": "Script"
|
"SCRIPT": "Script"
|
||||||
},
|
},
|
||||||
"WIDGET_BUBBLE_POSITION": {
|
"WIDGET_BUBBLE_POSITION": {
|
||||||
"LEFT": "Left",
|
"LEFT": "Venstre",
|
||||||
"RIGHT": "Right"
|
"RIGHT": "Højre"
|
||||||
},
|
},
|
||||||
"WIDGET_BUBBLE_TYPE": {
|
"WIDGET_BUBBLE_TYPE": {
|
||||||
"STANDARD": "Standard",
|
"STANDARD": "Standard",
|
||||||
"EXPANDED_BUBBLE": "Expanded Bubble"
|
"EXPANDED_BUBBLE": "Udvidet Boble"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WIDGET_SCREEN": {
|
"WIDGET_SCREEN": {
|
||||||
"DEFAULT": "Default",
|
"DEFAULT": "Standard",
|
||||||
"CHAT": "Chat"
|
"CHAT": "Chat"
|
||||||
},
|
},
|
||||||
"REPLY_TIME": {
|
"REPLY_TIME": {
|
||||||
@ -649,11 +649,11 @@
|
|||||||
},
|
},
|
||||||
"BODY": {
|
"BODY": {
|
||||||
"TEAM_AVAILABILITY": {
|
"TEAM_AVAILABILITY": {
|
||||||
"ONLINE": "We are Online",
|
"ONLINE": "Vi er online",
|
||||||
"OFFLINE": "Vi er ikke tilgængelige i øjeblikket"
|
"OFFLINE": "Vi er ikke tilgængelige i øjeblikket"
|
||||||
},
|
},
|
||||||
"USER_MESSAGE": "Hi",
|
"USER_MESSAGE": "Hi",
|
||||||
"AGENT_MESSAGE": "Hello"
|
"AGENT_MESSAGE": "Hej"
|
||||||
},
|
},
|
||||||
"BRANDING_TEXT": "Drevet af Chatwoot",
|
"BRANDING_TEXT": "Drevet af Chatwoot",
|
||||||
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
|
"SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
|
||||||
|
|||||||
@ -1,36 +1,36 @@
|
|||||||
{
|
{
|
||||||
"INTEGRATION_APPS": {
|
"INTEGRATION_APPS": {
|
||||||
"FETCHING": "Fetching Integrations",
|
"FETCHING": "Henter Integrationer",
|
||||||
"NO_HOOK_CONFIGURED": "There are no %{integrationId} integrations configured in this account.",
|
"NO_HOOK_CONFIGURED": "Der er ingen %{integrationId} integrationer konfigureret på denne konto.",
|
||||||
"HEADER": "Applications",
|
"HEADER": "Applikationer",
|
||||||
"STATUS": {
|
"STATUS": {
|
||||||
"ENABLED": "Aktiveret",
|
"ENABLED": "Aktiveret",
|
||||||
"DISABLED": "Deaktiveret"
|
"DISABLED": "Deaktiveret"
|
||||||
},
|
},
|
||||||
"CONFIGURE": "Konfigurer",
|
"CONFIGURE": "Konfigurer",
|
||||||
"ADD_BUTTON": "Add a new hook",
|
"ADD_BUTTON": "Tilføj en ny krog",
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"TITLE": {
|
"TITLE": {
|
||||||
"INBOX": "Confirm deletion",
|
"INBOX": "Bekræft sletning",
|
||||||
"ACCOUNT": "Disconnect"
|
"ACCOUNT": "Afbryd"
|
||||||
},
|
},
|
||||||
"MESSAGE": {
|
"MESSAGE": {
|
||||||
"INBOX": "Er du sikker på du vil slette?",
|
"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": {
|
"CONFIRM_BUTTON_TEXT": {
|
||||||
"INBOX": "Ja, Slet",
|
"INBOX": "Ja, Slet",
|
||||||
"ACCOUNT": "Yes, Disconnect"
|
"ACCOUNT": "Ja, Afbryd"
|
||||||
},
|
},
|
||||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||||
"API": {
|
"API": {
|
||||||
"SUCCESS_MESSAGE": "Hook deleted successfully",
|
"SUCCESS_MESSAGE": "Hook slettet",
|
||||||
"ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere"
|
"ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"LIST": {
|
"LIST": {
|
||||||
"FETCHING": "Fetching integration hooks",
|
"FETCHING": "Henter integrationshoks",
|
||||||
"INBOX": "Inbox",
|
"INBOX": "Indbakke",
|
||||||
"DELETE": {
|
"DELETE": {
|
||||||
"BUTTON_TEXT": "Slet"
|
"BUTTON_TEXT": "Slet"
|
||||||
}
|
}
|
||||||
@ -38,14 +38,14 @@
|
|||||||
"ADD": {
|
"ADD": {
|
||||||
"FORM": {
|
"FORM": {
|
||||||
"INBOX": {
|
"INBOX": {
|
||||||
"LABEL": "Select Inbox",
|
"LABEL": "Vælg Indbakke",
|
||||||
"PLACEHOLDER": "Select Inbox"
|
"PLACEHOLDER": "Vælg Indbakke"
|
||||||
},
|
},
|
||||||
"SUBMIT": "Opret",
|
"SUBMIT": "Opret",
|
||||||
"CANCEL": "Annuller"
|
"CANCEL": "Annuller"
|
||||||
},
|
},
|
||||||
"API": {
|
"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"
|
"ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -53,10 +53,10 @@
|
|||||||
"BUTTON_TEXT": "Tilslut"
|
"BUTTON_TEXT": "Tilslut"
|
||||||
},
|
},
|
||||||
"DISCONNECT": {
|
"DISCONNECT": {
|
||||||
"BUTTON_TEXT": "Disconnect"
|
"BUTTON_TEXT": "Afbryd"
|
||||||
},
|
},
|
||||||
"SIDEBAR_DESCRIPTION": {
|
"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. <br /> <br /> 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. <br /> <br /> 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. <br /> <br /> 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. <br /> <br /> For at tilføje Dialogflow skal du oprette en servicekonto i din Google-projektkonsol og dele legitimationsoplysningerne. Se Dialogflow dokumenterne for mere information."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user