Merge branch 'release/1.22.0'
This commit is contained in:
commit
01577acb2e
505 changed files with 11396 additions and 4223 deletions
|
@ -17,7 +17,11 @@ checks:
|
|||
method-count:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 25
|
||||
threshold: 30
|
||||
file-lines:
|
||||
enabled: true
|
||||
config:
|
||||
threshold: 300
|
||||
exclude_patterns:
|
||||
- "spec/"
|
||||
- "**/specs/"
|
||||
|
|
|
@ -14,6 +14,7 @@ Metrics/ClassLength:
|
|||
- 'app/mailers/conversation_reply_mailer.rb'
|
||||
- 'app/models/message.rb'
|
||||
- 'app/builders/messages/facebook/message_builder.rb'
|
||||
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
|
||||
RSpec/ExampleLength:
|
||||
Max: 25
|
||||
Style/Documentation:
|
||||
|
|
4
Gemfile
4
Gemfile
|
@ -144,6 +144,8 @@ group :test do
|
|||
gem 'cypress-on-rails', '~> 1.0'
|
||||
# fast cleaning of database
|
||||
gem 'database_cleaner'
|
||||
# mock http calls
|
||||
gem 'webmock'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
|
@ -155,6 +157,7 @@ group :development, :test do
|
|||
gem 'active_record_query_trace'
|
||||
gem 'bundle-audit', require: false
|
||||
gem 'byebug', platform: :mri
|
||||
gem 'climate_control'
|
||||
gem 'factory_bot_rails'
|
||||
gem 'faker'
|
||||
gem 'listen'
|
||||
|
@ -170,5 +173,4 @@ group :development, :test do
|
|||
gem 'simplecov', '0.17.1', require: false
|
||||
gem 'spring'
|
||||
gem 'spring-watcher-listen'
|
||||
gem 'webmock'
|
||||
end
|
||||
|
|
|
@ -133,6 +133,7 @@ GEM
|
|||
bundler (>= 1.2.0, < 3)
|
||||
thor (~> 1.0)
|
||||
byebug (11.1.3)
|
||||
climate_control (1.0.1)
|
||||
coderay (1.1.3)
|
||||
commonmarker (0.23.2)
|
||||
concurrent-ruby (1.1.9)
|
||||
|
@ -657,6 +658,7 @@ DEPENDENCIES
|
|||
bullet
|
||||
bundle-audit
|
||||
byebug
|
||||
climate_control
|
||||
commonmarker
|
||||
cypress-on-rails (~> 1.0)
|
||||
database_cleaner
|
||||
|
|
|
@ -38,6 +38,10 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||
@outgoing_echo ? :outgoing : :incoming
|
||||
end
|
||||
|
||||
def message_identifier
|
||||
message[:mid]
|
||||
end
|
||||
|
||||
def message_source_id
|
||||
@outgoing_echo ? recipient_id : sender_id
|
||||
end
|
||||
|
@ -66,10 +70,6 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||
@messaging[:message][:text]
|
||||
end
|
||||
|
||||
def content_attributes
|
||||
{ message_id: @messaging[:message][:mid] }
|
||||
end
|
||||
|
||||
def build_message
|
||||
return if @outgoing_echo && already_sent_from_chatwoot?
|
||||
|
||||
|
@ -103,22 +103,17 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
|
|||
account_id: conversation.account_id,
|
||||
inbox_id: conversation.inbox_id,
|
||||
message_type: message_type,
|
||||
source_id: message_source_id,
|
||||
source_id: message_identifier,
|
||||
content: message_content,
|
||||
content_attributes: content_attributes,
|
||||
sender: @outgoing_echo ? nil : contact
|
||||
}
|
||||
end
|
||||
|
||||
def already_sent_from_chatwoot?
|
||||
cw_message = conversation.messages.where(
|
||||
source_id: nil,
|
||||
message_type: 'outgoing',
|
||||
content: message_content,
|
||||
private: false,
|
||||
status: :sent
|
||||
source_id: @messaging[:message][:mid]
|
||||
).first
|
||||
cw_message.update(content_attributes: content_attributes) if cw_message.present?
|
||||
|
||||
cw_message.present?
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class Api::V1::Accounts::Contacts::BaseController < Api::V1::Accounts::BaseController
|
||||
before_action :ensure_contact
|
||||
|
||||
private
|
||||
|
||||
def ensure_contact
|
||||
@contact = Current.account.contacts.find(params[:contact_id])
|
||||
end
|
||||
end
|
|
@ -1,5 +1,4 @@
|
|||
class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts::BaseController
|
||||
before_action :ensure_contact
|
||||
class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts::Contacts::BaseController
|
||||
before_action :ensure_inbox, only: [:create]
|
||||
|
||||
def create
|
||||
|
@ -13,8 +12,4 @@ class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts:
|
|||
@inbox = Current.account.inboxes.find(params[:inbox_id])
|
||||
authorize @inbox, :show?
|
||||
end
|
||||
|
||||
def ensure_contact
|
||||
@contact = Current.account.contacts.find(params[:contact_id])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::BaseController
|
||||
class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::Contacts::BaseController
|
||||
def index
|
||||
@conversations = Current.account.conversations.includes(
|
||||
:assignee, :contact, :inbox, :taggings
|
||||
).where(inbox_id: inbox_ids, contact_id: permitted_params[:contact_id])
|
||||
).where(inbox_id: inbox_ids, contact_id: @contact.id)
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -14,8 +14,4 @@ class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::
|
|||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def permitted_params
|
||||
params.permit(:contact_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
class Api::V1::Accounts::Contacts::LabelsController < Api::V1::Accounts::BaseController
|
||||
class Api::V1::Accounts::Contacts::LabelsController < Api::V1::Accounts::Contacts::BaseController
|
||||
include LabelConcern
|
||||
|
||||
private
|
||||
|
||||
def model
|
||||
@model ||= Current.account.contacts.find(permitted_params[:contact_id])
|
||||
@model ||= @contact
|
||||
end
|
||||
|
||||
def permitted_params
|
||||
params.permit(:contact_id, labels: [])
|
||||
params.permit(labels: [])
|
||||
end
|
||||
end
|
||||
|
|
32
app/controllers/api/v1/accounts/contacts/notes_controller.rb
Normal file
32
app/controllers/api/v1/accounts/contacts/notes_controller.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
class Api::V1::Accounts::Contacts::NotesController < Api::V1::Accounts::Contacts::BaseController
|
||||
before_action :note, except: [:index, :create]
|
||||
|
||||
def index
|
||||
@notes = @contact.notes.latest.includes(:user)
|
||||
end
|
||||
|
||||
def create
|
||||
@note = @contact.notes.create!(note_params)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@note.destroy
|
||||
head :ok
|
||||
end
|
||||
|
||||
def show; end
|
||||
|
||||
def update
|
||||
@note.update(note_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def note
|
||||
@note ||= @contact.notes.find(params[:id])
|
||||
end
|
||||
|
||||
def note_params
|
||||
params.require(:note).permit(:content).merge({ contact_id: @contact.id, user_id: Current.user.id })
|
||||
end
|
||||
end
|
|
@ -1,16 +1,18 @@
|
|||
class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
|
||||
include Sift
|
||||
|
||||
sort_on :email, type: :string
|
||||
sort_on :name, type: :string
|
||||
sort_on :name, internal_name: :order_on_name, type: :scope, scope_params: [:direction]
|
||||
sort_on :phone_number, type: :string
|
||||
sort_on :last_activity_at, type: :datetime
|
||||
sort_on :last_activity_at, internal_name: :order_on_last_activity_at, type: :scope, scope_params: [:direction]
|
||||
sort_on :company, internal_name: :order_on_company_name, type: :scope, scope_params: [:direction]
|
||||
sort_on :city, internal_name: :order_on_city, type: :scope, scope_params: [:direction]
|
||||
sort_on :country, internal_name: :order_on_country_name, type: :scope, scope_params: [:direction]
|
||||
|
||||
RESULTS_PER_PAGE = 15
|
||||
|
||||
before_action :check_authorization
|
||||
before_action :set_current_page, only: [:index, :active, :search]
|
||||
before_action :fetch_contact, only: [:show, :update, :destroy, :contactable_inboxes]
|
||||
before_action :fetch_contact, only: [:show, :update, :destroy, :contactable_inboxes, :destroy_custom_attributes]
|
||||
before_action :set_include_contact_inboxes, only: [:index, :search]
|
||||
|
||||
def index
|
||||
|
@ -50,11 +52,24 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
|
|||
|
||||
def show; end
|
||||
|
||||
def filter
|
||||
result = ::Contacts::FilterService.new(params.permit!, current_user).perform
|
||||
contacts = result[:contacts]
|
||||
@contacts_count = result[:count]
|
||||
@contacts = fetch_contacts_with_conversation_count(contacts)
|
||||
end
|
||||
|
||||
def contactable_inboxes
|
||||
@all_contactable_inboxes = Contacts::ContactableInboxesService.new(contact: @contact).get
|
||||
@contactable_inboxes = @all_contactable_inboxes.select { |contactable_inbox| policy(contactable_inbox[:inbox]).show? }
|
||||
end
|
||||
|
||||
# TODO : refactor this method into dedicated contacts/custom_attributes controller class and routes
|
||||
def destroy_custom_attributes
|
||||
@contact.custom_attributes = @contact.custom_attributes.excluding(params[:custom_attributes])
|
||||
@contact.save!
|
||||
end
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
@contact = Current.account.contacts.new(contact_params)
|
||||
|
@ -91,10 +106,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
|
|||
def resolved_contacts
|
||||
return @resolved_contacts if @resolved_contacts
|
||||
|
||||
@resolved_contacts = Current.account.contacts
|
||||
.where.not(email: [nil, ''])
|
||||
.or(Current.account.contacts.where.not(phone_number: [nil, '']))
|
||||
.or(Current.account.contacts.where.not(identifier: [nil, '']))
|
||||
@resolved_contacts = Current.account.contacts.resolved_contacts
|
||||
|
||||
@resolved_contacts = @resolved_contacts.tagged_with(params[:labels], any: true) if params[:labels].present?
|
||||
@resolved_contacts
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
include Events::Types
|
||||
include DateRangeHelper
|
||||
|
||||
before_action :conversation, except: [:index, :meta, :search, :create]
|
||||
before_action :conversation, except: [:index, :meta, :search, :create, :filter]
|
||||
before_action :contact_inbox, only: [:create]
|
||||
|
||||
def index
|
||||
|
@ -31,6 +31,12 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
|
||||
def show; end
|
||||
|
||||
def filter
|
||||
result = ::Conversations::FilterService.new(params.permit!, current_user).perform
|
||||
@conversations = result[:conversations]
|
||||
@conversations_count = result[:count]
|
||||
end
|
||||
|
||||
def mute
|
||||
@conversation.mute!
|
||||
head :ok
|
||||
|
@ -60,9 +66,9 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
def toggle_typing_status
|
||||
case params[:typing_status]
|
||||
when 'on'
|
||||
trigger_typing_event(CONVERSATION_TYPING_ON)
|
||||
trigger_typing_event(CONVERSATION_TYPING_ON, params[:is_private])
|
||||
when 'off'
|
||||
trigger_typing_event(CONVERSATION_TYPING_OFF)
|
||||
trigger_typing_event(CONVERSATION_TYPING_OFF, params[:is_private])
|
||||
end
|
||||
head :ok
|
||||
end
|
||||
|
@ -86,9 +92,9 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
@conversation.snoozed_until = parse_date_time(params[:snoozed_until].to_s) if params[:snoozed_until]
|
||||
end
|
||||
|
||||
def trigger_typing_event(event)
|
||||
def trigger_typing_event(event, is_private)
|
||||
user = current_user.presence || @resource
|
||||
Rails.configuration.dispatcher.dispatch(event, Time.zone.now, conversation: @conversation, user: user)
|
||||
Rails.configuration.dispatcher.dispatch(event, Time.zone.now, conversation: @conversation, user: user, is_private: is_private)
|
||||
end
|
||||
|
||||
def conversation
|
||||
|
|
|
@ -25,9 +25,7 @@ class Api::V1::Accounts::CustomAttributeDefinitionsController < Api::V1::Account
|
|||
private
|
||||
|
||||
def fetch_custom_attributes_definitions
|
||||
@custom_attribute_definitions = Current.account.custom_attribute_definitions.where(
|
||||
attribute_model: permitted_params[:attribute_model] || DEFAULT_ATTRIBUTE_MODEL
|
||||
)
|
||||
@custom_attribute_definitions = Current.account.custom_attribute_definitions.with_attribute_model(permitted_params[:attribute_model])
|
||||
end
|
||||
|
||||
def fetch_custom_attribute_definition
|
||||
|
|
|
@ -43,7 +43,11 @@ class Api::V1::Accounts::InboxesController < Api::V1::Accounts::BaseController
|
|||
@inbox.update_working_hours(params.permit(working_hours: Inbox::OFFISABLE_ATTRS)[:working_hours]) if params[:working_hours]
|
||||
|
||||
channel_attributes = get_channel_attributes(@inbox.channel_type)
|
||||
@inbox.channel.update!(permitted_params(channel_attributes)[:channel]) if permitted_params(channel_attributes)[:channel].present?
|
||||
|
||||
# Inbox update doesn't necessarily need channel attributes
|
||||
return if permitted_params(channel_attributes)[:channel].blank?
|
||||
|
||||
@inbox.channel.update!(permitted_params(channel_attributes)[:channel])
|
||||
update_channel_feature_flags
|
||||
end
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||
end
|
||||
|
||||
def check_signup_enabled
|
||||
raise ActionController::RoutingError, 'Not Found' if ENV.fetch('ENABLE_ACCOUNT_SIGNUP', true) == 'false'
|
||||
raise ActionController::RoutingError, 'Not Found' if GlobalConfig.get_value('ENABLE_ACCOUNT_SIGNUP') == 'false'
|
||||
end
|
||||
|
||||
def pundit_user
|
||||
|
|
|
@ -11,11 +11,19 @@ class Api::V1::Widget::ContactsController < Api::V1::Widget::BaseController
|
|||
render json: contact_identify_action.perform
|
||||
end
|
||||
|
||||
# TODO : clean up this with proper routes delete contacts/custom_attributes
|
||||
def destroy_custom_attributes
|
||||
@contact.custom_attributes = @contact.custom_attributes.excluding(params[:custom_attributes])
|
||||
@contact.save!
|
||||
render json: @contact
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def process_hmac
|
||||
return if params[:identifier_hash].blank?
|
||||
raise StandardError, 'HMAC failed: Invalid Identifier Hash Provided' unless valid_hmac?
|
||||
return if params[:identifier_hash].blank? && !@web_widget.hmac_mandatory
|
||||
|
||||
render json: { error: 'HMAC failed: Invalid Identifier Hash Provided' }, status: :unauthorized unless valid_hmac?
|
||||
|
||||
@contact_inbox.update(hmac_verified: true)
|
||||
end
|
||||
|
|
|
@ -27,7 +27,9 @@ class DashboardController < ActionController::Base
|
|||
'ANALYTICS_TOKEN',
|
||||
'ANALYTICS_HOST'
|
||||
).merge(
|
||||
APP_VERSION: Chatwoot.config[:version]
|
||||
APP_VERSION: Chatwoot.config[:version],
|
||||
VAPID_PUBLIC_KEY: VapidService.public_key,
|
||||
ENABLE_ACCOUNT_SIGNUP: GlobalConfigService.load('ENABLE_ACCOUNT_SIGNUP', 'false')
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ class AttributeAPI extends ApiClient {
|
|||
super('custom_attribute_definitions', { accountScoped: true });
|
||||
}
|
||||
|
||||
getAttributesByModel(modelId) {
|
||||
return axios.get(`${this.url}?attribute_model=${modelId}`);
|
||||
getAttributesByModel() {
|
||||
return axios.get(this.url);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,27 @@ import ApiClient from './ApiClient';
|
|||
|
||||
class ContactNotes extends ApiClient {
|
||||
constructor() {
|
||||
super('contact_notes', { accountScoped: true });
|
||||
super('notes', { accountScoped: true });
|
||||
this.contactId = null;
|
||||
}
|
||||
|
||||
get url() {
|
||||
return `${this.baseUrl()}/contacts/${this.contactId}/notes`;
|
||||
}
|
||||
|
||||
get(contactId) {
|
||||
this.contactId = contactId;
|
||||
return super.get();
|
||||
}
|
||||
|
||||
create(contactId, content) {
|
||||
this.contactId = contactId;
|
||||
return super.create({ content });
|
||||
}
|
||||
|
||||
delete(contactId, id) {
|
||||
this.contactId = contactId;
|
||||
return super.delete(id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,12 @@ class ContactAPI extends ApiClient {
|
|||
headers: { 'Content-Type': 'multipart/form-data' },
|
||||
});
|
||||
}
|
||||
|
||||
destroyCustomAttributes(contactId, customAttributes) {
|
||||
return axios.post(`${this.url}/${contactId}/destroy_custom_attributes`, {
|
||||
custom_attributes: customAttributes,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default new ContactAPI();
|
||||
|
|
|
@ -51,9 +51,10 @@ class ConversationApi extends ApiClient {
|
|||
return axios.post(`${this.url}/${id}/update_last_seen`);
|
||||
}
|
||||
|
||||
toggleTyping({ conversationId, status }) {
|
||||
toggleTyping({ conversationId, status, isPrivate }) {
|
||||
return axios.post(`${this.url}/${conversationId}/toggle_typing_status`, {
|
||||
typing_status: status,
|
||||
is_private: isPrivate
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -80,6 +81,12 @@ class ConversationApi extends ApiClient {
|
|||
sendEmailTranscript({ conversationId, email }) {
|
||||
return axios.post(`${this.url}/${conversationId}/transcript`, { email });
|
||||
}
|
||||
|
||||
updateCustomAttributes({ conversationId, customAttributes }) {
|
||||
return axios.post(`${this.url}/${conversationId}/custom_attributes`, {
|
||||
custom_attributes: customAttributes,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default new ConversationApi();
|
||||
|
|
|
@ -8,8 +8,8 @@ export const buildCreatePayload = ({
|
|||
contentAttributes,
|
||||
echoId,
|
||||
file,
|
||||
ccEmails,
|
||||
bccEmails,
|
||||
ccEmails = '',
|
||||
bccEmails = '',
|
||||
}) => {
|
||||
let payload;
|
||||
if (file) {
|
||||
|
@ -47,8 +47,8 @@ class MessageApi extends ApiClient {
|
|||
contentAttributes,
|
||||
echo_id: echoId,
|
||||
file,
|
||||
ccEmails,
|
||||
bccEmails,
|
||||
ccEmails = '',
|
||||
bccEmails = '',
|
||||
}) {
|
||||
return axios({
|
||||
method: 'post',
|
||||
|
|
|
@ -60,6 +60,16 @@ describe('#ContactsAPI', () => {
|
|||
);
|
||||
});
|
||||
|
||||
it('#destroyCustomAttributes', () => {
|
||||
contactAPI.destroyCustomAttributes(1, ['cloudCustomer']);
|
||||
expect(context.axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/contacts/1/destroy_custom_attributes',
|
||||
{
|
||||
custom_attributes: ['cloudCustomer'],
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('#importContacts', () => {
|
||||
const file = 'file';
|
||||
contactAPI.importContacts(file);
|
||||
|
|
|
@ -160,5 +160,18 @@ describe('#ConversationAPI', () => {
|
|||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('#updateCustomAttributes', () => {
|
||||
conversationAPI.updateCustomAttributes({
|
||||
conversationId: 45,
|
||||
customAttributes: { order_d: '1001' },
|
||||
});
|
||||
expect(context.axiosMock.post).toHaveBeenCalledWith(
|
||||
'/api/v1/conversations/45/custom_attributes',
|
||||
{
|
||||
custom_attributes: { order_d: '1001' },
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -35,12 +35,14 @@ describe('#ConversationAPI', () => {
|
|||
message: 'test content',
|
||||
echoId: 12,
|
||||
isPrivate: true,
|
||||
|
||||
file: new Blob(['test-content'], { type: 'application/pdf' }),
|
||||
});
|
||||
expect(formPayload).toBeInstanceOf(FormData);
|
||||
expect(formPayload.get('content')).toEqual('test content');
|
||||
expect(formPayload.get('echo_id')).toEqual('12');
|
||||
expect(formPayload.get('private')).toEqual('true');
|
||||
expect(formPayload.get('cc_emails')).toEqual('');
|
||||
});
|
||||
|
||||
it('builds object payload if file is not available', () => {
|
||||
|
@ -56,6 +58,8 @@ describe('#ConversationAPI', () => {
|
|||
private: false,
|
||||
echo_id: 12,
|
||||
content_attributes: { in_reply_to: 12 },
|
||||
bcc_emails: '',
|
||||
cc_emails: '',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
.card {
|
||||
margin-bottom: var(--space-small);
|
||||
padding: var(--space-small);
|
||||
padding: var(--space-normal);
|
||||
}
|
||||
|
||||
.button-wrapper .button.link.grey-btn {
|
||||
|
@ -21,7 +21,7 @@
|
|||
font-size: $font-size-mini;
|
||||
max-width: 15rem;
|
||||
padding: $space-smaller $space-small;
|
||||
z-index: 9999;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
code {
|
||||
|
|
|
@ -55,6 +55,10 @@
|
|||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.w-100 {
|
||||
.w-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.h-full {
|
||||
height: 100%;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,44 @@
|
|||
.margin-right-small {
|
||||
margin-right: var(--space-small);
|
||||
}
|
||||
|
||||
.fs-small {
|
||||
font-size: var(--font-size-small);
|
||||
}
|
||||
|
||||
.fs-default {
|
||||
font-size: var(--font-size-default);
|
||||
}
|
||||
|
||||
.fw-medium {
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
.p-normal {
|
||||
padding: var(--space-normal);
|
||||
}
|
||||
|
||||
.overflow-scroll {
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.overflow-auto {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.overflow-hidden {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
.border-right {
|
||||
border-right: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
.border-left {
|
||||
border-left: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: var(--white);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
@import 'helper-classes';
|
||||
@import 'formulate';
|
||||
@import 'date-picker';
|
||||
@import 'utility-helpers';
|
||||
|
||||
@import 'foundation-sites/scss/foundation';
|
||||
@import '~bourbon/core/bourbon';
|
||||
|
@ -50,3 +49,4 @@
|
|||
@import 'plugins/multiselect';
|
||||
@import 'plugins/dropdown';
|
||||
@import '~shared/assets/stylesheets/ionicons';
|
||||
@import 'utility-helpers';
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
.image {
|
||||
.image,
|
||||
.video {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
|
||||
|
@ -26,7 +27,13 @@
|
|||
}
|
||||
|
||||
.modal-image {
|
||||
max-width: 85%;
|
||||
max-height: 90%;
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
.modal-video {
|
||||
max-height: 75vh;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
&::before {
|
||||
|
@ -35,11 +42,21 @@
|
|||
content: '';
|
||||
height: 20%;
|
||||
left: 0;
|
||||
opacity: .8;
|
||||
opacity: 0.8;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.video {
|
||||
.modal-container {
|
||||
width: auto;
|
||||
|
||||
.modal--close {
|
||||
z-index: var(--z-index-low);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.conversations-list-wrap {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
.error {
|
||||
|
||||
#{$all-text-inputs},
|
||||
select,
|
||||
.multiselect>.multiselect__tags {
|
||||
.multiselect > .multiselect__tags {
|
||||
@include thin-border(var(--r-400));
|
||||
}
|
||||
|
||||
|
@ -40,4 +39,8 @@ input {
|
|||
font-size: var(--font-size-small);
|
||||
height: var(--space-large);
|
||||
}
|
||||
|
||||
.error {
|
||||
border-color: var(--r-400);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,10 +21,6 @@
|
|||
border: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
.margin-right-small {
|
||||
margin-right: var(--space-small);
|
||||
}
|
||||
|
||||
.display-flex {
|
||||
display: flex;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,11 @@
|
|||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<div v-if="isOpen" class="cw-accordion--content">
|
||||
<div
|
||||
v-if="isOpen"
|
||||
class="cw-accordion--content"
|
||||
:class="{ compact: compact }"
|
||||
>
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -33,6 +37,10 @@ export default {
|
|||
type: String,
|
||||
required: true,
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: '',
|
||||
|
@ -106,5 +114,9 @@ export default {
|
|||
|
||||
.cw-accordion--content {
|
||||
padding: var(--space-normal);
|
||||
|
||||
&.compact {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
238
app/javascript/dashboard/components/CustomAttribute.vue
Normal file
238
app/javascript/dashboard/components/CustomAttribute.vue
Normal file
|
@ -0,0 +1,238 @@
|
|||
<template>
|
||||
<div class="custom-attribute">
|
||||
<div class="title-wrap">
|
||||
<h4 class="text-block-title title error">
|
||||
<span class="attribute-name" :class="{ error: $v.editedValue.$error }">
|
||||
{{ label }}
|
||||
</span>
|
||||
</h4>
|
||||
</div>
|
||||
<div v-show="isEditing">
|
||||
<div class="input-group small">
|
||||
<input
|
||||
ref="inputfield"
|
||||
v-model="editedValue"
|
||||
:type="inputType"
|
||||
class="input-group-field"
|
||||
autofocus="true"
|
||||
:class="{ error: $v.editedValue.$error }"
|
||||
@blur="$v.editedValue.$touch"
|
||||
@keyup.enter="onUpdate"
|
||||
/>
|
||||
<div class="input-group-button">
|
||||
<woot-button size="small" icon="ion-checkmark" @click="onUpdate" />
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="shouldShowErrorMessage" class="error-message">
|
||||
{{ errorMessage }}
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-show="!isEditing"
|
||||
class="value--view"
|
||||
:class="{ 'is-editable': showActions }"
|
||||
>
|
||||
<a
|
||||
v-if="isAttributeTypeLink"
|
||||
:href="value"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="value"
|
||||
>
|
||||
{{ value || '---' }}
|
||||
</a>
|
||||
<p v-else class="value">
|
||||
{{ formattedValue || '---' }}
|
||||
</p>
|
||||
<woot-button
|
||||
v-if="showActions"
|
||||
v-tooltip="$t('CUSTOM_ATTRIBUTES.ACTIONS.COPY')"
|
||||
variant="link"
|
||||
size="small"
|
||||
color-scheme="secondary"
|
||||
icon="ion-clipboard"
|
||||
class-names="edit-button"
|
||||
@click="onCopy"
|
||||
/>
|
||||
<woot-button
|
||||
v-if="showActions"
|
||||
v-tooltip="$t('CUSTOM_ATTRIBUTES.ACTIONS.EDIT')"
|
||||
variant="link"
|
||||
size="small"
|
||||
color-scheme="secondary"
|
||||
icon="ion-compose"
|
||||
class-names="edit-button"
|
||||
@click="onEdit"
|
||||
/>
|
||||
<woot-button
|
||||
v-if="showActions"
|
||||
v-tooltip="$t('CUSTOM_ATTRIBUTES.ACTIONS.DELETE')"
|
||||
variant="link"
|
||||
size="small"
|
||||
color-scheme="secondary"
|
||||
icon="ion-trash-a"
|
||||
class-names="edit-button"
|
||||
@click="onDelete"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import format from 'date-fns/format';
|
||||
import { required, url } from 'vuelidate/lib/validators';
|
||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||
|
||||
const DATE_FORMAT = 'yyyy-MM-dd';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
label: { type: String, required: true },
|
||||
value: { type: [String, Number], default: '' },
|
||||
showActions: { type: Boolean, default: false },
|
||||
attributeType: { type: String, default: 'text' },
|
||||
attributeKey: { type: String, required: true },
|
||||
contactId: { type: Number, default: null },
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isEditing: false,
|
||||
editedValue:
|
||||
this.attributeType === 'date'
|
||||
? format(new Date(this.value || new Date()), DATE_FORMAT)
|
||||
: this.value,
|
||||
};
|
||||
},
|
||||
validations() {
|
||||
if (this.isAttributeTypeLink) {
|
||||
return {
|
||||
editedValue: { required, url },
|
||||
};
|
||||
}
|
||||
return {
|
||||
editedValue: { required },
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
isAttributeTypeLink() {
|
||||
return this.attributeType === 'link';
|
||||
},
|
||||
inputType() {
|
||||
return this.isAttributeTypeLink ? 'url' : this.attributeType;
|
||||
},
|
||||
shouldShowErrorMessage() {
|
||||
return this.$v.editedValue.$error;
|
||||
},
|
||||
errorMessage() {
|
||||
if (this.$v.editedValue.url) {
|
||||
return this.$t('CUSTOM_ATTRIBUTES.VALIDATIONS.INVALID_URL');
|
||||
}
|
||||
return this.$t('CUSTOM_ATTRIBUTES.VALIDATIONS.REQUIRED');
|
||||
},
|
||||
formattedValue() {
|
||||
if (this.attributeType === 'date') {
|
||||
return format(new Date(this.editedValue), 'dd-MM-yyyy');
|
||||
}
|
||||
return this.editedValue;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
bus.$on(BUS_EVENTS.FOCUS_CUSTOM_ATTRIBUTE, focusAttributeKey => {
|
||||
if (this.attributeKey === focusAttributeKey) {
|
||||
this.onEdit();
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
focusInput() {
|
||||
if (this.$refs.inputfield) {
|
||||
this.$refs.inputfield.focus();
|
||||
}
|
||||
},
|
||||
onEdit() {
|
||||
this.isEditing = true;
|
||||
this.$nextTick(() => {
|
||||
this.focusInput();
|
||||
});
|
||||
},
|
||||
onUpdate() {
|
||||
const updatedValue =
|
||||
this.attributeType === 'date'
|
||||
? format(new Date(this.editedValue), DATE_FORMAT)
|
||||
: this.editedValue;
|
||||
|
||||
this.$v.$touch();
|
||||
if (this.$v.$invalid) {
|
||||
return;
|
||||
}
|
||||
this.isEditing = false;
|
||||
this.$emit('update', this.attributeKey, updatedValue);
|
||||
},
|
||||
onDelete() {
|
||||
this.isEditing = false;
|
||||
this.$emit('delete', this.attributeKey);
|
||||
},
|
||||
onCopy() {
|
||||
this.$emit('copy', this.value);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.custom-attribute {
|
||||
padding: var(--space-slab) var(--space-normal);
|
||||
}
|
||||
|
||||
.title-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: var(--space-mini);
|
||||
}
|
||||
.title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
}
|
||||
.attribute-name {
|
||||
&.error {
|
||||
color: var(--r-400);
|
||||
}
|
||||
}
|
||||
.title--icon {
|
||||
width: var(--space-two);
|
||||
}
|
||||
.edit-button {
|
||||
display: none;
|
||||
}
|
||||
.value--view {
|
||||
display: flex;
|
||||
|
||||
&.is-editable:hover {
|
||||
.value {
|
||||
background: var(--color-background);
|
||||
}
|
||||
.edit-button {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
.value {
|
||||
display: inline-block;
|
||||
min-width: var(--space-mega);
|
||||
border-radius: var(--border-radius-small);
|
||||
word-break: break-all;
|
||||
padding: var(--space-micro) var(--space-smaller);
|
||||
}
|
||||
.error-message {
|
||||
color: var(--r-400);
|
||||
display: block;
|
||||
font-size: 1.4rem;
|
||||
font-size: var(--font-size-small);
|
||||
font-weight: 400;
|
||||
margin-bottom: 1rem;
|
||||
margin-top: -1.6rem;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
|
@ -8,7 +8,7 @@
|
|||
icon="ion-checkmark"
|
||||
emoji="✅"
|
||||
:is-loading="isLoading"
|
||||
@click="() => toggleStatus(STATUS_TYPE.RESOLVED)"
|
||||
@click="onCmdResolveConversation"
|
||||
>
|
||||
{{ this.$t('CONVERSATION.HEADER.RESOLVE_ACTION') }}
|
||||
</woot-button>
|
||||
|
@ -19,7 +19,7 @@
|
|||
icon="ion-refresh"
|
||||
emoji="👀"
|
||||
:is-loading="isLoading"
|
||||
@click="() => toggleStatus(STATUS_TYPE.OPEN)"
|
||||
@click="onCmdOpenConversation"
|
||||
>
|
||||
{{ this.$t('CONVERSATION.HEADER.REOPEN_ACTION') }}
|
||||
</woot-button>
|
||||
|
@ -29,7 +29,7 @@
|
|||
color-scheme="primary"
|
||||
icon="ion-person"
|
||||
:is-loading="isLoading"
|
||||
@click="() => toggleStatus(STATUS_TYPE.OPEN)"
|
||||
@click="onCmdOpenConversation"
|
||||
>
|
||||
{{ this.$t('CONVERSATION.HEADER.OPEN_ACTION') }}
|
||||
</woot-button>
|
||||
|
@ -118,6 +118,11 @@ import {
|
|||
startOfTomorrow,
|
||||
startOfWeek,
|
||||
} from 'date-fns';
|
||||
import {
|
||||
CMD_REOPEN_CONVERSATION,
|
||||
CMD_RESOLVE_CONVERSATION,
|
||||
CMD_SNOOZE_CONVERSATION,
|
||||
} from '../../routes/dashboard/commands/commandBarBusEvents';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -135,9 +140,7 @@ export default {
|
|||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({
|
||||
currentChat: 'getSelectedChat',
|
||||
}),
|
||||
...mapGetters({ currentChat: 'getSelectedChat' }),
|
||||
isOpen() {
|
||||
return this.currentChat.status === wootConstants.STATUS_TYPE.OPEN;
|
||||
},
|
||||
|
@ -170,6 +173,16 @@ export default {
|
|||
};
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
bus.$on(CMD_SNOOZE_CONVERSATION, this.onCmdSnoozeConversation);
|
||||
bus.$on(CMD_REOPEN_CONVERSATION, this.onCmdOpenConversation);
|
||||
bus.$on(CMD_RESOLVE_CONVERSATION, this.onCmdResolveConversation);
|
||||
},
|
||||
destroyed() {
|
||||
bus.$off(CMD_SNOOZE_CONVERSATION, this.onCmdSnoozeConversation);
|
||||
bus.$off(CMD_REOPEN_CONVERSATION, this.onCmdOpenConversation);
|
||||
bus.$off(CMD_RESOLVE_CONVERSATION, this.onCmdResolveConversation);
|
||||
},
|
||||
methods: {
|
||||
async handleKeyEvents(e) {
|
||||
const allConversations = document.querySelectorAll(
|
||||
|
@ -204,6 +217,18 @@ export default {
|
|||
}
|
||||
}
|
||||
},
|
||||
onCmdSnoozeConversation(snoozeType) {
|
||||
this.toggleStatus(
|
||||
this.STATUS_TYPE.SNOOZED,
|
||||
this.snoozeTimes[snoozeType] || null
|
||||
);
|
||||
},
|
||||
onCmdOpenConversation() {
|
||||
this.toggleStatus(this.STATUS_TYPE.OPEN);
|
||||
},
|
||||
onCmdResolveConversation() {
|
||||
this.toggleStatus(this.STATUS_TYPE.RESOLVED);
|
||||
},
|
||||
showOpenButton() {
|
||||
return this.isResolved || this.isSnoozed;
|
||||
},
|
||||
|
|
|
@ -265,6 +265,7 @@ export default {
|
|||
this.$store.dispatch('inboxes/get');
|
||||
this.$store.dispatch('notifications/unReadCount');
|
||||
this.$store.dispatch('teams/get');
|
||||
this.$store.dispatch('attributes/get');
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<span class="back-button ion-ios-arrow-left" @click.capture="goBack">
|
||||
{{ $t('GENERAL_SETTINGS.BACK') }}
|
||||
{{ buttonLabel || $t('GENERAL_SETTINGS.BACK') }}
|
||||
</span>
|
||||
</template>
|
||||
<script>
|
||||
|
@ -12,6 +12,10 @@ export default {
|
|||
type: [String, Object],
|
||||
default: '',
|
||||
},
|
||||
buttonLabel: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
goBack() {
|
||||
|
|
|
@ -64,6 +64,7 @@ export default {
|
|||
placeholder: { type: String, default: '' },
|
||||
isPrivate: { type: Boolean, default: false },
|
||||
isFormatMode: { type: Boolean, default: false },
|
||||
enableSuggestions: { type: Boolean, default: true },
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -78,6 +79,10 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
plugins() {
|
||||
if (!this.enableSuggestions) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
suggestionsPlugin({
|
||||
matcher: triggerCharacters('@'),
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<select v-model="activeStatus" class="status--filter" @change="onTabChange()">
|
||||
<option
|
||||
v-for="item in $t('CHAT_LIST.CHAT_STATUS_ITEMS')"
|
||||
:key="item['VALUE']"
|
||||
:value="item['VALUE']"
|
||||
v-for="(value, status) in $t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS')"
|
||||
:key="status"
|
||||
:value="status"
|
||||
>
|
||||
{{ item['TEXT'] }}
|
||||
{{ value['TEXT'] }}
|
||||
</option>
|
||||
<option value="all">
|
||||
{{ $t('CHAT_LIST.FILTER_ALL') }}
|
||||
|
|
|
@ -64,8 +64,20 @@ export default {
|
|||
this.$store.dispatch('inboxAssignableAgents/fetch', { inboxId });
|
||||
}
|
||||
},
|
||||
'currentChat.id'() {
|
||||
this.fetchLabels();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.fetchLabels();
|
||||
},
|
||||
methods: {
|
||||
fetchLabels() {
|
||||
if (!this.currentChat.id) {
|
||||
return;
|
||||
}
|
||||
this.$store.dispatch('conversationLabels/get', this.currentChat.id);
|
||||
},
|
||||
onToggleContactPanel() {
|
||||
this.$emit('contact-panel-toggle');
|
||||
},
|
||||
|
|
|
@ -31,6 +31,11 @@
|
|||
<audio v-else-if="attachment.file_type === 'audio'" controls>
|
||||
<source :src="attachment.data_url" />
|
||||
</audio>
|
||||
<bubble-video
|
||||
v-else-if="attachment.file_type === 'video'"
|
||||
:url="attachment.data_url"
|
||||
:readable-time="readableTime"
|
||||
/>
|
||||
<bubble-file
|
||||
v-else
|
||||
:url="attachment.data_url"
|
||||
|
@ -91,6 +96,7 @@ import BubbleMailHead from './bubble/MailHead';
|
|||
import BubbleText from './bubble/Text';
|
||||
import BubbleImage from './bubble/Image';
|
||||
import BubbleFile from './bubble/File';
|
||||
import BubbleVideo from './bubble/Video.vue';
|
||||
import BubbleActions from './bubble/Actions';
|
||||
|
||||
import Spinner from 'shared/components/Spinner';
|
||||
|
@ -108,6 +114,7 @@ export default {
|
|||
BubbleText,
|
||||
BubbleImage,
|
||||
BubbleFile,
|
||||
BubbleVideo,
|
||||
BubbleMailHead,
|
||||
ContextMenu,
|
||||
Spinner,
|
||||
|
@ -236,14 +243,6 @@ export default {
|
|||
isMessageDeleted() {
|
||||
return this.contentAttributes.deleted;
|
||||
},
|
||||
hasImageAttachment() {
|
||||
if (this.hasAttachments && this.data.attachments.length > 0) {
|
||||
const { attachments = [{}] } = this.data;
|
||||
const { file_type: fileType } = attachments[0];
|
||||
return fileType === 'image';
|
||||
}
|
||||
return false;
|
||||
},
|
||||
hasText() {
|
||||
return !!this.data.content;
|
||||
},
|
||||
|
@ -270,7 +269,8 @@ export default {
|
|||
return {
|
||||
bubble: this.isBubble,
|
||||
'is-private': this.data.private,
|
||||
'is-image': this.hasImageAttachment,
|
||||
'is-image': this.hasMediaAttachment('image'),
|
||||
'is-video': this.hasMediaAttachment('video'),
|
||||
'is-text': this.hasText,
|
||||
'is-from-bot': this.isSentByBot,
|
||||
};
|
||||
|
@ -288,6 +288,14 @@ export default {
|
|||
},
|
||||
},
|
||||
methods: {
|
||||
hasMediaAttachment(type) {
|
||||
if (this.hasAttachments && this.data.attachments.length > 0) {
|
||||
const { attachments = [{}] } = this.data;
|
||||
const { file_type: fileType } = attachments[0];
|
||||
return fileType === type;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
handleContextMenuClick() {
|
||||
this.showContextMenu = !this.showContextMenu;
|
||||
},
|
||||
|
@ -315,17 +323,28 @@ export default {
|
|||
<style lang="scss">
|
||||
.wrap {
|
||||
> .bubble {
|
||||
&.is-image {
|
||||
&.is-image,
|
||||
&.is-video {
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
|
||||
.image {
|
||||
.image,
|
||||
.video {
|
||||
max-width: 32rem;
|
||||
padding: var(--space-micro);
|
||||
|
||||
> img {
|
||||
> img,
|
||||
> video {
|
||||
border-radius: var(--border-radius-medium);
|
||||
}
|
||||
> video {
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.video {
|
||||
height: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,11 @@ import { mixin as clickaway } from 'vue-clickaway';
|
|||
import alertMixin from 'shared/mixins/alertMixin';
|
||||
import EmailTranscriptModal from './EmailTranscriptModal';
|
||||
import ResolveAction from '../../buttons/ResolveAction';
|
||||
import {
|
||||
CMD_MUTE_CONVERSATION,
|
||||
CMD_SEND_TRANSCRIPT,
|
||||
CMD_UNMUTE_CONVERSATION,
|
||||
} from '../../../routes/dashboard/commands/commandBarBusEvents';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -47,36 +52,35 @@ export default {
|
|||
mixins: [alertMixin, clickaway],
|
||||
data() {
|
||||
return {
|
||||
showConversationActions: false,
|
||||
showEmailActionsModal: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({
|
||||
currentChat: 'getSelectedChat',
|
||||
}),
|
||||
...mapGetters({ currentChat: 'getSelectedChat' }),
|
||||
},
|
||||
mounted() {
|
||||
bus.$on(CMD_MUTE_CONVERSATION, this.mute);
|
||||
bus.$on(CMD_UNMUTE_CONVERSATION, this.unmute);
|
||||
bus.$on(CMD_SEND_TRANSCRIPT, this.toggleEmailActionsModal);
|
||||
},
|
||||
destroyed() {
|
||||
bus.$off(CMD_MUTE_CONVERSATION, this.mute);
|
||||
bus.$off(CMD_UNMUTE_CONVERSATION, this.unmute);
|
||||
bus.$off(CMD_SEND_TRANSCRIPT, this.toggleEmailActionsModal);
|
||||
},
|
||||
methods: {
|
||||
mute() {
|
||||
this.$store.dispatch('muteConversation', this.currentChat.id);
|
||||
this.showAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS'));
|
||||
this.toggleConversationActions();
|
||||
},
|
||||
unmute() {
|
||||
this.$store.dispatch('unmuteConversation', this.currentChat.id);
|
||||
this.showAlert(this.$t('CONTACT_PANEL.UNMUTED_SUCCESS'));
|
||||
this.toggleConversationActions();
|
||||
},
|
||||
toggleEmailActionsModal() {
|
||||
this.showEmailActionsModal = !this.showEmailActionsModal;
|
||||
this.hideConversationActions();
|
||||
},
|
||||
toggleConversationActions() {
|
||||
this.showConversationActions = !this.showConversationActions;
|
||||
},
|
||||
hideConversationActions() {
|
||||
this.showConversationActions = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
})
|
||||
}}
|
||||
</p>
|
||||
<p>
|
||||
<p v-if="globalConfig.installationName === 'Chatwoot'">
|
||||
<a
|
||||
href="https://www.chatwoot.com/changelog"
|
||||
target="_blank"
|
||||
|
@ -42,8 +42,7 @@
|
|||
</div>
|
||||
<div class="features-item">
|
||||
<h2 class="block-title">
|
||||
<span class="emoji">👥</span
|
||||
>{{ $t('ONBOARDING.TEAM_MEMBERS.TITLE') }}
|
||||
<span class="emoji">👥</span>{{ $t('ONBOARDING.TEAM_MEMBERS.TITLE') }}
|
||||
</h2>
|
||||
<p class="intro-body">
|
||||
{{ $t('ONBOARDING.TEAM_MEMBERS.DESCRIPTION') }}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
@toggle-canned-menu="toggleCannedMenu"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="hasAttachments" class="attachment-preview-box">
|
||||
<div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
|
||||
<attachment-preview
|
||||
:attachments="attachedFiles"
|
||||
:remove-attachment="removeAttachment"
|
||||
|
@ -228,7 +228,7 @@ export default {
|
|||
return (
|
||||
this.isAWebWidgetInbox ||
|
||||
this.isAFacebookInbox ||
|
||||
this.isATwilioWhatsappChannel ||
|
||||
this.isAWhatsappChannel ||
|
||||
this.isAPIInbox ||
|
||||
this.isAnEmailChannel ||
|
||||
this.isATwilioSMSChannel ||
|
||||
|
@ -314,11 +314,22 @@ export default {
|
|||
// Donot use the keyboard listener mixin here as the events here are supposed to be
|
||||
// working even if input/textarea is focussed.
|
||||
document.addEventListener('keydown', this.handleKeyEvents);
|
||||
document.addEventListener('paste', this.onPaste);
|
||||
},
|
||||
destroyed() {
|
||||
document.removeEventListener('keydown', this.handleKeyEvents);
|
||||
document.removeEventListener('paste', this.onPaste);
|
||||
},
|
||||
methods: {
|
||||
onPaste(e) {
|
||||
const data = e.clipboardData.files;
|
||||
if (!data.length || !data[0]) {
|
||||
return;
|
||||
}
|
||||
const file = data[0];
|
||||
const { name, type, size } = file;
|
||||
this.onFileUpload({ name, type, size, file });
|
||||
},
|
||||
toggleUserMention(currentMentionState) {
|
||||
this.hasUserMention = currentMentionState;
|
||||
},
|
||||
|
@ -415,9 +426,11 @@ export default {
|
|||
},
|
||||
toggleTyping(status) {
|
||||
const conversationId = this.currentChat.id;
|
||||
const isPrivate = this.isPrivate;
|
||||
this.$store.dispatch('conversationTypingStatus/toggleTyping', {
|
||||
status,
|
||||
conversationId,
|
||||
isPrivate,
|
||||
});
|
||||
},
|
||||
onFileUpload(file) {
|
||||
|
|
|
@ -181,7 +181,8 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
.is-image {
|
||||
.is-image,
|
||||
.is-video {
|
||||
.message-text--metadata {
|
||||
.time {
|
||||
bottom: var(--space-smaller);
|
||||
|
@ -206,7 +207,8 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
&.is-image {
|
||||
&.is-image,
|
||||
&.is-video {
|
||||
.time {
|
||||
position: inherit;
|
||||
padding-left: var(--space-one);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="file message-text__wrap" @click="openLink">
|
||||
<div class="file message-text__wrap">
|
||||
<div class="icon-wrap">
|
||||
<i class="ion-document-text"></i>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<template>
|
||||
<div class="video message-text__wrap">
|
||||
<video :src="url" muted playsInline @click="onClick" />
|
||||
<woot-modal :show.sync="show" :on-close="onClose">
|
||||
<video :src="url" controls playsInline class="modal-video" />
|
||||
</woot-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
url: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
show: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
onClose() {
|
||||
this.show = false;
|
||||
},
|
||||
onClick() {
|
||||
this.show = true;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -33,6 +33,8 @@ describe('MoveActions', () => {
|
|||
beforeEach(() => {
|
||||
window.bus = {
|
||||
$emit: jest.fn(),
|
||||
$on: jest.fn(),
|
||||
$off: jest.fn(),
|
||||
};
|
||||
|
||||
state = {
|
||||
|
|
|
@ -20,6 +20,7 @@ class ActionCableConnector extends BaseActionCableConnector {
|
|||
'conversation.contact_changed': this.onConversationContactChange,
|
||||
'presence.update': this.onPresenceUpdate,
|
||||
'contact.deleted': this.onContactDelete,
|
||||
'contact.updated': this.onContactUpdate,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -124,6 +125,10 @@ class ActionCableConnector extends BaseActionCableConnector {
|
|||
);
|
||||
this.fetchConversationStats();
|
||||
};
|
||||
|
||||
onContactUpdate = data => {
|
||||
this.app.$store.dispatch('contacts/updateContact', data);
|
||||
};
|
||||
}
|
||||
|
||||
export default {
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "السمات",
|
||||
"HEADER_BTN_TXT": "إضافة سمة",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "سمات مخصصة",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "أضف سمة",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "إنشاء",
|
||||
"CANCEL_BUTTON_TEXT": "إلغاء",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "اسم العرض",
|
||||
"PLACEHOLDER": "أدخل اسم عرض السمة",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "الوصف",
|
||||
"PLACEHOLDER": "أدخل وصف السمة",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "نموذج",
|
||||
"PLACEHOLDER": "الرجاء اختيار نموذج",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "النموذج مطلوب"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "النوع مطلوب"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "المفتاح"
|
||||
"LABEL": "المفتاح",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "تمت إضافة السمة بنجاح",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "حذف",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "هل أنت متأكد من أنك تريد حذف - %{attributeName}",
|
||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "حذف ",
|
||||
"NO": "إلغاء"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "تحديث",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "حذف"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "فتح",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "فتح"
|
||||
},
|
||||
{
|
||||
"TEXT": "مغلقة",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "مغلقة"
|
||||
},
|
||||
{
|
||||
"TEXT": "معلق",
|
||||
"VALUE": "معلق"
|
||||
"pending": {
|
||||
"TEXT": "معلق"
|
||||
},
|
||||
{
|
||||
"TEXT": "غفوة",
|
||||
"VALUE": "غفوة"
|
||||
"snoozed": {
|
||||
"TEXT": "غفوة"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "تم تلقيه عبر البريد الإلكتروني",
|
||||
"VIEW_TWEET_IN_TWITTER": "عرض التغريدة في تويتر",
|
||||
"REPLY_TO_TWEET": "الرد على هذه التغريدة",
|
||||
"SENT": "Sent successfully",
|
||||
"NO_MESSAGES": "لا توجد رسائل",
|
||||
"NO_CONTENT": "لم يتم العثور على محتوى",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "الشركة",
|
||||
"LOCATION": "الموقع الجغرافي",
|
||||
"CONVERSATION_TITLE": "تفاصيل المحادثة",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "المتصفح",
|
||||
"OS": "نظام التشغيل",
|
||||
"INITIATED_FROM": "تم البدء من",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "صندوق الوارد",
|
||||
"ERROR": "حدد صندوق الوارد"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "الموضوع",
|
||||
"PLACEHOLDER": "الموضوع",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "رسالة",
|
||||
"PLACEHOLDER": "اكتب رسالتك هنا",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "عرض التفاصيل"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "جهات الاتصال",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "إضافة",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "ملاحظات"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "إضافة",
|
||||
"PLACEHOLDER": "إضافة ملاحظة",
|
||||
"TITLE": "Shift + Enter لإنشاء مهمة"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "عرض جميع الملاحظات"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "إضافة سمة خاصة",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "إنشاء سمة خاصة",
|
||||
"DESC": "أضف معلومات خاصة إلى جهة الاتصال هذه."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "قيمة السمة",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "تمت إضافة السمة بنجاح",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "المحادثات السابقة"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "إضافة",
|
||||
"SUCCESS": "تمت إضافة السمة بنجاح",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "إلى",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"INBOX_MGMT": {
|
||||
"HEADER": "قنوات التواصل",
|
||||
"SIDEBAR_TXT": "<p><b>قنوات التواصل</b></p> <p> عند ربطك لموقع ويب أو صفحة فيسبوك إلى Chatwooot، يتم تسميتها <b>قناة تواصل</b>. يمكنك إنشاء قنوات تواصل غير محدودة من مختلف الأنواع في حساب Chatwoot الخاص بك. </p><p> انقر فوق <b>إضافة قناة تواصل</b> لربط موقع الويب أو صفحة فيسبوك الخاصة بك. </p><p> من لوحة الإدارة، يمكنك رؤية جميع المحادثات من جميع صناديق الوارد الخاصة بك والرد عليها من مكان موّحد عبر الضغط على علامة التبويب \"المحادثات\". </p><p> يمكنك أيضًا مشاهدة المحادثات الخاصة بصندوق وارد معين بالنقر على اسم صندوق الوارد على الجزء الجانبي من لوحة الإدارة. </p>",
|
||||
"SIDEBAR_TXT": "<p><b>قنوات التواصل</b></p> <p> عند ربطك لموقع ويب أو صفحة فيسبوك إلى Chatwoot، يتم تسميتها <b>قناة تواصل</b>. يمكنك إنشاء قنوات تواصل غير محدودة من مختلف الأنواع في حساب Chatwoot الخاص بك. </p><p> انقر فوق <b>إضافة قناة تواصل</b> لربط موقع الويب أو صفحة فيسبوك الخاصة بك. </p><p> من لوحة الإدارة، يمكنك رؤية جميع المحادثات من جميع صناديق الوارد الخاصة بك والرد عليها من مكان موّحد عبر الضغط على علامة التبويب \"المحادثات\". </p><p> يمكنك أيضًا مشاهدة المحادثات الخاصة بصندوق وارد معين بالنقر على اسم صندوق الوارد على الجزء الجانبي من لوحة الإدارة. </p>",
|
||||
"LIST": {
|
||||
"404": "لا توجد صناديق وارد لقنوات تواصل مرتبطة بهذا الحساب."
|
||||
},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"LOGIN": {
|
||||
"TITLE": "تسجيل الدخول إلى شات ووت",
|
||||
"TITLE": "تسجيل الدخول إلى Chatwoot",
|
||||
"EMAIL": {
|
||||
"LABEL": "البريد الإلكتروني",
|
||||
"PLACEHOLDER": "مثال: someone@example.com"
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "أيام متبقية من الفترة التجريبية.",
|
||||
"TRAIL_BUTTON": "اشترك الآن"
|
||||
"TRAIL_BUTTON": "اشترك الآن",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "إعدادات الحساب",
|
||||
"APPLICATIONS": "التطبيقات",
|
||||
"LABELS": "الوسوم",
|
||||
"ATTRIBUTES": "السمات",
|
||||
"CUSTOM_ATTRIBUTES": "سمات مخصصة",
|
||||
"TEAMS": "الفرق",
|
||||
"ALL_CONTACTS": "جميع جهات الاتصال",
|
||||
"TAGGED_WITH": "Tagged with",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Add Attribute",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Atributs personalitzats",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Add attribute",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Crear",
|
||||
"CANCEL_BUTTON_TEXT": "Cancel·la",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Display Name",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Descripció",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Model",
|
||||
"PLACEHOLDER": "Please select a model",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Model is required"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Type is required"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Key"
|
||||
"LABEL": "Key",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Esborrar",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Are you sure want to delete - %{attributeName}",
|
||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Suprimeix ",
|
||||
"NO": "Cancel·la"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Actualitza",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Esborrar"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Obertes",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Obrir"
|
||||
},
|
||||
{
|
||||
"TEXT": "Resoltes",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Resoltes"
|
||||
},
|
||||
{
|
||||
"TEXT": "Pending",
|
||||
"VALUE": "pending"
|
||||
"pending": {
|
||||
"TEXT": "Pending"
|
||||
},
|
||||
{
|
||||
"TEXT": "Snoozed",
|
||||
"VALUE": "snoozed"
|
||||
"snoozed": {
|
||||
"TEXT": "Snoozed"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "Rebut per correu electrònic",
|
||||
"VIEW_TWEET_IN_TWITTER": "Veure el tuit a Twitter",
|
||||
"REPLY_TO_TWEET": "Respon a aquest tuit",
|
||||
"SENT": "Sent successfully",
|
||||
"NO_MESSAGES": "Cap Missatge",
|
||||
"NO_CONTENT": "No content available",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Companyia",
|
||||
"LOCATION": "Ubicació",
|
||||
"CONVERSATION_TITLE": "Detalls de les converses",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Navegador",
|
||||
"OS": "Sistema operatiu",
|
||||
"INITIATED_FROM": "Iniciada des de",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Inbox",
|
||||
"ERROR": "Select an inbox"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Subject",
|
||||
"PLACEHOLDER": "Subject",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Missatge",
|
||||
"PLACEHOLDER": "Write your message here",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "View details"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Contactes",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Add",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Notes"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Add",
|
||||
"PLACEHOLDER": "Add a note",
|
||||
"TITLE": "Shift + Enter to create a note"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "View all notes"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Add custom attribute",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "S'ha copiat al porta-retalls amb èxit",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create custom attribute",
|
||||
"DESC": "Add custom information to this contact."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Attribute value",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Converses prèvies"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Add",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "To",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "dies de prova restants.",
|
||||
"TRAIL_BUTTON": "Compra ara"
|
||||
"TRAIL_BUTTON": "Compra ara",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "Configuració del compte",
|
||||
"APPLICATIONS": "Applications",
|
||||
"LABELS": "Etiquetes",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Atributs personalitzats",
|
||||
"TEAMS": "Equips",
|
||||
"ALL_CONTACTS": "All Contacts",
|
||||
"TAGGED_WITH": "Tagged with",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Add Attribute",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Vlastní atributy",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Add attribute",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Create",
|
||||
"CANCEL_BUTTON_TEXT": "Zrušit",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Display Name",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Description",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Model",
|
||||
"PLACEHOLDER": "Please select a model",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Model is required"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Type is required"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Key"
|
||||
"LABEL": "Key",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Vymazat",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Are you sure want to delete - %{attributeName}",
|
||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Vymazat ",
|
||||
"NO": "Zrušit"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Aktualizovat",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Vymazat"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Otevřít",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Otevřít"
|
||||
},
|
||||
{
|
||||
"TEXT": "Vyřešeno",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Vyřešeno"
|
||||
},
|
||||
{
|
||||
"TEXT": "Čekající",
|
||||
"VALUE": "čekající"
|
||||
"pending": {
|
||||
"TEXT": "Čekající"
|
||||
},
|
||||
{
|
||||
"TEXT": "Odložené",
|
||||
"VALUE": "odložené"
|
||||
"snoozed": {
|
||||
"TEXT": "Odložené"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "Obdrženo e-mailem",
|
||||
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
|
||||
"REPLY_TO_TWEET": "Odpovědět na tento tweet",
|
||||
"SENT": "Sent successfully",
|
||||
"NO_MESSAGES": "Žádné zprávy",
|
||||
"NO_CONTENT": "Žádný obsah k dispozici",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Společnost",
|
||||
"LOCATION": "Poloha",
|
||||
"CONVERSATION_TITLE": "Podrobnosti konverzace",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Prohlížeč",
|
||||
"OS": "Operační systém",
|
||||
"INITIATED_FROM": "Zahájeno od",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Inbox",
|
||||
"ERROR": "Select an inbox"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Předmět",
|
||||
"PLACEHOLDER": "Předmět",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Zpráva",
|
||||
"PLACEHOLDER": "Write your message here",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "Zobrazit detaily"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Kontakty",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Add",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Notes"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Add",
|
||||
"PLACEHOLDER": "Add a note",
|
||||
"TITLE": "Shift + Enter to create a note"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "View all notes"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Add custom attribute",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "Úspěšně zkopírováno do schránky",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create custom attribute",
|
||||
"DESC": "Add custom information to this contact."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Attribute value",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Předchozí konverzace"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Add",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "Komu",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "dní zbývá zkušební verze.",
|
||||
"TRAIL_BUTTON": "Koupit nyní"
|
||||
"TRAIL_BUTTON": "Koupit nyní",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "Nastavení účtu",
|
||||
"APPLICATIONS": "Applications",
|
||||
"LABELS": "Štítky",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Vlastní atributy",
|
||||
"TEAMS": "Týmy",
|
||||
"ALL_CONTACTS": "All Contacts",
|
||||
"TAGGED_WITH": "Tagged with",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Add Attribute",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Brugerdefinerede Egenskaber",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Add attribute",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Opret",
|
||||
"CANCEL_BUTTON_TEXT": "Annuller",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Display Name",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Beskrivelse",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Model",
|
||||
"PLACEHOLDER": "Please select a model",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Model is required"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Type is required"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Key"
|
||||
"LABEL": "Key",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Slet",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Are you sure want to delete - %{attributeName}",
|
||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Slet ",
|
||||
"NO": "Annuller"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Opdater",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Slet"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Åbn",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Åbn"
|
||||
},
|
||||
{
|
||||
"TEXT": "Løst",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Løst"
|
||||
},
|
||||
{
|
||||
"TEXT": "Pending",
|
||||
"VALUE": "pending"
|
||||
"pending": {
|
||||
"TEXT": "Pending"
|
||||
},
|
||||
{
|
||||
"TEXT": "Snoozed",
|
||||
"VALUE": "snoozed"
|
||||
"snoozed": {
|
||||
"TEXT": "Snoozed"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "Modtaget via e-mail",
|
||||
"VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter",
|
||||
"REPLY_TO_TWEET": "Svar på dette tweet",
|
||||
"SENT": "Sent successfully",
|
||||
"NO_MESSAGES": "No Messages",
|
||||
"NO_CONTENT": "No content available",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Virksomhed",
|
||||
"LOCATION": "Lokation",
|
||||
"CONVERSATION_TITLE": "Samtaledetaljer",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Browser",
|
||||
"OS": "Operativsystem",
|
||||
"INITIATED_FROM": "Startet fra",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Inbox",
|
||||
"ERROR": "Select an inbox"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Subject",
|
||||
"PLACEHOLDER": "Subject",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Besked",
|
||||
"PLACEHOLDER": "Skriv din besked her",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "View details"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Kontakter",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Add",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Notes"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Add",
|
||||
"PLACEHOLDER": "Add a note",
|
||||
"TITLE": "Shift + Enter to create a note"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "View all notes"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Add custom attribute",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create custom attribute",
|
||||
"DESC": "Add custom information to this contact."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Attribute value",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Tidligere Samtaler"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Add",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "To",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "dage prøveperiode tilbage.",
|
||||
"TRAIL_BUTTON": "Køb Nu"
|
||||
"TRAIL_BUTTON": "Køb Nu",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "Kontoindstillinger",
|
||||
"APPLICATIONS": "Applications",
|
||||
"LABELS": "Etiketter",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber",
|
||||
"TEAMS": "Teams",
|
||||
"ALL_CONTACTS": "All Contacts",
|
||||
"TAGGED_WITH": "Tagged with",
|
||||
|
|
|
@ -1,68 +1,71 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Attribut hinzufügen",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Benutzerdefinierte Attribute",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Attribut hinzufügen",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Erstellen",
|
||||
"CANCEL_BUTTON_TEXT": "Stornieren",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Anzeigename",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name wird benötigt"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Beschreibung",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"ERROR": "Description is required"
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Beschreibung wird benötigt"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Modell",
|
||||
"PLACEHOLDER": "Bitte wählen Sie einen Typ",
|
||||
"ERROR": "Model is required"
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Modell wird benötigt"
|
||||
},
|
||||
"TYPE": {
|
||||
"LABEL": "Typ",
|
||||
"PLACEHOLDER": "Please select a type",
|
||||
"ERROR": "Type is required"
|
||||
"PLACEHOLDER": "Bitte wählen Sie einen Typ",
|
||||
"ERROR": "Typ wird benötigt"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Schlüssel"
|
||||
"LABEL": "Schlüssel",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Löschen",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Sind Sie sicher, dass Sie %{attributeName} löschen möchten",
|
||||
"PLACE_HOLDER": "Bitte geben Sie {attributeName} zur Bestätigung ein",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Löschen ",
|
||||
"NO": "Stornieren"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Attribut hinzufügen",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Aktualisieren",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
"HEADER": "Benutzerdefinierte Attribute",
|
||||
"CONVERSATION": "Conversation",
|
||||
"CONVERSATION": "Unterhaltung",
|
||||
"CONTACT": "Kontakt"
|
||||
},
|
||||
"LIST": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Löschen"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
"ERROR": "Uhrzeit auf Seite ist erforderlich"
|
||||
},
|
||||
"ENABLED": "Kampagne aktivieren",
|
||||
"TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours",
|
||||
"TRIGGER_ONLY_BUSINESS_HOURS": "Nur während Geschäftszeiten auslösen",
|
||||
"SUBMIT": "Kampagne hinzufügen"
|
||||
},
|
||||
"API": {
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Offen",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Offen"
|
||||
},
|
||||
{
|
||||
"TEXT": "Gelöst",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Gelöst"
|
||||
},
|
||||
{
|
||||
"TEXT": "Ausstehend",
|
||||
"VALUE": "pending"
|
||||
"pending": {
|
||||
"TEXT": "Ausstehend"
|
||||
},
|
||||
{
|
||||
"TEXT": "Erinnern",
|
||||
"VALUE": "snoozed"
|
||||
"snoozed": {
|
||||
"TEXT": "Erinnern"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,9 +81,10 @@
|
|||
"RECEIVED_VIA_EMAIL": "Per E-Mail empfangen",
|
||||
"VIEW_TWEET_IN_TWITTER": "Tweet auf Twitter anzeigen",
|
||||
"REPLY_TO_TWEET": "Auf diesen Tweet antworten",
|
||||
"SENT": "Erfolgreich gesendet",
|
||||
"NO_MESSAGES": "Keine Nachrichten",
|
||||
"NO_CONTENT": "Kein Inhalt verfügbar",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
"SHOW_QUOTED_TEXT": "Show Quoted Text"
|
||||
"HIDE_QUOTED_TEXT": "Zitierten Text ausblenden",
|
||||
"SHOW_QUOTED_TEXT": "Zitierten Text anzeigen"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Firma",
|
||||
"LOCATION": "Ort",
|
||||
"CONVERSATION_TITLE": "Unterhaltungsdetails",
|
||||
"VIEW_PROFILE": "Profil anzeigen",
|
||||
"BROWSER": "Browser",
|
||||
"OS": "Betriebssystem",
|
||||
"INITIATED_FROM": "Initiiert von",
|
||||
|
@ -32,8 +33,8 @@
|
|||
"NO_RESULT": "Keine Labels gefunden"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACT": "Merge contact",
|
||||
"CONTACT_ACTIONS": "Contact actions",
|
||||
"MERGE_CONTACT": "Kontakte zusammenführen",
|
||||
"CONTACT_ACTIONS": "Kontakt-Aktionen",
|
||||
"MUTE_CONTACT": "Unterhaltung stummschalten",
|
||||
"UNMUTE_CONTACT": "Unterhaltung entmuten",
|
||||
"MUTED_SUCCESS": "Diese Unterhaltung ist für 6 Stunden auf stumm schalten",
|
||||
|
@ -57,22 +58,22 @@
|
|||
"DESC": "Fügen Sie grundlegende Informationen über den Kontakt hinzu."
|
||||
},
|
||||
"IMPORT_CONTACTS": {
|
||||
"BUTTON_LABEL": "Import",
|
||||
"TITLE": "Import Contacts",
|
||||
"DESC": "Import contacts through a CSV file.",
|
||||
"DOWNLOAD_LABEL": "Download a sample csv.",
|
||||
"BUTTON_LABEL": "Importieren",
|
||||
"TITLE": "Kontakte importieren",
|
||||
"DESC": "Kontakte über CSV-Datei importieren.",
|
||||
"DOWNLOAD_LABEL": "Ein CSV-Beispiel herunterladen.",
|
||||
"FORM": {
|
||||
"LABEL": "CSV-Datei",
|
||||
"SUBMIT": "Import",
|
||||
"SUBMIT": "Importieren",
|
||||
"CANCEL": "Stornieren"
|
||||
},
|
||||
"SUCCESS_MESSAGE": "Contacts saved successfully",
|
||||
"SUCCESS_MESSAGE": "Kontakte erfolgreich gespeichert",
|
||||
"ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut"
|
||||
},
|
||||
"DELETE_CONTACT": {
|
||||
"BUTTON_LABEL": "Delete Contact",
|
||||
"BUTTON_LABEL": "Kontakt löschen",
|
||||
"TITLE": "Kontakt löschen",
|
||||
"DESC": "Delete contact details",
|
||||
"DESC": "Kontakt-Details bearbeiten",
|
||||
"CONFIRM": {
|
||||
"TITLE": "Löschung bestätigen",
|
||||
"MESSAGE": "Bist du sicher, das du das löschen möchtest?",
|
||||
|
@ -81,8 +82,8 @@
|
|||
"NO": "Nein, behalten "
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Contact deleted successfully",
|
||||
"ERROR_MESSAGE": "Could not delete contact. Please try again later."
|
||||
"SUCCESS_MESSAGE": "Kontakt erfolgreich gelöscht",
|
||||
"ERROR_MESSAGE": "Kontakt konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
|
||||
}
|
||||
},
|
||||
"CONTACT_FORM": {
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Posteingang",
|
||||
"ERROR": "Posteingang auswählen"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Betreff",
|
||||
"PLACEHOLDER": "Betreff",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Nachricht",
|
||||
"PLACEHOLDER": "Schreiben Sie Ihre Nachricht hier",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "Details anzeigen"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Kontakte",
|
||||
"LOADING": "Kontaktprofil wird geladen..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Hinzufügen",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Notizen werden geladen...",
|
||||
"NOT_AVAILABLE": "Für diesen Kontakt wurden keine Notizen erstellt",
|
||||
"HEADER": {
|
||||
"TITLE": "Notizen"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "Notiz hinzugefügt"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Hinzufügen",
|
||||
"PLACEHOLDER": "Notiz hinzufügen",
|
||||
"TITLE": "Shift + Enter um eine Notiz zu erstellen"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "Alle Notizen anzeigen"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Notiz löschen"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Eigenes Attribut hinzufügen",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"NOT_AVAILABLE": "Für diesen Kontakt sind keine benutzerdefinierten Attribute verfügbar.",
|
||||
"COPY_SUCCESSFUL": "Der Code wurde erfolgreich in die Zwischenablage kopiert",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Attribut hinzufügen"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Eigenes Attribut erstellen",
|
||||
"DESC": "Füge diesem Kontakt benutzerdefinierte Informationen hinzu."
|
||||
|
@ -239,24 +261,46 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Attributwert",
|
||||
"PLACEHOLDER": "Bsp.: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribut erfolgreich hinzugefügt",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribut erfolgreich aktualisiert",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribut erfolgreich gelöscht",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
"TITLE": "Kontakte zusammenführen",
|
||||
"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": "Kontakte zusammenführen, um zwei Profile zu einem zu kombinieren, einschließlich aller Attribute und Gespräche. Im Falle eines Konflikts haben die Attribute des Hauptkontakts Vorrang.",
|
||||
"PRIMARY": {
|
||||
"TITLE": "Hauptkontakt",
|
||||
"HELP_LABEL": "To be kept"
|
||||
"HELP_LABEL": "Zu erhalten"
|
||||
},
|
||||
"CHILD": {
|
||||
"TITLE": "Kontakt zum Zusammenführen",
|
||||
"PLACEHOLDER": "Search for a contact",
|
||||
"HELP_LABEL": "To be deleted"
|
||||
"PLACEHOLDER": "Nach Kontakt suchen",
|
||||
"HELP_LABEL": "Zu löschen"
|
||||
},
|
||||
"SUMMARY": {
|
||||
"TITLE": "Zusammenfassung",
|
||||
"DELETE_WARNING": "Contact of <strong>%{childContactName}</strong> will be deleted.",
|
||||
"DELETE_WARNING": "Der Kontakt von <strong>%{childContactName}</strong> wird gelöscht.",
|
||||
"ATTRIBUTE_WARNING": "Details von Kontakt <strong>%{childContactName}</strong> wird zu <strong>%{primaryContactName}</strong> kopiert."
|
||||
},
|
||||
"SEARCH": {
|
||||
|
@ -269,7 +313,7 @@
|
|||
"ERROR": "Wählen Sie einen Kontakt zum Zusammenführen"
|
||||
},
|
||||
"SUCCESS_MESSAGE": "Kontakt erfolgreich zusammengeführt",
|
||||
"ERROR_MESSAGE": "Could not merge contacts, try again!"
|
||||
"ERROR_MESSAGE": "Kontakte konnten nicht zusammengeführt werden, bitte erneut versuchen!"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"24_HOURS_WINDOW": "24-Stunden-Nachrichtenfenster-Beschränkung",
|
||||
"TWILIO_WHATSAPP_CAN_REPLY": "Du kannst auf diese Unterhaltung nur mit einer Vorlagen-Nachricht antworten aufgrund von",
|
||||
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24-Stunden-Nachrichtenfenster-Beschränkung",
|
||||
"SELECT_A_TWEET_TO_REPLY": "Bitte wählen Sie einen Tweet aus, auf den Sie antworten möchten.",
|
||||
"SELECT_A_TWEET_TO_REPLY": "Bitte wählen Sie einen Tweet aus, auf welchen Sie antworten möchten.",
|
||||
"REPLYING_TO": "Du antwortest auf:",
|
||||
"REMOVE_SELECTION": "Auswahl entfernen",
|
||||
"DOWNLOAD": "Herunterladen",
|
||||
|
@ -40,9 +40,9 @@
|
|||
"OPEN": "Mehr",
|
||||
"CLOSE": "Schließen",
|
||||
"DETAILS": "Einzelheiten",
|
||||
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
|
||||
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
|
||||
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply"
|
||||
"SNOOZED_UNTIL_TOMORROW": "Schlummern bis morgen",
|
||||
"SNOOZED_UNTIL_NEXT_WEEK": "Schlummern bis nächste Woche",
|
||||
"SNOOZED_UNTIL_NEXT_REPLY": "Schlummern bis zur nächsten Antwort"
|
||||
},
|
||||
"RESOLVE_DROPDOWN": {
|
||||
"MARK_PENDING": "Als ausstehend markieren",
|
||||
|
@ -87,7 +87,7 @@
|
|||
"CHANGE_AGENT": "Konversationsempfänger geändert",
|
||||
"CHANGE_TEAM": "Teamzuordnung dieser Konversation geändert",
|
||||
"FILE_SIZE_LIMIT": "Die Datei überschreitet das Limit von {MAXIMUM_FILE_UPLOAD_SIZE} für Anhänge",
|
||||
"MESSAGE_ERROR": "Unable to send this message, please try again later",
|
||||
"MESSAGE_ERROR": "Nachricht konnte nicht gesendet werden, bitte versuchen Sie es später erneut",
|
||||
"SENT_BY": "Gesendet von:",
|
||||
"ASSIGNMENT": {
|
||||
"SELECT_AGENT": "Agent auswählen",
|
||||
|
@ -148,14 +148,35 @@
|
|||
"PLACEHOLDER": "Keine"
|
||||
},
|
||||
"ACCORDION": {
|
||||
"CONTACT_DETAILS": "Contact Details",
|
||||
"CONVERSATION_ACTIONS": "Conversation Actions",
|
||||
"CONTACT_DETAILS": "Kontakt-Details",
|
||||
"CONVERSATION_ACTIONS": "Aktionen für Unterhaltung",
|
||||
"CONVERSATION_LABELS": "Konversationsetiketten",
|
||||
"CONVERSATION_INFO": "Conversation Information",
|
||||
"CONTACT_ATTRIBUTES": "Contact Attributes",
|
||||
"CONVERSATION_INFO": "Informationen über Unterhaltung",
|
||||
"CONTACT_ATTRIBUTES": "Kontakt-Attribute",
|
||||
"PREVIOUS_CONVERSATION": "Vorherige Gespräche"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribut erfolgreich aktualisiert",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Hinzufügen",
|
||||
"SUCCESS": "Attribut erfolgreich hinzugefügt",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribut erfolgreich gelöscht",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "An",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -74,10 +74,10 @@
|
|||
},
|
||||
"NETWORK": {
|
||||
"NOTIFICATION": {
|
||||
"TEXT": "Disconnected from Chatwoot"
|
||||
"TEXT": "Verbindung zu Chatwoot getrennt"
|
||||
},
|
||||
"BUTTON": {
|
||||
"REFRESH": "Refresh"
|
||||
"REFRESH": "Neu laden"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
},
|
||||
"CHANNEL_WEBHOOK_URL": {
|
||||
"LABEL": "Webhook-URL",
|
||||
"PLACEHOLDER": "Enter your Webhook URL",
|
||||
"PLACEHOLDER": "Geben Sie Ihre Webhook-URL ein",
|
||||
"ERROR": "Bitte geben Sie eine gültige URL ein"
|
||||
},
|
||||
"CHANNEL_DOMAIN": {
|
||||
|
@ -97,8 +97,8 @@
|
|||
"SUBMIT_BUTTON": "Posteingang erstellen"
|
||||
},
|
||||
"TWILIO": {
|
||||
"TITLE": "Twilio SMS/WhatsApp Channel",
|
||||
"DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.",
|
||||
"TITLE": "Twilio SMS/WhatsApp-Kanal",
|
||||
"DESC": "Integrieren Sie Twilio und unterstützen Sie Ihre Kunden via SMS oder WhatsApp.",
|
||||
"ACCOUNT_SID": {
|
||||
"LABEL": "Account SID",
|
||||
"PLACEHOLDER": "Bitte geben Sie Ihre Twilio Account SID ein",
|
||||
|
@ -115,7 +115,7 @@
|
|||
},
|
||||
"CHANNEL_NAME": {
|
||||
"LABEL": "Posteingang-Name",
|
||||
"PLACEHOLDER": "Please enter a inbox name",
|
||||
"PLACEHOLDER": "Bitte geben Sie einen Namen für den Posteingang ein",
|
||||
"ERROR": "Dieses Feld wird benötigt"
|
||||
},
|
||||
"PHONE_NUMBER": {
|
||||
|
@ -137,16 +137,16 @@
|
|||
"DESC": "Unterstützen Sie Ihre Kunden per SMS mit Twilio-Integration."
|
||||
},
|
||||
"WHATSAPP": {
|
||||
"TITLE": "WhatsApp Channel",
|
||||
"DESC": "Start supporting your customers via WhatsApp.",
|
||||
"TITLE": "WhatsApp-Kanal",
|
||||
"DESC": "Unterstützen Sie Ihre Kunden via WhatsApp.",
|
||||
"PROVIDERS": {
|
||||
"LABEL": "API Provider",
|
||||
"LABEL": "API-Provider",
|
||||
"TWILIO": "Twilio",
|
||||
"360_DIALOG": "360Dialog"
|
||||
},
|
||||
"INBOX_NAME": {
|
||||
"LABEL": "Posteingang-Name",
|
||||
"PLACEHOLDER": "Please enter an inbox name",
|
||||
"PLACEHOLDER": "Bitte geben Sie einen Namen für den Posteingang ein",
|
||||
"ERROR": "Dieses Feld wird benötigt"
|
||||
},
|
||||
"PHONE_NUMBER": {
|
||||
|
@ -155,15 +155,15 @@
|
|||
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
|
||||
},
|
||||
"API_KEY": {
|
||||
"LABEL": "API key",
|
||||
"SUBTITLE": "Configure the WhatsApp API key.",
|
||||
"PLACEHOLDER": "API key",
|
||||
"APPLY_FOR_ACCESS": "Don't have any API key? Apply for access here",
|
||||
"ERROR": "Please enter a valid value."
|
||||
"LABEL": "API-Schlüssel",
|
||||
"SUBTITLE": "Konfigurieren Sie den WhatsApp API-Schlüssel.",
|
||||
"PLACEHOLDER": "API-Schlüssel",
|
||||
"APPLY_FOR_ACCESS": "Sie haben keinen API-Schlüssel? Für den Zugriff hier beantragen",
|
||||
"ERROR": "Bitte geben Sie einen gültigen Wert ein."
|
||||
},
|
||||
"SUBMIT_BUTTON": "Create WhatsApp Channel",
|
||||
"SUBMIT_BUTTON": "WhatsApp-Kanal erstellen",
|
||||
"API": {
|
||||
"ERROR_MESSAGE": "We were not able to save the WhatsApp channel"
|
||||
"ERROR_MESSAGE": "Wir konnten den WhatsApp-Kanal nicht speichern"
|
||||
}
|
||||
},
|
||||
"API_CHANNEL": {
|
||||
|
@ -204,50 +204,50 @@
|
|||
"FINISH_MESSAGE": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
|
||||
},
|
||||
"LINE_CHANNEL": {
|
||||
"TITLE": "LINE Channel",
|
||||
"DESC": "Integrate with LINE channel and start supporting your customers.",
|
||||
"TITLE": "LINE-Kanal",
|
||||
"DESC": "Integrieren Sie den LINE-Kanal und unterstützen Sie Ihre Kunden.",
|
||||
"CHANNEL_NAME": {
|
||||
"LABEL": "Kanal Name",
|
||||
"PLACEHOLDER": "Bitte geben Sie einen Kanalnamen ein",
|
||||
"ERROR": "Dieses Feld wird benötigt"
|
||||
},
|
||||
"LINE_CHANNEL_ID": {
|
||||
"LABEL": "LINE Channel ID",
|
||||
"PLACEHOLDER": "LINE Channel ID"
|
||||
"LABEL": "LINE-Kanal-ID",
|
||||
"PLACEHOLDER": "LINE-Kanal-ID"
|
||||
},
|
||||
"LINE_CHANNEL_SECRET": {
|
||||
"LABEL": "LINE Channel Secret",
|
||||
"PLACEHOLDER": "LINE Channel Secret"
|
||||
"LABEL": "LINE-Kanal-Geheimnis",
|
||||
"PLACEHOLDER": "LINE-Kanal-Geheimnis"
|
||||
},
|
||||
"LINE_CHANNEL_TOKEN": {
|
||||
"LABEL": "LINE Channel Token",
|
||||
"PLACEHOLDER": "LINE Channel Token"
|
||||
"LABEL": "LINE-Kanal-Token",
|
||||
"PLACEHOLDER": "LINE-Kanal-Token"
|
||||
},
|
||||
"SUBMIT_BUTTON": "Create LINE Channel",
|
||||
"SUBMIT_BUTTON": "LINE-Kanal erstellen",
|
||||
"API": {
|
||||
"ERROR_MESSAGE": "We were not able to save the LINE channel"
|
||||
"ERROR_MESSAGE": "Wir konnten den LINE-Kanal nicht speichern"
|
||||
},
|
||||
"API_CALLBACK": {
|
||||
"TITLE": "Callback URL",
|
||||
"SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here."
|
||||
"SUBTITLE": "Sie müssen die Webhook-URL in der LINE-Anwendung mit der hier genannten URL konfigurieren."
|
||||
}
|
||||
},
|
||||
"TELEGRAM_CHANNEL": {
|
||||
"TITLE": "Telegram Channel",
|
||||
"DESC": "Integrate with Telegram channel and start supporting your customers.",
|
||||
"TITLE": "Telegram-Kanal",
|
||||
"DESC": "Integrieren Sie den Telegram-Kanal und unterstützen Sie Ihre Kunden.",
|
||||
"BOT_TOKEN": {
|
||||
"LABEL": "Bot Token",
|
||||
"SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.",
|
||||
"PLACEHOLDER": "Bot Token"
|
||||
"LABEL": "Bot-Token",
|
||||
"SUBTITLE": "Konfigurieren Sie den Bot-Token, welchen Sie von Telegram BotFather erhalten haben.",
|
||||
"PLACEHOLDER": "Bot-Token"
|
||||
},
|
||||
"SUBMIT_BUTTON": "Create Telegram Channel",
|
||||
"SUBMIT_BUTTON": "Telegram-Kanal erstellen",
|
||||
"API": {
|
||||
"ERROR_MESSAGE": "We were not able to save the telegram channel"
|
||||
"ERROR_MESSAGE": "Wir konnten den Telegram-Kanal nicht speichern"
|
||||
}
|
||||
},
|
||||
"AUTH": {
|
||||
"TITLE": "Wähle einen Kanal",
|
||||
"DESC": "Chatwoot supports live-chat widget, Facebook page, Twitter profile, WhatsApp, Email etc., as channels. If you want to build a custom channel, you can create it using the API channel. Select one channel from the options below to proceed."
|
||||
"DESC": "Chatwoot unterstützt Live-Chat-Widget, Facebook-Seite, Twitter-Profil, WhatsApp, E-Mail etc. als Kanäle. Wenn Sie einen eigenen Kanal erstellen möchten, können Sie einen API-Kanal verwenden. Wählen Sie einen Kanal aus den folgenden Optionen aus, um fortzufahren."
|
||||
},
|
||||
"AGENTS": {
|
||||
"TITLE": "Agenten",
|
||||
|
@ -292,23 +292,23 @@
|
|||
},
|
||||
"AUTO_ASSIGNMENT": {
|
||||
"ENABLED": "Aktiviert",
|
||||
"DISABLED": "Behindert"
|
||||
"DISABLED": "Deaktiviert"
|
||||
},
|
||||
"EMAIL_COLLECT_BOX": {
|
||||
"ENABLED": "Aktiviert",
|
||||
"DISABLED": "Behindert"
|
||||
"DISABLED": "Deaktiviert"
|
||||
},
|
||||
"ENABLE_CSAT": {
|
||||
"ENABLED": "Aktiviert",
|
||||
"DISABLED": "Behindert"
|
||||
"DISABLED": "Deaktiviert"
|
||||
},
|
||||
"ENABLE_HMAC": {
|
||||
"LABEL": "Enable"
|
||||
"LABEL": "Aktivieren"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Löschen",
|
||||
"AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar",
|
||||
"AVATAR_DELETE_BUTTON_TEXT": "Avatar löschen",
|
||||
"CONFIRM": {
|
||||
"TITLE": "Löschung bestätigen",
|
||||
"MESSAGE": "Bist du sicher, das du das löschen möchtest ",
|
||||
|
@ -319,8 +319,8 @@
|
|||
"API": {
|
||||
"SUCCESS_MESSAGE": "Posteingang erfolgreich gelöscht",
|
||||
"ERROR_MESSAGE": "Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.",
|
||||
"AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully",
|
||||
"AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later."
|
||||
"AVATAR_SUCCESS_MESSAGE": "Avatar von Posteingang erfolgreich gelöscht",
|
||||
"AVATAR_ERROR_MESSAGE": "Der Avatar vom Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -353,11 +353,11 @@
|
|||
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktivieren oder deaktivieren Sie die automatische Zuweisung verfügbarer Agenten für neue Konversationen",
|
||||
"HMAC_VERIFICATION": "Benutzeridentitätsüberprüfung",
|
||||
"HMAC_DESCRIPTION": "Um die Benutzer-Identität zu validieren, kann via SDK einen `identity_hash` für jeden Benutzer übergeben werden. Ein Hash kann mithilfe des SH256-Verfahrens mithilfe des nachfolgenden Schlüssels generiert werden.",
|
||||
"HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation",
|
||||
"HMAC_MANDATORY_DESCRIPTION": "If enabled, Chatwoot SDKs setUser method will not work unless the `identifier_hash` is provided for each user.",
|
||||
"INBOX_IDENTIFIER": "Inbox Identifier",
|
||||
"INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.",
|
||||
"FORWARD_EMAIL_TITLE": "Forward to Email",
|
||||
"HMAC_MANDATORY_VERIFICATION": "Erzwinge Benutzer-Identitätsüberprüfung",
|
||||
"HMAC_MANDATORY_DESCRIPTION": "Wenn aktiviert, funktioniert die setUser Methode der Chatwoot SDK nur, wenn ein `identifier_hash` für jeden Benutzer mitgeliefert wird.",
|
||||
"INBOX_IDENTIFIER": "Identifizierung für Posteingang",
|
||||
"INBOX_IDENTIFIER_SUB_TEXT": "Verwenden Sie den hier angezeigten `inbox_identifier`-Token zur Authentifizierung Ihrer API-Clients.",
|
||||
"FORWARD_EMAIL_TITLE": "Weiterleitung an E-Mail",
|
||||
"FORWARD_EMAIL_SUB_TEXT": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
|
||||
},
|
||||
"FACEBOOK_REAUTHORIZE": {
|
||||
|
@ -390,7 +390,7 @@
|
|||
"TIMEZONE_LABEL": "Zeitzone auswählen",
|
||||
"UPDATE": "Einstellungen für Geschäftszeiten aktualisieren",
|
||||
"TOGGLE_AVAILABILITY": "Geschäftszeiten für diesen Posteingang aktivieren",
|
||||
"UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors",
|
||||
"UNAVAILABLE_MESSAGE_LABEL": "Nachricht für Besucher außerhalb Geschäftszeiten",
|
||||
"UNAVAILABLE_MESSAGE_DEFAULT": "Wir sind momentan nicht erreichbar. Hinterlassen Sie eine Nachricht und wir antworten Ihnen sobald wir wieder zurück sind.",
|
||||
"TOGGLE_HELP": "Die Aktivierung der Geschäftsverfügbarkeit zeigt die verfügbaren Stunden auf dem Live-Chat-Widget an, auch wenn alle Agenten offline sind. Außerhalb der verfügbaren Stunden können Besucher mit einer Nachricht und einem Vor-Chat-Formular gewarnt werden.",
|
||||
"DAY": {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"HEADER": "Anwendungen",
|
||||
"STATUS": {
|
||||
"ENABLED": "Aktiviert",
|
||||
"DISABLED": "Behindert"
|
||||
"DISABLED": "Deaktiviert"
|
||||
},
|
||||
"CONFIGURE": "Konfigurieren",
|
||||
"ADD_BUTTON": "Neuen Hook hinzufügen",
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
}
|
||||
},
|
||||
"AGENT_REPORTS": {
|
||||
"HEADER": "Agents Overview",
|
||||
"HEADER": "Agenten-Übersicht",
|
||||
"LOADING_CHART": "Diagrammdaten laden ...",
|
||||
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
|
||||
"DOWNLOAD_AGENT_REPORTS": "Agenten-Berichte herunterladen",
|
||||
|
@ -125,11 +125,11 @@
|
|||
}
|
||||
},
|
||||
"LABEL_REPORTS": {
|
||||
"HEADER": "Labels Overview",
|
||||
"HEADER": "Label-Übersicht",
|
||||
"LOADING_CHART": "Diagrammdaten laden ...",
|
||||
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
|
||||
"DOWNLOAD_LABEL_REPORTS": "Download label reports",
|
||||
"FILTER_DROPDOWN_LABEL": "Select Label",
|
||||
"DOWNLOAD_LABEL_REPORTS": "Label-Berichte herunterladen",
|
||||
"FILTER_DROPDOWN_LABEL": "Label auswählen",
|
||||
"METRICS": {
|
||||
"CONVERSATIONS": {
|
||||
"NAME": "Gespräche",
|
||||
|
@ -188,10 +188,10 @@
|
|||
}
|
||||
},
|
||||
"INBOX_REPORTS": {
|
||||
"HEADER": "Inbox Overview",
|
||||
"HEADER": "Posteingangsübersicht",
|
||||
"LOADING_CHART": "Diagrammdaten laden ...",
|
||||
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
|
||||
"DOWNLOAD_INBOX_REPORTS": "Download inbox reports",
|
||||
"DOWNLOAD_INBOX_REPORTS": "Agenten-Berichte herunterladen",
|
||||
"FILTER_DROPDOWN_LABEL": "Eingang auswählen",
|
||||
"METRICS": {
|
||||
"CONVERSATIONS": {
|
||||
|
@ -251,11 +251,11 @@
|
|||
}
|
||||
},
|
||||
"TEAM_REPORTS": {
|
||||
"HEADER": "Team Overview",
|
||||
"HEADER": "Team-Übersicht",
|
||||
"LOADING_CHART": "Diagrammdaten laden ...",
|
||||
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
|
||||
"DOWNLOAD_TEAM_REPORTS": "Download team reports",
|
||||
"FILTER_DROPDOWN_LABEL": "Select Team",
|
||||
"DOWNLOAD_TEAM_REPORTS": "Team-Berichte herunterladen",
|
||||
"FILTER_DROPDOWN_LABEL": "Team auswählen",
|
||||
"METRICS": {
|
||||
"CONVERSATIONS": {
|
||||
"NAME": "Gespräche",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "Tage der Testversion verbleibend.",
|
||||
"TRAIL_BUTTON": "Jetzt kaufen"
|
||||
"TRAIL_BUTTON": "Jetzt kaufen",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "Kontoeinstellungen",
|
||||
"APPLICATIONS": "Anwendungen",
|
||||
"LABELS": "Labels",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Benutzerdefinierte Attribute",
|
||||
"TEAMS": "Teams",
|
||||
"ALL_CONTACTS": "Alle Kontakte",
|
||||
"TAGGED_WITH": "Markiert mit",
|
||||
|
@ -178,15 +179,15 @@
|
|||
"OPEN_CONVERSATION": "Unterhaltung öffnen",
|
||||
"RESOLVE_AND_NEXT": "Lösen und zum Nächsten gehen",
|
||||
"NAVIGATE_DROPDOWN": "Dropdown-Elemente navigieren",
|
||||
"RESOLVE_CONVERSATION": "Unterhaltung lösen",
|
||||
"GO_TO_CONVERSATION_DASHBOARD": "Zur Konversationsübersicht",
|
||||
"RESOLVE_CONVERSATION": "Unterhaltung als gelöst kennzeichnen",
|
||||
"GO_TO_CONVERSATION_DASHBOARD": "Gehe zur Konversationsübersicht",
|
||||
"ADD_ATTACHMENT": "Anhang hinzufügen",
|
||||
"GO_TO_CONTACTS_DASHBOARD": "Zur Kontaktübersicht",
|
||||
"TOGGLE_SIDEBAR": "Seitenleiste umschalten",
|
||||
"GO_TO_REPORTS_SIDEBAR": "Zur Berichtsseitenleiste",
|
||||
"MOVE_TO_NEXT_TAB": "Zum nächsten Tab in der Konversationsliste gehen",
|
||||
"GO_TO_SETTINGS": "Zu den Einstellungen",
|
||||
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
|
||||
"SWITCH_CONVERSATION_STATUS": "Zum nächsten Konversations-Status wechseln",
|
||||
"SWITCH_TO_PRIVATE_NOTE": "Zu privaten Notizen wechseln",
|
||||
"TOGGLE_RICH_CONTENT_EDITOR": "Rich-Content-Editor umschalten",
|
||||
"SWITCH_TO_REPLY": "Zur Antwort wechseln",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Ιδιότητες",
|
||||
"HEADER_BTN_TXT": "Προσθήκη ιδιότητας",
|
||||
"LOADING": "Λήψη ιδιοτήτων",
|
||||
"SIDEBAR_TXT": "<p><b>Ιδιότητες</b> <p>Μια προσαρμοσμένη ιδιότητα παρακολουθεί γεγονότα σχετικά με τις επαφές σας/συνομιλίες σας — όπως για παράδειγμα συνδρομή, ή όταν γίνεται η πρώτη παραγγελία κ. λπ. <br /><br />Για τη δημιουργία ιδιοτήτων απλά κάντε κλικ στο<b>Προσθήκη Ιδιότητας.</b> Μπορείτε επίσης να επεξεργαστείτε ή να διαγράψετε μια υπάρχουσα Ιδιότητα κάνοντας κλικ στο κουμπί Επεξεργασία ή διαγραφή.</p>",
|
||||
"HEADER": "Προσαρμοζόμενες Ιδιότητες",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Προσθήκη ιδιότητας",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Δημιουργία",
|
||||
"CANCEL_BUTTON_TEXT": "Άκυρο",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Εμφανιζόμενο Όνομα",
|
||||
"PLACEHOLDER": "Εισάγετε το εμφανιζόμενο όνομα της ιδιότητας",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Το όνομα απαιτείται"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Περιγραφή",
|
||||
"PLACEHOLDER": "Εισάγετε την περιγραφή της ιδιότητας",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Η περιγραφή απαιτείται"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Μοντέλο",
|
||||
"PLACEHOLDER": "Παρακαλώ επιλέξτε ένα μοντέλο",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Απαιτείται το μοντέλο"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Ο τύπος απαιτείται"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Κλειδί"
|
||||
"LABEL": "Κλειδί",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Η ιδιότητα προστέθηκε με επιτυχία",
|
||||
"ERROR_MESSAGE": "Δεν ήταν δυνατή η δημιουργία Ιδιότητας, Παρακαλώ δοκιμάστε ξανά αργότερα"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Διαγραφή",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Η ιδιότητα προστέθηκε με επιτυχία.",
|
||||
"ERROR_MESSAGE": "Δεν ήταν δυνατή η διαγραφή της ιδιότητας. Δοκιμάστε ξανά."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Είστε σίγουροι ότι θέλετε να διαγράψετε την ομάδα %{attributeName}",
|
||||
"PLACE_HOLDER": "Παρακαλώ πληκτρολογήστε {attributeName} για επιβεβαίωση",
|
||||
"MESSAGE": "Διαγραφή θα καταργήσει την ιδιότητα",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Διαγραφή ",
|
||||
"NO": "Άκυρο"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Επεξεργασία ιδιότητας",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Ενημέρωση",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Ο πράκτορας ενημερώθηκε επιτυχώς",
|
||||
"ERROR_MESSAGE": "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ιδιότητας, παρακαλώ προσπαθήστε ξανά"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Διαγραφή"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "Δεν δημιουργήθηκαν χαρακτηριστικά",
|
||||
"NOT_FOUND": "Δεν έχουν ρυθμιστεί ιδιότητες"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Ανοιχτές",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Ανοιχτές"
|
||||
},
|
||||
{
|
||||
"TEXT": "Επιλυθείσες",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Επιλύθηκαν"
|
||||
},
|
||||
{
|
||||
"TEXT": "Εκκρεμεί",
|
||||
"VALUE": "εκκρεμεί"
|
||||
"pending": {
|
||||
"TEXT": "Εκκρεμεί"
|
||||
},
|
||||
{
|
||||
"TEXT": "Αναβολή",
|
||||
"VALUE": "αναβολή"
|
||||
"snoozed": {
|
||||
"TEXT": "Αναβολή"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "Παραλήφθηκε από email",
|
||||
"VIEW_TWEET_IN_TWITTER": "Προβολή του tweet στο Twitter",
|
||||
"REPLY_TO_TWEET": "Απάντηση στο tweet",
|
||||
"SENT": "Επιτυχής αποστολή",
|
||||
"NO_MESSAGES": "Κανένα Μήνυμα",
|
||||
"NO_CONTENT": "Μη διαθέσιμο περιεχόμενο",
|
||||
"HIDE_QUOTED_TEXT": "Απόκρυψη Κειμένου Παράθεσης",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Εταιρία",
|
||||
"LOCATION": "Θέση",
|
||||
"CONVERSATION_TITLE": "Λεπτομέρειες συνομιλίας",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Φυλλομετρητής",
|
||||
"OS": "Λειτουργικό",
|
||||
"INITIATED_FROM": "Αρχικοποίηση από",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Εισερχόμενα",
|
||||
"ERROR": "Επιλέξτε ένα κιβώτιο εισερχόμενων"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Θέμα",
|
||||
"PLACEHOLDER": "Θέμα",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Μήνυμα",
|
||||
"PLACEHOLDER": "Γράψτε το μήνυμά σας εδώ",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "Προβολή λεπτομεριών"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Επαφές",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Προσθήκη",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Σημειώσεις"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Προσθήκη",
|
||||
"PLACEHOLDER": "Προσθήκη σημείωσης",
|
||||
"TITLE": "Shift + Enter για δημιουργία σημείωσης"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "Εμφάνιση όλων των σημειώσεων"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Προσθήκη προσαρμοσμένης ιδιότητας",
|
||||
"NOT_AVAILABLE": "Δεν υπάρχουν διαθέσιμες προσαρμοσμένες ιδιότητες για αυτήν την επαφή.",
|
||||
"COPY_SUCCESSFUL": "Αντιγράφτηκε με επιτυχία στο πρόχειρο",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Επεξεργασία ιδιότητας"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Δημιουργία προσαρμοσμένης ιδιότητας",
|
||||
"DESC": "Προσθέστε προσαρμοσμένες πληροφορίες σε αυτήν την επαφή."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Τιμή ιδιότητας",
|
||||
"PLACEHOLDER": "π.χ.: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Ο πράκτορας ενημερώθηκε επιτυχώς",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Προηγούμενες συνομιλίες"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Ο πράκτορας ενημερώθηκε επιτυχώς",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Προσθήκη",
|
||||
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "Προς",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "ημέρες δοκιμαστικής περιόδου απομένουν.",
|
||||
"TRAIL_BUTTON": "Αγόρασε τώρα"
|
||||
"TRAIL_BUTTON": "Αγόρασε τώρα",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,7 +143,7 @@
|
|||
"ACCOUNT_SETTINGS": "Ρυθμίσεις Λογαριασμού",
|
||||
"APPLICATIONS": "Εφαρμογές",
|
||||
"LABELS": "Ετικέτες",
|
||||
"ATTRIBUTES": "Ιδιότητες",
|
||||
"CUSTOM_ATTRIBUTES": "Προσαρμοζόμενες Ιδιότητες",
|
||||
"TEAMS": "Ομάδες",
|
||||
"ALL_CONTACTS": "Όλες Οι Επαφές",
|
||||
"TAGGED_WITH": "Ετικέτα με",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Add Attribute",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Custom Attributes",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Add attribute",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Create",
|
||||
"CANCEL_BUTTON_TEXT": "Cancel",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Display Name",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Description",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Model",
|
||||
"PLACEHOLDER": "Please select a model",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Model is required"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Type is required"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Key"
|
||||
"LABEL": "Key",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Delete",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "Are you sure want to delete - %{attributeName}",
|
||||
"PLACE_HOLDER": "Please type {attributeName} to confirm",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Delete ",
|
||||
"NO": "Cancel"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Update",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -72,8 +75,8 @@
|
|||
"DELETE": "Delete"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Open",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Open"
|
||||
},
|
||||
{
|
||||
"TEXT": "Resolved",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Resolved"
|
||||
},
|
||||
{
|
||||
"TEXT": "Pending",
|
||||
"VALUE": "pending"
|
||||
"pending": {
|
||||
"TEXT": "Pending"
|
||||
},
|
||||
{
|
||||
"TEXT": "Snoozed",
|
||||
"VALUE": "snoozed"
|
||||
"snoozed": {
|
||||
"TEXT": "Snoozed"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Company",
|
||||
"LOCATION": "Location",
|
||||
"CONVERSATION_TITLE": "Conversation Details",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Browser",
|
||||
"OS": "Operating System",
|
||||
"INITIATED_FROM": "Initiated from",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Inbox",
|
||||
"ERROR": "Select an inbox"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Subject",
|
||||
"PLACEHOLDER": "Subject",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Message",
|
||||
"PLACEHOLDER": "Write your message here",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "View details"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Contacts",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Add",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Notes"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Add",
|
||||
"PLACEHOLDER": "Add a note",
|
||||
"TITLE": "Shift + Enter to create a note"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "View all notes"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Add custom attribute",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create custom attribute",
|
||||
"DESC": "Add custom information to this contact."
|
||||
|
@ -239,7 +261,29 @@
|
|||
"VALUE": {
|
||||
"LABEL": "Attribute value",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Previous Conversations"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Add",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "To",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -79,5 +79,50 @@
|
|||
"BUTTON": {
|
||||
"REFRESH": "Refresh"
|
||||
}
|
||||
},
|
||||
"COMMAND_BAR": {
|
||||
"SEARCH_PLACEHOLDER": "Search or jump to",
|
||||
"SECTIONS": {
|
||||
"GENERAL": "General",
|
||||
"REPORTS": "Reports",
|
||||
"CONVERSATION": "Conversation",
|
||||
"CHANGE_ASSIGNEE": "Change Assignee",
|
||||
"CHANGE_TEAM": "Change Team",
|
||||
"ADD_LABEL": "Add label to the conversation",
|
||||
"REMOVE_LABEL": "Remove label from the conversation",
|
||||
"SETTINGS": "Settings"
|
||||
},
|
||||
"COMMANDS": {
|
||||
"GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
|
||||
"GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
|
||||
"GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview",
|
||||
"GO_TO_AGENT_REPORTS": "Go to Agent Reports",
|
||||
"GO_TO_LABEL_REPORTS": "Go to Label Reports",
|
||||
"GO_TO_INBOX_REPORTS": "Go to Inbox Reports",
|
||||
"GO_TO_TEAM_REPORTS": "Go to Team Reports",
|
||||
"GO_TO_SETTINGS_AGENTS": "Go to Agent Settings",
|
||||
"GO_TO_SETTINGS_TEAMS": "Go to Team Settings",
|
||||
"GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings",
|
||||
"GO_TO_SETTINGS_LABELS": "Go to Label Settings",
|
||||
"GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings",
|
||||
"GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings",
|
||||
"GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings",
|
||||
"GO_TO_SETTINGS_PROFILE": "Go to Profile Settings",
|
||||
"GO_TO_NOTIFICATIONS": "Go to Notifications",
|
||||
|
||||
"ADD_LABELS_TO_CONVERSATION": "Add label to the conversation",
|
||||
"ASSIGN_AN_AGENT": "Assign an agent",
|
||||
"ASSIGN_A_TEAM": "Assign a team",
|
||||
"MUTE_CONVERSATION": "Mute conversation",
|
||||
"UNMUTE_CONVERSATION": "Unmute conversation",
|
||||
"REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation",
|
||||
"REOPEN_CONVERSATION": "Reopen conversation",
|
||||
"RESOLVE_CONVERSATION": "Resolve conversation",
|
||||
"SEND_TRANSCRIPT": "Send an email transcript",
|
||||
"SNOOZE_CONVERSATION": "Snooze Conversation",
|
||||
"UNTIL_NEXT_REPLY": "Until next reply",
|
||||
"UNTIL_NEXT_WEEK": "Until next week",
|
||||
"UNTIL_TOMORROW": "Until tomorrow"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,7 +103,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "days trial remaining.",
|
||||
"TRAIL_BUTTON": "Buy Now"
|
||||
"TRAIL_BUTTON": "Buy Now",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -138,7 +139,7 @@
|
|||
"ACCOUNT_SETTINGS": "Account Settings",
|
||||
"APPLICATIONS": "Applications",
|
||||
"LABELS": "Labels",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Custom Attributes",
|
||||
"TEAMS": "Teams",
|
||||
"ALL_CONTACTS": "All Contacts",
|
||||
"TAGGED_WITH": "Tagged with",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "Attributes",
|
||||
"HEADER_BTN_TXT": "Add Attribute",
|
||||
"LOADING": "Fetching attributes",
|
||||
"SIDEBAR_TXT": "<p><b>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 Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
|
||||
"HEADER": "Atributos personalizados",
|
||||
"HEADER_BTN_TXT": "Add Custom Attribute",
|
||||
"LOADING": "Fetching custom attributes",
|
||||
"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>",
|
||||
"ADD": {
|
||||
"TITLE": "Add attribute",
|
||||
"TITLE": "Add Custom Attribute",
|
||||
"SUBMIT": "Crear",
|
||||
"CANCEL_BUTTON_TEXT": "Cancelar",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "Display Name",
|
||||
"PLACEHOLDER": "Enter attribute display name",
|
||||
"PLACEHOLDER": "Enter custom attribute display name",
|
||||
"ERROR": "Name is required"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "Descripción",
|
||||
"PLACEHOLDER": "Enter attribute description",
|
||||
"PLACEHOLDER": "Enter custom attribute description",
|
||||
"ERROR": "Description is required"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "Model",
|
||||
"PLACEHOLDER": "Please select a model",
|
||||
"LABEL": "Applies to",
|
||||
"PLACEHOLDER": "Please select one",
|
||||
"ERROR": "Model is required"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "Type is required"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "Key"
|
||||
"LABEL": "Key",
|
||||
"PLACEHOLDER": "Enter custom attribute key",
|
||||
"ERROR": "Key is required",
|
||||
"IN_VALID": "Invalid key"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
|
||||
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "Eliminar",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
|
||||
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
|
||||
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "¿Está seguro que quiere borrar - %{attributeName}?",
|
||||
"PLACE_HOLDER": "Por favor, escriba {attributeName} para confirmar",
|
||||
"MESSAGE": "Deleting will remove the attribute",
|
||||
"MESSAGE": "Deleting will remove the custom attribute",
|
||||
"YES": "Eliminar ",
|
||||
"NO": "Cancelar"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "Edit attribute",
|
||||
"TITLE": "Edit Custom Attribute",
|
||||
"UPDATE_BUTTON_TEXT": "Actualizar",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
|
||||
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
|
||||
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "Eliminar"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "There are no attributes created",
|
||||
"NOT_FOUND": "There are no attributes configured"
|
||||
"404": "There are no custom attributes created",
|
||||
"NOT_FOUND": "There are no custom attributes configured"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "Abrir",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "Abrir"
|
||||
},
|
||||
{
|
||||
"TEXT": "Resuelto",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "Resuelto"
|
||||
},
|
||||
{
|
||||
"TEXT": "Pending",
|
||||
"VALUE": "pending"
|
||||
"pending": {
|
||||
"TEXT": "Pending"
|
||||
},
|
||||
{
|
||||
"TEXT": "Snoozed",
|
||||
"VALUE": "snoozed"
|
||||
"snoozed": {
|
||||
"TEXT": "Snoozed"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "Recibido por correo electrónico",
|
||||
"VIEW_TWEET_IN_TWITTER": "Ver trino en Twitter",
|
||||
"REPLY_TO_TWEET": "Responder a éste trino",
|
||||
"SENT": "Sent successfully",
|
||||
"NO_MESSAGES": "No hay mensajes",
|
||||
"NO_CONTENT": "No hay contenido disponible",
|
||||
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"COMPANY": "Empresa",
|
||||
"LOCATION": "Ubicación",
|
||||
"CONVERSATION_TITLE": "Detalles de la conversación",
|
||||
"VIEW_PROFILE": "View Profile",
|
||||
"BROWSER": "Navegador",
|
||||
"OS": "Sistema operativo",
|
||||
"INITIATED_FROM": "Iniciado desde",
|
||||
|
@ -154,6 +155,11 @@
|
|||
"LABEL": "Bandeja de entrada",
|
||||
"ERROR": "Seleccione una bandeja de entrada"
|
||||
},
|
||||
"SUBJECT": {
|
||||
"LABEL": "Subject",
|
||||
"PLACEHOLDER": "Subject",
|
||||
"ERROR": "Subject can't be empty"
|
||||
},
|
||||
"MESSAGE": {
|
||||
"LABEL": "Mensaje",
|
||||
"PLACEHOLDER": "Escriba su mensaje aquí",
|
||||
|
@ -188,6 +194,10 @@
|
|||
"VIEW_DETAILS": "Ver detalles"
|
||||
}
|
||||
},
|
||||
"CONTACT_PROFILE": {
|
||||
"BACK_BUTTON": "Contactos",
|
||||
"LOADING": "Loading contact profile..."
|
||||
},
|
||||
"REMINDER": {
|
||||
"ADD_BUTTON": {
|
||||
"BUTTON": "Añadir",
|
||||
|
@ -199,16 +209,21 @@
|
|||
}
|
||||
},
|
||||
"NOTES": {
|
||||
"FETCHING_NOTES": "Fetching notes...",
|
||||
"NOT_AVAILABLE": "There are no notes created for this contact",
|
||||
"HEADER": {
|
||||
"TITLE": "Notas"
|
||||
},
|
||||
"LIST": {
|
||||
"LABEL": "added a note"
|
||||
},
|
||||
"ADD": {
|
||||
"BUTTON": "Añadir",
|
||||
"PLACEHOLDER": "Añadir nota",
|
||||
"TITLE": "Shift + Enter para crear una nota"
|
||||
},
|
||||
"FOOTER": {
|
||||
"BUTTON": "Ver todas las notas"
|
||||
"CONTENT_HEADER": {
|
||||
"DELETE": "Delete note"
|
||||
}
|
||||
},
|
||||
"EVENTS": {
|
||||
|
@ -222,8 +237,15 @@
|
|||
}
|
||||
},
|
||||
"CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Add attributes",
|
||||
"BUTTON": "Add custom attribute",
|
||||
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
|
||||
"COPY_SUCCESSFUL": "Copiado al portapapeles satisfactoriamente",
|
||||
"ACTIONS": {
|
||||
"COPY": "Copy attribute",
|
||||
"DELETE": "Delete attribute",
|
||||
"EDIT": "Edit attribute"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create custom attribute",
|
||||
"DESC": "Add custom information to this contact."
|
||||
|
@ -233,13 +255,35 @@
|
|||
"CANCEL": "Cancelar",
|
||||
"NAME": {
|
||||
"LABEL": "Custom attribute name",
|
||||
"PLACEHOLDER": "Eg: shopify id",
|
||||
"PLACEHOLDER": "Ej: shopify id",
|
||||
"ERROR": "Invalid custom attribute name"
|
||||
},
|
||||
"VALUE": {
|
||||
"LABEL": "Attribute value",
|
||||
"PLACEHOLDER": "Eg: 11901 "
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Create new attribute ",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"VALIDATIONS": {
|
||||
"REQUIRED": "Valid value is required",
|
||||
"INVALID_URL": "Invalid URL"
|
||||
}
|
||||
},
|
||||
"MERGE_CONTACTS": {
|
||||
|
|
|
@ -156,6 +156,27 @@
|
|||
"PREVIOUS_CONVERSATION": "Conversaciones anteriores"
|
||||
}
|
||||
},
|
||||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||||
"ADD_BUTTON_TEXT": "Create attribute",
|
||||
"UPDATE": {
|
||||
"SUCCESS": "Attribute updated successfully",
|
||||
"ERROR": "Unable to update attribute. Please try again later"
|
||||
},
|
||||
"ADD": {
|
||||
"TITLE": "Añadir",
|
||||
"SUCCESS": "Attribute added successfully",
|
||||
"ERROR": "Unable to add attribute. Please try again later"
|
||||
},
|
||||
"DELETE": {
|
||||
"SUCCESS": "Attribute deleted successfully",
|
||||
"ERROR": "Unable to delete attribute. Please try again later"
|
||||
},
|
||||
"ATTRIBUTE_SELECT": {
|
||||
"TITLE": "Add attributes",
|
||||
"PLACEHOLDER": "Search attributes",
|
||||
"NO_RESULT": "No attributes found"
|
||||
}
|
||||
},
|
||||
"EMAIL_HEADER": {
|
||||
"TO": "Para",
|
||||
"BCC": "Bcc",
|
||||
|
|
|
@ -346,7 +346,7 @@
|
|||
"ENABLE_EMAIL_COLLECT_BOX": "Activar caja de recolección de correo electrónico",
|
||||
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Activar o desactivar la caja de recolección de correo electrónico",
|
||||
"AUTO_ASSIGNMENT": "Activar asignación automática",
|
||||
"ENABLE_CSAT": "Enable CSAT",
|
||||
"ENABLE_CSAT": "Habilitar Encuesta de Satisfacción",
|
||||
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
|
||||
"INBOX_UPDATE_TITLE": "Ajustes de la Bandeja de Entrada",
|
||||
"INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de tu bandeja de entrada",
|
||||
|
|
|
@ -107,7 +107,8 @@
|
|||
},
|
||||
"APP_GLOBAL": {
|
||||
"TRIAL_MESSAGE": "días de prueba restantes.",
|
||||
"TRAIL_BUTTON": "Comprar ahora"
|
||||
"TRAIL_BUTTON": "Comprar ahora",
|
||||
"DELETED_USER": "Deleted User"
|
||||
},
|
||||
"COMPONENTS": {
|
||||
"CODE": {
|
||||
|
@ -142,14 +143,14 @@
|
|||
"ACCOUNT_SETTINGS": "Configuración de la cuenta",
|
||||
"APPLICATIONS": "Aplicaciones",
|
||||
"LABELS": "Etiquetas",
|
||||
"ATTRIBUTES": "Attributes",
|
||||
"CUSTOM_ATTRIBUTES": "Atributos personalizados",
|
||||
"TEAMS": "Equipos",
|
||||
"ALL_CONTACTS": "Todos los contactos",
|
||||
"TAGGED_WITH": "Etiquetado con",
|
||||
"REPORTS_OVERVIEW": "Overview",
|
||||
"CSAT": "CSAT",
|
||||
"CSAT": "Encuestas de Satisfacción",
|
||||
"CAMPAIGNS": "Campañas",
|
||||
"ONGOING": "Ongoing",
|
||||
"ONGOING": "En Curso",
|
||||
"ONE_OFF": "One off",
|
||||
"REPORTS_AGENT": "Agentes",
|
||||
"REPORTS_LABEL": "Etiquetas",
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
{
|
||||
"ATTRIBUTES_MGMT": {
|
||||
"HEADER": "ویژگی ها",
|
||||
"HEADER_BTN_TXT": "افزودن ویژگی",
|
||||
"LOADING": "واکشی ویژگی ها",
|
||||
"SIDEBAR_TXT": "<p><b>ویژگی ها</b> <p> یک ویژگی سفارشی اطلاعات مربوط به مخاطبین یا مکالمات شما را ردیابی می کند - مانند طرح های اشتراکی یا زمانی که اولین مورد را سفارش داده اند و غیره. <br /><br /> برای ایجاد ویژگیها ، فقط روی <b> افزودن ویژگی. </b> کلیک کنید. همچنین می توانید با کلیک روی دکمه ویرایش یا حذف ، یک ویژگی موجود را ویرایش یا حذف کنید. </p>",
|
||||
"HEADER": "ویژگیهای سفارشی",
|
||||
"HEADER_BTN_TXT": "اضافه کردن ویژگی سفارشی",
|
||||
"LOADING": "واکشی ویژگیهای سفارشی",
|
||||
"SIDEBAR_TXT": "<p><b>ویژگیهای سفارشی</b> <p>یک ویژگی سفارشی اطلاعات مربوط به مخاطبین یا گفتگو شما را ردیابی میکند — مانند طرحهای اشتراکی یا زمانی که اولین مورد را سفارش دادهاند و غیره. <br /><br />برای ایجاد ویژگیهای سفارشی، فقط روی <b>افزودن ویژگی سفارشی.</b> کلیک کنید. همچنین میتوانید با کلیک روی دکمه ویرایش یا حذف، یک ویژگی سفارشی موجود را ویرایش یا حذف کنید.</p>",
|
||||
"ADD": {
|
||||
"TITLE": "افزودن ویژگی",
|
||||
"TITLE": "اضافه کردن ویژگی سفارشی",
|
||||
"SUBMIT": "ايجاد كردن",
|
||||
"CANCEL_BUTTON_TEXT": "انصراف",
|
||||
"FORM": {
|
||||
"NAME": {
|
||||
"LABEL": "نمایش نام",
|
||||
"PLACEHOLDER": "نام نمایشی ویژگی را وارد کنید",
|
||||
"PLACEHOLDER": "نام نمایشی ویژگی سفارشی را وارد کنید",
|
||||
"ERROR": "نام الزامی است"
|
||||
},
|
||||
"DESC": {
|
||||
"LABEL": "توضیحات",
|
||||
"PLACEHOLDER": "توضیحات ویژگی را وارد کنید",
|
||||
"PLACEHOLDER": "توضیحات ویژگی سفارشی را وارد کنید",
|
||||
"ERROR": "توضیحات الزامی است"
|
||||
},
|
||||
"MODEL": {
|
||||
"LABEL": "مدل",
|
||||
"PLACEHOLDER": "لطفا مدل را انتخاب کنید",
|
||||
"LABEL": "شامل",
|
||||
"PLACEHOLDER": "لطفا یکی را انتخاب کنید",
|
||||
"ERROR": "مدل مورد نیاز است"
|
||||
},
|
||||
"TYPE": {
|
||||
|
@ -30,34 +30,37 @@
|
|||
"ERROR": "نوع الزامی است"
|
||||
},
|
||||
"KEY": {
|
||||
"LABEL": "کلید"
|
||||
"LABEL": "کلید",
|
||||
"PLACEHOLDER": "کلید ویژگی سفارشی را وارد کنید",
|
||||
"ERROR": "کلید الزامی است",
|
||||
"IN_VALID": "کلید نامعتبر"
|
||||
}
|
||||
},
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "ویژگی با موفقیت اضافه شد",
|
||||
"ERROR_MESSAGE": "ویژگی ایجاد نشد ، لطفاً بعداً دوباره امتحان کنید"
|
||||
"SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت اضافه شد",
|
||||
"ERROR_MESSAGE": "نمیتوان ویژگی سفارشی ایجاد کرد، لطفا بعداً دوباره امتحان کنید"
|
||||
}
|
||||
},
|
||||
"DELETE": {
|
||||
"BUTTON_TEXT": "حذف",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "ویژگی با موفقیت حذف شد.",
|
||||
"ERROR_MESSAGE": "ویژگی حذف نشد. دوباره امتحان کنید."
|
||||
"SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت حذف شد.",
|
||||
"ERROR_MESSAGE": "ویژگی سفارشی حذف نشد. دوباره امتحان کنید."
|
||||
},
|
||||
"CONFIRM": {
|
||||
"TITLE": "آیا مطمئن هستید که می خواهید حذف کنید - %{attributeName}",
|
||||
"PLACE_HOLDER": "برای تایید لطفا {attributeName} را تایپ کنید",
|
||||
"MESSAGE": "با حذف ویژگی ، ویژگی به طور کامل پاک می شود",
|
||||
"MESSAGE": "با حذف ویژگی، ویژگی سفارشی به طور کامل حذف میشود",
|
||||
"YES": "حذف ",
|
||||
"NO": "انصراف"
|
||||
}
|
||||
},
|
||||
"EDIT": {
|
||||
"TITLE": "ویرایش ویژگی",
|
||||
"TITLE": "ویرایش ویژگی سفارشی",
|
||||
"UPDATE_BUTTON_TEXT": "اعمال شود",
|
||||
"API": {
|
||||
"SUCCESS_MESSAGE": "ویژگی با موفقیت به روز شد",
|
||||
"ERROR_MESSAGE": "هنگام بروزرسانی ویژگی خطایی روی داد ، لطفاً دوباره امتحان کنید"
|
||||
"SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت بهروزرسانی شد",
|
||||
"ERROR_MESSAGE": "هنگام بهروزرسانی ویژگی سفارشی خطایی روی داد، لطفا دوباره امتحان کنید"
|
||||
}
|
||||
},
|
||||
"TABS": {
|
||||
|
@ -77,8 +80,8 @@
|
|||
"DELETE": "حذف"
|
||||
},
|
||||
"EMPTY_RESULT": {
|
||||
"404": "هیچ ویژگی ایجاد نشده است",
|
||||
"NOT_FOUND": "هیچ ویژگی پیکربندی نشده است"
|
||||
"404": "هیچ ویژگی سفارشی ایجاد نشده است",
|
||||
"NOT_FOUND": "هیچ ویژگی سفارشی پیکربندی نشده است"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,24 +38,20 @@
|
|||
"COUNT_KEY": "allCount"
|
||||
}
|
||||
],
|
||||
"CHAT_STATUS_ITEMS": [
|
||||
{
|
||||
"TEXT": "باز",
|
||||
"VALUE": "open"
|
||||
"CHAT_STATUS_FILTER_ITEMS": {
|
||||
"open": {
|
||||
"TEXT": "باز"
|
||||
},
|
||||
{
|
||||
"TEXT": "حل شده",
|
||||
"VALUE": "resolved"
|
||||
"resolved": {
|
||||
"TEXT": "حل شده"
|
||||
},
|
||||
{
|
||||
"TEXT": "در انتظار",
|
||||
"VALUE": "در انتظار"
|
||||
"pending": {
|
||||
"TEXT": "در انتظار"
|
||||
},
|
||||
{
|
||||
"TEXT": "به تعویق افتاد",
|
||||
"VALUE": "به تعویق افتاد"
|
||||
"snoozed": {
|
||||
"TEXT": "به تعویق افتاد"
|
||||
}
|
||||
],
|
||||
},
|
||||
"ATTACHMENTS": {
|
||||
"image": {
|
||||
"ICON": "ion-image",
|
||||
|
@ -85,6 +81,7 @@
|
|||
"RECEIVED_VIA_EMAIL": "از طریق ایمیل دریافت شد",
|
||||
"VIEW_TWEET_IN_TWITTER": "مشاهده توییت در توییتر",
|
||||
"REPLY_TO_TWEET": "پاسخ به این توییت",
|
||||
"SENT": "با موفقیت ارسال شد",
|
||||
"NO_MESSAGES": "هیچ پیامی وجود ندارد",
|
||||
"NO_CONTENT": "هیچ محتوایی موجود نیست",
|
||||
"HIDE_QUOTED_TEXT": "مخفی کردن متن نقل قول شده",
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue