Merge branch 'release/1.22.0'

This commit is contained in:
Sojan 2021-11-15 21:50:36 +05:30
commit 01577acb2e
505 changed files with 11396 additions and 4223 deletions

View File

@ -17,7 +17,11 @@ checks:
method-count: method-count:
enabled: true enabled: true
config: config:
threshold: 25 threshold: 30
file-lines:
enabled: true
config:
threshold: 300
exclude_patterns: exclude_patterns:
- "spec/" - "spec/"
- "**/specs/" - "**/specs/"

View File

@ -14,6 +14,7 @@ Metrics/ClassLength:
- 'app/mailers/conversation_reply_mailer.rb' - 'app/mailers/conversation_reply_mailer.rb'
- 'app/models/message.rb' - 'app/models/message.rb'
- 'app/builders/messages/facebook/message_builder.rb' - 'app/builders/messages/facebook/message_builder.rb'
- 'app/controllers/api/v1/accounts/contacts_controller.rb'
RSpec/ExampleLength: RSpec/ExampleLength:
Max: 25 Max: 25
Style/Documentation: Style/Documentation:

View File

@ -144,6 +144,8 @@ group :test do
gem 'cypress-on-rails', '~> 1.0' gem 'cypress-on-rails', '~> 1.0'
# fast cleaning of database # fast cleaning of database
gem 'database_cleaner' gem 'database_cleaner'
# mock http calls
gem 'webmock'
end end
group :development, :test do group :development, :test do
@ -155,6 +157,7 @@ group :development, :test do
gem 'active_record_query_trace' gem 'active_record_query_trace'
gem 'bundle-audit', require: false gem 'bundle-audit', require: false
gem 'byebug', platform: :mri gem 'byebug', platform: :mri
gem 'climate_control'
gem 'factory_bot_rails' gem 'factory_bot_rails'
gem 'faker' gem 'faker'
gem 'listen' gem 'listen'
@ -170,5 +173,4 @@ group :development, :test do
gem 'simplecov', '0.17.1', require: false gem 'simplecov', '0.17.1', require: false
gem 'spring' gem 'spring'
gem 'spring-watcher-listen' gem 'spring-watcher-listen'
gem 'webmock'
end end

View File

@ -133,6 +133,7 @@ GEM
bundler (>= 1.2.0, < 3) bundler (>= 1.2.0, < 3)
thor (~> 1.0) thor (~> 1.0)
byebug (11.1.3) byebug (11.1.3)
climate_control (1.0.1)
coderay (1.1.3) coderay (1.1.3)
commonmarker (0.23.2) commonmarker (0.23.2)
concurrent-ruby (1.1.9) concurrent-ruby (1.1.9)
@ -657,6 +658,7 @@ DEPENDENCIES
bullet bullet
bundle-audit bundle-audit
byebug byebug
climate_control
commonmarker commonmarker
cypress-on-rails (~> 1.0) cypress-on-rails (~> 1.0)
database_cleaner database_cleaner

View File

@ -38,6 +38,10 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
@outgoing_echo ? :outgoing : :incoming @outgoing_echo ? :outgoing : :incoming
end end
def message_identifier
message[:mid]
end
def message_source_id def message_source_id
@outgoing_echo ? recipient_id : sender_id @outgoing_echo ? recipient_id : sender_id
end end
@ -66,10 +70,6 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
@messaging[:message][:text] @messaging[:message][:text]
end end
def content_attributes
{ message_id: @messaging[:message][:mid] }
end
def build_message def build_message
return if @outgoing_echo && already_sent_from_chatwoot? return if @outgoing_echo && already_sent_from_chatwoot?
@ -103,22 +103,17 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
account_id: conversation.account_id, account_id: conversation.account_id,
inbox_id: conversation.inbox_id, inbox_id: conversation.inbox_id,
message_type: message_type, message_type: message_type,
source_id: message_source_id, source_id: message_identifier,
content: message_content, content: message_content,
content_attributes: content_attributes,
sender: @outgoing_echo ? nil : contact sender: @outgoing_echo ? nil : contact
} }
end end
def already_sent_from_chatwoot? def already_sent_from_chatwoot?
cw_message = conversation.messages.where( cw_message = conversation.messages.where(
source_id: nil, source_id: @messaging[:message][:mid]
message_type: 'outgoing',
content: message_content,
private: false,
status: :sent
).first ).first
cw_message.update(content_attributes: content_attributes) if cw_message.present?
cw_message.present? cw_message.present?
end end

View File

@ -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

View File

@ -1,5 +1,4 @@
class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts::BaseController class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts::Contacts::BaseController
before_action :ensure_contact
before_action :ensure_inbox, only: [:create] before_action :ensure_inbox, only: [:create]
def create def create
@ -13,8 +12,4 @@ class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts:
@inbox = Current.account.inboxes.find(params[:inbox_id]) @inbox = Current.account.inboxes.find(params[:inbox_id])
authorize @inbox, :show? authorize @inbox, :show?
end end
def ensure_contact
@contact = Current.account.contacts.find(params[:contact_id])
end
end end

View File

@ -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 def index
@conversations = Current.account.conversations.includes( @conversations = Current.account.conversations.includes(
:assignee, :contact, :inbox, :taggings :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 end
private private
@ -14,8 +14,4 @@ class Api::V1::Accounts::Contacts::ConversationsController < Api::V1::Accounts::
[] []
end end
end end
def permitted_params
params.permit(:contact_id)
end
end end

View File

@ -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 include LabelConcern
private private
def model def model
@model ||= Current.account.contacts.find(permitted_params[:contact_id]) @model ||= @contact
end end
def permitted_params def permitted_params
params.permit(:contact_id, labels: []) params.permit(labels: [])
end end
end end

View 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

View File

@ -1,16 +1,18 @@
class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
include Sift include Sift
sort_on :email, type: :string 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 :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 RESULTS_PER_PAGE = 15
before_action :check_authorization before_action :check_authorization
before_action :set_current_page, only: [:index, :active, :search] 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] before_action :set_include_contact_inboxes, only: [:index, :search]
def index def index
@ -50,11 +52,24 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
def show; end 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 def contactable_inboxes
@all_contactable_inboxes = Contacts::ContactableInboxesService.new(contact: @contact).get @all_contactable_inboxes = Contacts::ContactableInboxesService.new(contact: @contact).get
@contactable_inboxes = @all_contactable_inboxes.select { |contactable_inbox| policy(contactable_inbox[:inbox]).show? } @contactable_inboxes = @all_contactable_inboxes.select { |contactable_inbox| policy(contactable_inbox[:inbox]).show? }
end 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 def create
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@contact = Current.account.contacts.new(contact_params) @contact = Current.account.contacts.new(contact_params)
@ -91,10 +106,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
def resolved_contacts def resolved_contacts
return @resolved_contacts if @resolved_contacts return @resolved_contacts if @resolved_contacts
@resolved_contacts = Current.account.contacts @resolved_contacts = Current.account.contacts.resolved_contacts
.where.not(email: [nil, ''])
.or(Current.account.contacts.where.not(phone_number: [nil, '']))
.or(Current.account.contacts.where.not(identifier: [nil, '']))
@resolved_contacts = @resolved_contacts.tagged_with(params[:labels], any: true) if params[:labels].present? @resolved_contacts = @resolved_contacts.tagged_with(params[:labels], any: true) if params[:labels].present?
@resolved_contacts @resolved_contacts
end end

View File

@ -2,7 +2,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
include Events::Types include Events::Types
include DateRangeHelper 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] before_action :contact_inbox, only: [:create]
def index def index
@ -31,6 +31,12 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
def show; end def show; end
def filter
result = ::Conversations::FilterService.new(params.permit!, current_user).perform
@conversations = result[:conversations]
@conversations_count = result[:count]
end
def mute def mute
@conversation.mute! @conversation.mute!
head :ok head :ok
@ -60,9 +66,9 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
def toggle_typing_status def toggle_typing_status
case params[:typing_status] case params[:typing_status]
when 'on' when 'on'
trigger_typing_event(CONVERSATION_TYPING_ON) trigger_typing_event(CONVERSATION_TYPING_ON, params[:is_private])
when 'off' when 'off'
trigger_typing_event(CONVERSATION_TYPING_OFF) trigger_typing_event(CONVERSATION_TYPING_OFF, params[:is_private])
end end
head :ok head :ok
end 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] @conversation.snoozed_until = parse_date_time(params[:snoozed_until].to_s) if params[:snoozed_until]
end end
def trigger_typing_event(event) def trigger_typing_event(event, is_private)
user = current_user.presence || @resource 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 end
def conversation def conversation

View File

@ -25,9 +25,7 @@ class Api::V1::Accounts::CustomAttributeDefinitionsController < Api::V1::Account
private private
def fetch_custom_attributes_definitions def fetch_custom_attributes_definitions
@custom_attribute_definitions = Current.account.custom_attribute_definitions.where( @custom_attribute_definitions = Current.account.custom_attribute_definitions.with_attribute_model(permitted_params[:attribute_model])
attribute_model: permitted_params[:attribute_model] || DEFAULT_ATTRIBUTE_MODEL
)
end end
def fetch_custom_attribute_definition def fetch_custom_attribute_definition

View File

@ -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] @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) 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 update_channel_feature_flags
end end

View File

@ -55,7 +55,7 @@ class Api::V1::AccountsController < Api::BaseController
end end
def check_signup_enabled 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 end
def pundit_user def pundit_user

View File

@ -11,11 +11,19 @@ class Api::V1::Widget::ContactsController < Api::V1::Widget::BaseController
render json: contact_identify_action.perform render json: contact_identify_action.perform
end 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 private
def process_hmac def process_hmac
return if params[:identifier_hash].blank? return if params[:identifier_hash].blank? && !@web_widget.hmac_mandatory
raise StandardError, 'HMAC failed: Invalid Identifier Hash Provided' unless valid_hmac?
render json: { error: 'HMAC failed: Invalid Identifier Hash Provided' }, status: :unauthorized unless valid_hmac?
@contact_inbox.update(hmac_verified: true) @contact_inbox.update(hmac_verified: true)
end end

View File

@ -27,7 +27,9 @@ class DashboardController < ActionController::Base
'ANALYTICS_TOKEN', 'ANALYTICS_TOKEN',
'ANALYTICS_HOST' 'ANALYTICS_HOST'
).merge( ).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 end

View File

@ -6,8 +6,8 @@ class AttributeAPI extends ApiClient {
super('custom_attribute_definitions', { accountScoped: true }); super('custom_attribute_definitions', { accountScoped: true });
} }
getAttributesByModel(modelId) { getAttributesByModel() {
return axios.get(`${this.url}?attribute_model=${modelId}`); return axios.get(this.url);
} }
} }

View File

@ -2,7 +2,27 @@ import ApiClient from './ApiClient';
class ContactNotes extends ApiClient { class ContactNotes extends ApiClient {
constructor() { 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);
} }
} }

View File

@ -60,6 +60,12 @@ class ContactAPI extends ApiClient {
headers: { 'Content-Type': 'multipart/form-data' }, 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(); export default new ContactAPI();

View File

@ -51,9 +51,10 @@ class ConversationApi extends ApiClient {
return axios.post(`${this.url}/${id}/update_last_seen`); 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`, { return axios.post(`${this.url}/${conversationId}/toggle_typing_status`, {
typing_status: status, typing_status: status,
is_private: isPrivate
}); });
} }
@ -80,6 +81,12 @@ class ConversationApi extends ApiClient {
sendEmailTranscript({ conversationId, email }) { sendEmailTranscript({ conversationId, email }) {
return axios.post(`${this.url}/${conversationId}/transcript`, { 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(); export default new ConversationApi();

View File

@ -8,8 +8,8 @@ export const buildCreatePayload = ({
contentAttributes, contentAttributes,
echoId, echoId,
file, file,
ccEmails, ccEmails = '',
bccEmails, bccEmails = '',
}) => { }) => {
let payload; let payload;
if (file) { if (file) {
@ -47,8 +47,8 @@ class MessageApi extends ApiClient {
contentAttributes, contentAttributes,
echo_id: echoId, echo_id: echoId,
file, file,
ccEmails, ccEmails = '',
bccEmails, bccEmails = '',
}) { }) {
return axios({ return axios({
method: 'post', method: 'post',

View File

@ -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', () => { it('#importContacts', () => {
const file = 'file'; const file = 'file';
contactAPI.importContacts(file); contactAPI.importContacts(file);

View 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' },
}
);
});
}); });
}); });

View File

@ -35,12 +35,14 @@ describe('#ConversationAPI', () => {
message: 'test content', message: 'test content',
echoId: 12, echoId: 12,
isPrivate: true, isPrivate: true,
file: new Blob(['test-content'], { type: 'application/pdf' }), file: new Blob(['test-content'], { type: 'application/pdf' }),
}); });
expect(formPayload).toBeInstanceOf(FormData); expect(formPayload).toBeInstanceOf(FormData);
expect(formPayload.get('content')).toEqual('test content'); expect(formPayload.get('content')).toEqual('test content');
expect(formPayload.get('echo_id')).toEqual('12'); expect(formPayload.get('echo_id')).toEqual('12');
expect(formPayload.get('private')).toEqual('true'); expect(formPayload.get('private')).toEqual('true');
expect(formPayload.get('cc_emails')).toEqual('');
}); });
it('builds object payload if file is not available', () => { it('builds object payload if file is not available', () => {
@ -56,6 +58,8 @@ describe('#ConversationAPI', () => {
private: false, private: false,
echo_id: 12, echo_id: 12,
content_attributes: { in_reply_to: 12 }, content_attributes: { in_reply_to: 12 },
bcc_emails: '',
cc_emails: '',
}); });
}); });
}); });

View File

@ -9,7 +9,7 @@
.card { .card {
margin-bottom: var(--space-small); margin-bottom: var(--space-small);
padding: var(--space-small); padding: var(--space-normal);
} }
.button-wrapper .button.link.grey-btn { .button-wrapper .button.link.grey-btn {
@ -21,7 +21,7 @@
font-size: $font-size-mini; font-size: $font-size-mini;
max-width: 15rem; max-width: 15rem;
padding: $space-smaller $space-small; padding: $space-smaller $space-small;
z-index: 9999; z-index: 999;
} }
code { code {

View File

@ -55,6 +55,10 @@
justify-content: space-between; justify-content: space-between;
} }
.w-100 { .w-full {
width: 100%; width: 100%;
} }
.h-full {
height: 100%;
}

View File

@ -1,3 +1,44 @@
.margin-right-small { .margin-right-small {
margin-right: var(--space-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);
}

View File

@ -14,7 +14,6 @@
@import 'helper-classes'; @import 'helper-classes';
@import 'formulate'; @import 'formulate';
@import 'date-picker'; @import 'date-picker';
@import 'utility-helpers';
@import 'foundation-sites/scss/foundation'; @import 'foundation-sites/scss/foundation';
@import '~bourbon/core/bourbon'; @import '~bourbon/core/bourbon';
@ -50,3 +49,4 @@
@import 'plugins/multiselect'; @import 'plugins/multiselect';
@import 'plugins/dropdown'; @import 'plugins/dropdown';
@import '~shared/assets/stylesheets/ionicons'; @import '~shared/assets/stylesheets/ionicons';
@import 'utility-helpers';

View File

@ -17,7 +17,8 @@
} }
} }
.image { .image,
.video {
cursor: pointer; cursor: pointer;
position: relative; position: relative;
@ -26,7 +27,13 @@
} }
.modal-image { .modal-image {
max-width: 85%; max-height: 90%;
max-width: 90%;
}
.modal-video {
max-height: 75vh;
max-width: 100%;
} }
&::before { &::before {
@ -35,11 +42,21 @@
content: ''; content: '';
height: 20%; height: 20%;
left: 0; left: 0;
opacity: .8; opacity: 0.8;
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
} }
.video {
.modal-container {
width: auto;
.modal--close {
z-index: var(--z-index-low);
}
}
}
} }
.conversations-list-wrap { .conversations-list-wrap {

View File

@ -1,8 +1,7 @@
.error { .error {
#{$all-text-inputs}, #{$all-text-inputs},
select, select,
.multiselect>.multiselect__tags { .multiselect > .multiselect__tags {
@include thin-border(var(--r-400)); @include thin-border(var(--r-400));
} }
@ -40,4 +39,8 @@ input {
font-size: var(--font-size-small); font-size: var(--font-size-small);
height: var(--space-large); height: var(--space-large);
} }
.error {
border-color: var(--r-400);
}
} }

View File

@ -21,10 +21,6 @@
border: 1px solid var(--color-border); border: 1px solid var(--color-border);
} }
.margin-right-small {
margin-right: var(--space-small);
}
.display-flex { .display-flex {
display: flex; display: flex;
} }

View File

@ -15,7 +15,11 @@
</div> </div>
</div> </div>
</button> </button>
<div v-if="isOpen" class="cw-accordion--content"> <div
v-if="isOpen"
class="cw-accordion--content"
:class="{ compact: compact }"
>
<slot /> <slot />
</div> </div>
</div> </div>
@ -33,6 +37,10 @@ export default {
type: String, type: String,
required: true, required: true,
}, },
compact: {
type: Boolean,
default: false,
},
icon: { icon: {
type: String, type: String,
default: '', default: '',
@ -106,5 +114,9 @@ export default {
.cw-accordion--content { .cw-accordion--content {
padding: var(--space-normal); padding: var(--space-normal);
&.compact {
padding: 0;
}
} }
</style> </style>

View 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>

View File

@ -8,7 +8,7 @@
icon="ion-checkmark" icon="ion-checkmark"
emoji="✅" emoji="✅"
:is-loading="isLoading" :is-loading="isLoading"
@click="() => toggleStatus(STATUS_TYPE.RESOLVED)" @click="onCmdResolveConversation"
> >
{{ this.$t('CONVERSATION.HEADER.RESOLVE_ACTION') }} {{ this.$t('CONVERSATION.HEADER.RESOLVE_ACTION') }}
</woot-button> </woot-button>
@ -19,7 +19,7 @@
icon="ion-refresh" icon="ion-refresh"
emoji="👀" emoji="👀"
:is-loading="isLoading" :is-loading="isLoading"
@click="() => toggleStatus(STATUS_TYPE.OPEN)" @click="onCmdOpenConversation"
> >
{{ this.$t('CONVERSATION.HEADER.REOPEN_ACTION') }} {{ this.$t('CONVERSATION.HEADER.REOPEN_ACTION') }}
</woot-button> </woot-button>
@ -29,7 +29,7 @@
color-scheme="primary" color-scheme="primary"
icon="ion-person" icon="ion-person"
:is-loading="isLoading" :is-loading="isLoading"
@click="() => toggleStatus(STATUS_TYPE.OPEN)" @click="onCmdOpenConversation"
> >
{{ this.$t('CONVERSATION.HEADER.OPEN_ACTION') }} {{ this.$t('CONVERSATION.HEADER.OPEN_ACTION') }}
</woot-button> </woot-button>
@ -118,6 +118,11 @@ import {
startOfTomorrow, startOfTomorrow,
startOfWeek, startOfWeek,
} from 'date-fns'; } from 'date-fns';
import {
CMD_REOPEN_CONVERSATION,
CMD_RESOLVE_CONVERSATION,
CMD_SNOOZE_CONVERSATION,
} from '../../routes/dashboard/commands/commandBarBusEvents';
export default { export default {
components: { components: {
@ -135,9 +140,7 @@ export default {
}; };
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({ currentChat: 'getSelectedChat' }),
currentChat: 'getSelectedChat',
}),
isOpen() { isOpen() {
return this.currentChat.status === wootConstants.STATUS_TYPE.OPEN; 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: { methods: {
async handleKeyEvents(e) { async handleKeyEvents(e) {
const allConversations = document.querySelectorAll( 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() { showOpenButton() {
return this.isResolved || this.isSnoozed; return this.isResolved || this.isSnoozed;
}, },

View File

@ -265,6 +265,7 @@ export default {
this.$store.dispatch('inboxes/get'); this.$store.dispatch('inboxes/get');
this.$store.dispatch('notifications/unReadCount'); this.$store.dispatch('notifications/unReadCount');
this.$store.dispatch('teams/get'); this.$store.dispatch('teams/get');
this.$store.dispatch('attributes/get');
}, },
methods: { methods: {

View File

@ -1,6 +1,6 @@
<template> <template>
<span class="back-button ion-ios-arrow-left" @click.capture="goBack"> <span class="back-button ion-ios-arrow-left" @click.capture="goBack">
{{ $t('GENERAL_SETTINGS.BACK') }} {{ buttonLabel || $t('GENERAL_SETTINGS.BACK') }}
</span> </span>
</template> </template>
<script> <script>
@ -12,6 +12,10 @@ export default {
type: [String, Object], type: [String, Object],
default: '', default: '',
}, },
buttonLabel: {
type: String,
default: '',
},
}, },
methods: { methods: {
goBack() { goBack() {

View File

@ -64,6 +64,7 @@ export default {
placeholder: { type: String, default: '' }, placeholder: { type: String, default: '' },
isPrivate: { type: Boolean, default: false }, isPrivate: { type: Boolean, default: false },
isFormatMode: { type: Boolean, default: false }, isFormatMode: { type: Boolean, default: false },
enableSuggestions: { type: Boolean, default: true },
}, },
data() { data() {
return { return {
@ -78,6 +79,10 @@ export default {
}, },
computed: { computed: {
plugins() { plugins() {
if (!this.enableSuggestions) {
return [];
}
return [ return [
suggestionsPlugin({ suggestionsPlugin({
matcher: triggerCharacters('@'), matcher: triggerCharacters('@'),

View File

@ -1,11 +1,11 @@
<template> <template>
<select v-model="activeStatus" class="status--filter" @change="onTabChange()"> <select v-model="activeStatus" class="status--filter" @change="onTabChange()">
<option <option
v-for="item in $t('CHAT_LIST.CHAT_STATUS_ITEMS')" v-for="(value, status) in $t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS')"
:key="item['VALUE']" :key="status"
:value="item['VALUE']" :value="status"
> >
{{ item['TEXT'] }} {{ value['TEXT'] }}
</option> </option>
<option value="all"> <option value="all">
{{ $t('CHAT_LIST.FILTER_ALL') }} {{ $t('CHAT_LIST.FILTER_ALL') }}

View File

@ -64,8 +64,20 @@ export default {
this.$store.dispatch('inboxAssignableAgents/fetch', { inboxId }); this.$store.dispatch('inboxAssignableAgents/fetch', { inboxId });
} }
}, },
'currentChat.id'() {
this.fetchLabels();
},
},
mounted() {
this.fetchLabels();
}, },
methods: { methods: {
fetchLabels() {
if (!this.currentChat.id) {
return;
}
this.$store.dispatch('conversationLabels/get', this.currentChat.id);
},
onToggleContactPanel() { onToggleContactPanel() {
this.$emit('contact-panel-toggle'); this.$emit('contact-panel-toggle');
}, },

View File

@ -31,6 +31,11 @@
<audio v-else-if="attachment.file_type === 'audio'" controls> <audio v-else-if="attachment.file_type === 'audio'" controls>
<source :src="attachment.data_url" /> <source :src="attachment.data_url" />
</audio> </audio>
<bubble-video
v-else-if="attachment.file_type === 'video'"
:url="attachment.data_url"
:readable-time="readableTime"
/>
<bubble-file <bubble-file
v-else v-else
:url="attachment.data_url" :url="attachment.data_url"
@ -91,6 +96,7 @@ import BubbleMailHead from './bubble/MailHead';
import BubbleText from './bubble/Text'; import BubbleText from './bubble/Text';
import BubbleImage from './bubble/Image'; import BubbleImage from './bubble/Image';
import BubbleFile from './bubble/File'; import BubbleFile from './bubble/File';
import BubbleVideo from './bubble/Video.vue';
import BubbleActions from './bubble/Actions'; import BubbleActions from './bubble/Actions';
import Spinner from 'shared/components/Spinner'; import Spinner from 'shared/components/Spinner';
@ -108,6 +114,7 @@ export default {
BubbleText, BubbleText,
BubbleImage, BubbleImage,
BubbleFile, BubbleFile,
BubbleVideo,
BubbleMailHead, BubbleMailHead,
ContextMenu, ContextMenu,
Spinner, Spinner,
@ -236,14 +243,6 @@ export default {
isMessageDeleted() { isMessageDeleted() {
return this.contentAttributes.deleted; 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() { hasText() {
return !!this.data.content; return !!this.data.content;
}, },
@ -270,7 +269,8 @@ export default {
return { return {
bubble: this.isBubble, bubble: this.isBubble,
'is-private': this.data.private, 'is-private': this.data.private,
'is-image': this.hasImageAttachment, 'is-image': this.hasMediaAttachment('image'),
'is-video': this.hasMediaAttachment('video'),
'is-text': this.hasText, 'is-text': this.hasText,
'is-from-bot': this.isSentByBot, 'is-from-bot': this.isSentByBot,
}; };
@ -288,6 +288,14 @@ export default {
}, },
}, },
methods: { 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() { handleContextMenuClick() {
this.showContextMenu = !this.showContextMenu; this.showContextMenu = !this.showContextMenu;
}, },
@ -315,17 +323,28 @@ export default {
<style lang="scss"> <style lang="scss">
.wrap { .wrap {
> .bubble { > .bubble {
&.is-image { &.is-image,
&.is-video {
padding: 0; padding: 0;
overflow: hidden; overflow: hidden;
.image { .image,
.video {
max-width: 32rem; max-width: 32rem;
padding: var(--space-micro); padding: var(--space-micro);
> img { > img,
> video {
border-radius: var(--border-radius-medium); border-radius: var(--border-radius-medium);
} }
> video {
height: 100%;
object-fit: cover;
width: 100%;
}
}
.video {
height: 18rem;
} }
} }

View File

@ -38,6 +38,11 @@ import { mixin as clickaway } from 'vue-clickaway';
import alertMixin from 'shared/mixins/alertMixin'; import alertMixin from 'shared/mixins/alertMixin';
import EmailTranscriptModal from './EmailTranscriptModal'; import EmailTranscriptModal from './EmailTranscriptModal';
import ResolveAction from '../../buttons/ResolveAction'; import ResolveAction from '../../buttons/ResolveAction';
import {
CMD_MUTE_CONVERSATION,
CMD_SEND_TRANSCRIPT,
CMD_UNMUTE_CONVERSATION,
} from '../../../routes/dashboard/commands/commandBarBusEvents';
export default { export default {
components: { components: {
@ -47,36 +52,35 @@ export default {
mixins: [alertMixin, clickaway], mixins: [alertMixin, clickaway],
data() { data() {
return { return {
showConversationActions: false,
showEmailActionsModal: false, showEmailActionsModal: false,
}; };
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({ currentChat: 'getSelectedChat' }),
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: { methods: {
mute() { mute() {
this.$store.dispatch('muteConversation', this.currentChat.id); this.$store.dispatch('muteConversation', this.currentChat.id);
this.showAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS')); this.showAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS'));
this.toggleConversationActions();
}, },
unmute() { unmute() {
this.$store.dispatch('unmuteConversation', this.currentChat.id); this.$store.dispatch('unmuteConversation', this.currentChat.id);
this.showAlert(this.$t('CONTACT_PANEL.UNMUTED_SUCCESS')); this.showAlert(this.$t('CONTACT_PANEL.UNMUTED_SUCCESS'));
this.toggleConversationActions();
}, },
toggleEmailActionsModal() { toggleEmailActionsModal() {
this.showEmailActionsModal = !this.showEmailActionsModal; this.showEmailActionsModal = !this.showEmailActionsModal;
this.hideConversationActions(); this.hideConversationActions();
}, },
toggleConversationActions() {
this.showConversationActions = !this.showConversationActions;
},
hideConversationActions() {
this.showConversationActions = false;
},
}, },
}; };
</script> </script>

View File

@ -17,7 +17,7 @@
}) })
}} }}
</p> </p>
<p> <p v-if="globalConfig.installationName === 'Chatwoot'">
<a <a
href="https://www.chatwoot.com/changelog" href="https://www.chatwoot.com/changelog"
target="_blank" target="_blank"
@ -42,8 +42,7 @@
</div> </div>
<div class="features-item"> <div class="features-item">
<h2 class="block-title"> <h2 class="block-title">
<span class="emoji">👥</span <span class="emoji">👥</span>{{ $t('ONBOARDING.TEAM_MEMBERS.TITLE') }}
>{{ $t('ONBOARDING.TEAM_MEMBERS.TITLE') }}
</h2> </h2>
<p class="intro-body"> <p class="intro-body">
{{ $t('ONBOARDING.TEAM_MEMBERS.DESCRIPTION') }} {{ $t('ONBOARDING.TEAM_MEMBERS.DESCRIPTION') }}

View File

@ -52,7 +52,7 @@
@toggle-canned-menu="toggleCannedMenu" @toggle-canned-menu="toggleCannedMenu"
/> />
</div> </div>
<div v-if="hasAttachments" class="attachment-preview-box"> <div v-if="hasAttachments" class="attachment-preview-box" @paste="onPaste">
<attachment-preview <attachment-preview
:attachments="attachedFiles" :attachments="attachedFiles"
:remove-attachment="removeAttachment" :remove-attachment="removeAttachment"
@ -228,7 +228,7 @@ export default {
return ( return (
this.isAWebWidgetInbox || this.isAWebWidgetInbox ||
this.isAFacebookInbox || this.isAFacebookInbox ||
this.isATwilioWhatsappChannel || this.isAWhatsappChannel ||
this.isAPIInbox || this.isAPIInbox ||
this.isAnEmailChannel || this.isAnEmailChannel ||
this.isATwilioSMSChannel || this.isATwilioSMSChannel ||
@ -314,11 +314,22 @@ export default {
// Donot use the keyboard listener mixin here as the events here are supposed to be // Donot use the keyboard listener mixin here as the events here are supposed to be
// working even if input/textarea is focussed. // working even if input/textarea is focussed.
document.addEventListener('keydown', this.handleKeyEvents); document.addEventListener('keydown', this.handleKeyEvents);
document.addEventListener('paste', this.onPaste);
}, },
destroyed() { destroyed() {
document.removeEventListener('keydown', this.handleKeyEvents); document.removeEventListener('keydown', this.handleKeyEvents);
document.removeEventListener('paste', this.onPaste);
}, },
methods: { 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) { toggleUserMention(currentMentionState) {
this.hasUserMention = currentMentionState; this.hasUserMention = currentMentionState;
}, },
@ -415,9 +426,11 @@ export default {
}, },
toggleTyping(status) { toggleTyping(status) {
const conversationId = this.currentChat.id; const conversationId = this.currentChat.id;
const isPrivate = this.isPrivate;
this.$store.dispatch('conversationTypingStatus/toggleTyping', { this.$store.dispatch('conversationTypingStatus/toggleTyping', {
status, status,
conversationId, conversationId,
isPrivate,
}); });
}, },
onFileUpload(file) { onFileUpload(file) {

View File

@ -181,7 +181,8 @@ export default {
} }
} }
.is-image { .is-image,
.is-video {
.message-text--metadata { .message-text--metadata {
.time { .time {
bottom: var(--space-smaller); bottom: var(--space-smaller);
@ -206,7 +207,8 @@ export default {
} }
} }
&.is-image { &.is-image,
&.is-video {
.time { .time {
position: inherit; position: inherit;
padding-left: var(--space-one); padding-left: var(--space-one);

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="file message-text__wrap" @click="openLink"> <div class="file message-text__wrap">
<div class="icon-wrap"> <div class="icon-wrap">
<i class="ion-document-text"></i> <i class="ion-document-text"></i>
</div> </div>

View File

@ -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>

View File

@ -33,6 +33,8 @@ describe('MoveActions', () => {
beforeEach(() => { beforeEach(() => {
window.bus = { window.bus = {
$emit: jest.fn(), $emit: jest.fn(),
$on: jest.fn(),
$off: jest.fn(),
}; };
state = { state = {

View File

@ -20,6 +20,7 @@ class ActionCableConnector extends BaseActionCableConnector {
'conversation.contact_changed': this.onConversationContactChange, 'conversation.contact_changed': this.onConversationContactChange,
'presence.update': this.onPresenceUpdate, 'presence.update': this.onPresenceUpdate,
'contact.deleted': this.onContactDelete, 'contact.deleted': this.onContactDelete,
'contact.updated': this.onContactUpdate,
}; };
} }
@ -124,6 +125,10 @@ class ActionCableConnector extends BaseActionCableConnector {
); );
this.fetchConversationStats(); this.fetchConversationStats();
}; };
onContactUpdate = data => {
this.app.$store.dispatch('contacts/updateContact', data);
};
} }
export default { export default {

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "السمات", "HEADER": "سمات مخصصة",
"HEADER_BTN_TXT": "إضافة سمة", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "أضف سمة", "TITLE": "Add Custom Attribute",
"SUBMIT": "إنشاء", "SUBMIT": "إنشاء",
"CANCEL_BUTTON_TEXT": "إلغاء", "CANCEL_BUTTON_TEXT": "إلغاء",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "اسم العرض", "LABEL": "اسم العرض",
"PLACEHOLDER": "أدخل اسم عرض السمة", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "الوصف", "LABEL": "الوصف",
"PLACEHOLDER": "أدخل وصف السمة", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "نموذج", "LABEL": "Applies to",
"PLACEHOLDER": "الرجاء اختيار نموذج", "PLACEHOLDER": "Please select one",
"ERROR": "النموذج مطلوب" "ERROR": "النموذج مطلوب"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "النوع مطلوب" "ERROR": "النوع مطلوب"
}, },
"KEY": { "KEY": {
"LABEL": "المفتاح" "LABEL": "المفتاح",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "تمت إضافة السمة بنجاح", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "حذف", "BUTTON_TEXT": "حذف",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "هل أنت متأكد من أنك تريد حذف - %{attributeName}", "TITLE": "هل أنت متأكد من أنك تريد حذف - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm", "PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "حذف ", "YES": "حذف ",
"NO": "إلغاء" "NO": "إلغاء"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "تحديث", "UPDATE_BUTTON_TEXT": "تحديث",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "حذف" "DELETE": "حذف"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "فتح", "TEXT": "فتح"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "مغلقة", "TEXT": "مغلقة"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "معلق", "TEXT": "معلق"
"VALUE": "معلق"
}, },
{ "snoozed": {
"TEXT": "غفوة", "TEXT": "غفوة"
"VALUE": "غفوة"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "تم تلقيه عبر البريد الإلكتروني", "RECEIVED_VIA_EMAIL": "تم تلقيه عبر البريد الإلكتروني",
"VIEW_TWEET_IN_TWITTER": "عرض التغريدة في تويتر", "VIEW_TWEET_IN_TWITTER": "عرض التغريدة في تويتر",
"REPLY_TO_TWEET": "الرد على هذه التغريدة", "REPLY_TO_TWEET": "الرد على هذه التغريدة",
"SENT": "Sent successfully",
"NO_MESSAGES": "لا توجد رسائل", "NO_MESSAGES": "لا توجد رسائل",
"NO_CONTENT": "لم يتم العثور على محتوى", "NO_CONTENT": "لم يتم العثور على محتوى",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View File

@ -7,6 +7,7 @@
"COMPANY": "الشركة", "COMPANY": "الشركة",
"LOCATION": "الموقع الجغرافي", "LOCATION": "الموقع الجغرافي",
"CONVERSATION_TITLE": "تفاصيل المحادثة", "CONVERSATION_TITLE": "تفاصيل المحادثة",
"VIEW_PROFILE": "View Profile",
"BROWSER": "المتصفح", "BROWSER": "المتصفح",
"OS": "نظام التشغيل", "OS": "نظام التشغيل",
"INITIATED_FROM": "تم البدء من", "INITIATED_FROM": "تم البدء من",
@ -154,6 +155,11 @@
"LABEL": "صندوق الوارد", "LABEL": "صندوق الوارد",
"ERROR": "حدد صندوق الوارد" "ERROR": "حدد صندوق الوارد"
}, },
"SUBJECT": {
"LABEL": "الموضوع",
"PLACEHOLDER": "الموضوع",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "رسالة", "LABEL": "رسالة",
"PLACEHOLDER": "اكتب رسالتك هنا", "PLACEHOLDER": "اكتب رسالتك هنا",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "عرض التفاصيل" "VIEW_DETAILS": "عرض التفاصيل"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "جهات الاتصال",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "إضافة", "BUTTON": "إضافة",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "ملاحظات" "TITLE": "ملاحظات"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "إضافة", "BUTTON": "إضافة",
"PLACEHOLDER": "إضافة ملاحظة", "PLACEHOLDER": "إضافة ملاحظة",
"TITLE": "Shift + Enter لإنشاء مهمة" "TITLE": "Shift + Enter لإنشاء مهمة"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "عرض جميع الملاحظات" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "إضافة سمة خاصة", "BUTTON": "إضافة سمة خاصة",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": { "ADD": {
"TITLE": "إنشاء سمة خاصة", "TITLE": "إنشاء سمة خاصة",
"DESC": "أضف معلومات خاصة إلى جهة الاتصال هذه." "DESC": "أضف معلومات خاصة إلى جهة الاتصال هذه."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "قيمة السمة", "LABEL": "قيمة السمة",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "المحادثات السابقة" "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": { "EMAIL_HEADER": {
"TO": "إلى", "TO": "إلى",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -1,7 +1,7 @@
{ {
"INBOX_MGMT": { "INBOX_MGMT": {
"HEADER": "قنوات التواصل", "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": { "LIST": {
"404": "لا توجد صناديق وارد لقنوات تواصل مرتبطة بهذا الحساب." "404": "لا توجد صناديق وارد لقنوات تواصل مرتبطة بهذا الحساب."
}, },

View File

@ -1,6 +1,6 @@
{ {
"LOGIN": { "LOGIN": {
"TITLE": "تسجيل الدخول إلى شات ووت", "TITLE": "تسجيل الدخول إلى Chatwoot",
"EMAIL": { "EMAIL": {
"LABEL": "البريد الإلكتروني", "LABEL": "البريد الإلكتروني",
"PLACEHOLDER": "مثال: someone@example.com" "PLACEHOLDER": "مثال: someone@example.com"

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "أيام متبقية من الفترة التجريبية.", "TRIAL_MESSAGE": "أيام متبقية من الفترة التجريبية.",
"TRAIL_BUTTON": "اشترك الآن" "TRAIL_BUTTON": "اشترك الآن",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "إعدادات الحساب", "ACCOUNT_SETTINGS": "إعدادات الحساب",
"APPLICATIONS": "التطبيقات", "APPLICATIONS": "التطبيقات",
"LABELS": "الوسوم", "LABELS": "الوسوم",
"ATTRIBUTES": "السمات", "CUSTOM_ATTRIBUTES": "سمات مخصصة",
"TEAMS": "الفرق", "TEAMS": "الفرق",
"ALL_CONTACTS": "جميع جهات الاتصال", "ALL_CONTACTS": "جميع جهات الاتصال",
"TAGGED_WITH": "Tagged with", "TAGGED_WITH": "Tagged with",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Atributs personalitzats",
"HEADER_BTN_TXT": "Add Attribute", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Add attribute", "TITLE": "Add Custom Attribute",
"SUBMIT": "Crear", "SUBMIT": "Crear",
"CANCEL_BUTTON_TEXT": "Cancel·la", "CANCEL_BUTTON_TEXT": "Cancel·la",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Display Name", "LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "Descripció", "LABEL": "Descripció",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "Model", "LABEL": "Applies to",
"PLACEHOLDER": "Please select a model", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Model is required"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required" "ERROR": "Type is required"
}, },
"KEY": { "KEY": {
"LABEL": "Key" "LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Esborrar", "BUTTON_TEXT": "Esborrar",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}", "TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm", "PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Suprimeix ", "YES": "Suprimeix ",
"NO": "Cancel·la" "NO": "Cancel·la"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Actualitza", "UPDATE_BUTTON_TEXT": "Actualitza",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "Esborrar" "DELETE": "Esborrar"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Obertes", "TEXT": "Obrir"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Resoltes", "TEXT": "Resoltes"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Pending", "TEXT": "Pending"
"VALUE": "pending"
}, },
{ "snoozed": {
"TEXT": "Snoozed", "TEXT": "Snoozed"
"VALUE": "snoozed"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "Rebut per correu electrònic", "RECEIVED_VIA_EMAIL": "Rebut per correu electrònic",
"VIEW_TWEET_IN_TWITTER": "Veure el tuit a Twitter", "VIEW_TWEET_IN_TWITTER": "Veure el tuit a Twitter",
"REPLY_TO_TWEET": "Respon a aquest tuit", "REPLY_TO_TWEET": "Respon a aquest tuit",
"SENT": "Sent successfully",
"NO_MESSAGES": "Cap Missatge", "NO_MESSAGES": "Cap Missatge",
"NO_CONTENT": "No content available", "NO_CONTENT": "No content available",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View File

@ -7,6 +7,7 @@
"COMPANY": "Companyia", "COMPANY": "Companyia",
"LOCATION": "Ubicació", "LOCATION": "Ubicació",
"CONVERSATION_TITLE": "Detalls de les converses", "CONVERSATION_TITLE": "Detalls de les converses",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Navegador", "BROWSER": "Navegador",
"OS": "Sistema operatiu", "OS": "Sistema operatiu",
"INITIATED_FROM": "Iniciada des de", "INITIATED_FROM": "Iniciada des de",
@ -154,6 +155,11 @@
"LABEL": "Inbox", "LABEL": "Inbox",
"ERROR": "Select an inbox" "ERROR": "Select an inbox"
}, },
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Missatge", "LABEL": "Missatge",
"PLACEHOLDER": "Write your message here", "PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details" "VIEW_DETAILS": "View details"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contactes",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Add", "BUTTON": "Add",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Notes" "TITLE": "Notes"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Add", "BUTTON": "Add",
"PLACEHOLDER": "Add a note", "PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note" "TITLE": "Shift + Enter to create a note"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "View all notes" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute", "BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "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": { "ADD": {
"TITLE": "Create custom attribute", "TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact." "DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "Attribute value", "LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Converses prèvies" "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": { "EMAIL_HEADER": {
"TO": "To", "TO": "To",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "dies de prova restants.", "TRIAL_MESSAGE": "dies de prova restants.",
"TRAIL_BUTTON": "Compra ara" "TRAIL_BUTTON": "Compra ara",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "Configuració del compte", "ACCOUNT_SETTINGS": "Configuració del compte",
"APPLICATIONS": "Applications", "APPLICATIONS": "Applications",
"LABELS": "Etiquetes", "LABELS": "Etiquetes",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Atributs personalitzats",
"TEAMS": "Equips", "TEAMS": "Equips",
"ALL_CONTACTS": "All Contacts", "ALL_CONTACTS": "All Contacts",
"TAGGED_WITH": "Tagged with", "TAGGED_WITH": "Tagged with",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Vlastní atributy",
"HEADER_BTN_TXT": "Add Attribute", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Add attribute", "TITLE": "Add Custom Attribute",
"SUBMIT": "Create", "SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Zrušit", "CANCEL_BUTTON_TEXT": "Zrušit",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Display Name", "LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "Description", "LABEL": "Description",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "Model", "LABEL": "Applies to",
"PLACEHOLDER": "Please select a model", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Model is required"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required" "ERROR": "Type is required"
}, },
"KEY": { "KEY": {
"LABEL": "Key" "LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Vymazat", "BUTTON_TEXT": "Vymazat",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}", "TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm", "PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Vymazat ", "YES": "Vymazat ",
"NO": "Zrušit" "NO": "Zrušit"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Aktualizovat", "UPDATE_BUTTON_TEXT": "Aktualizovat",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "Vymazat" "DELETE": "Vymazat"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Otevřít", "TEXT": "Otevřít"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Vyřešeno", "TEXT": "Vyřešeno"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Čekající", "TEXT": "Čekající"
"VALUE": "čekající"
}, },
{ "snoozed": {
"TEXT": "Odložené", "TEXT": "Odložené"
"VALUE": "odložené"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "Obdrženo e-mailem", "RECEIVED_VIA_EMAIL": "Obdrženo e-mailem",
"VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru", "VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru",
"REPLY_TO_TWEET": "Odpovědět na tento tweet", "REPLY_TO_TWEET": "Odpovědět na tento tweet",
"SENT": "Sent successfully",
"NO_MESSAGES": "Žádné zprávy", "NO_MESSAGES": "Žádné zprávy",
"NO_CONTENT": "Žádný obsah k dispozici", "NO_CONTENT": "Žádný obsah k dispozici",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View File

@ -7,6 +7,7 @@
"COMPANY": "Společnost", "COMPANY": "Společnost",
"LOCATION": "Poloha", "LOCATION": "Poloha",
"CONVERSATION_TITLE": "Podrobnosti konverzace", "CONVERSATION_TITLE": "Podrobnosti konverzace",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Prohlížeč", "BROWSER": "Prohlížeč",
"OS": "Operační systém", "OS": "Operační systém",
"INITIATED_FROM": "Zahájeno od", "INITIATED_FROM": "Zahájeno od",
@ -154,6 +155,11 @@
"LABEL": "Inbox", "LABEL": "Inbox",
"ERROR": "Select an inbox" "ERROR": "Select an inbox"
}, },
"SUBJECT": {
"LABEL": "Předmět",
"PLACEHOLDER": "Předmět",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Zpráva", "LABEL": "Zpráva",
"PLACEHOLDER": "Write your message here", "PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Zobrazit detaily" "VIEW_DETAILS": "Zobrazit detaily"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakty",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Add", "BUTTON": "Add",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Notes" "TITLE": "Notes"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Add", "BUTTON": "Add",
"PLACEHOLDER": "Add a note", "PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note" "TITLE": "Shift + Enter to create a note"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "View all notes" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute", "BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "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": { "ADD": {
"TITLE": "Create custom attribute", "TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact." "DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "Attribute value", "LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Předchozí konverzace" "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": { "EMAIL_HEADER": {
"TO": "Komu", "TO": "Komu",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "dní zbývá zkušební verze.", "TRIAL_MESSAGE": "dní zbývá zkušební verze.",
"TRAIL_BUTTON": "Koupit nyní" "TRAIL_BUTTON": "Koupit nyní",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "Nastavení účtu", "ACCOUNT_SETTINGS": "Nastavení účtu",
"APPLICATIONS": "Applications", "APPLICATIONS": "Applications",
"LABELS": "Štítky", "LABELS": "Štítky",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Vlastní atributy",
"TEAMS": "Týmy", "TEAMS": "Týmy",
"ALL_CONTACTS": "All Contacts", "ALL_CONTACTS": "All Contacts",
"TAGGED_WITH": "Tagged with", "TAGGED_WITH": "Tagged with",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Brugerdefinerede Egenskaber",
"HEADER_BTN_TXT": "Add Attribute", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Add attribute", "TITLE": "Add Custom Attribute",
"SUBMIT": "Opret", "SUBMIT": "Opret",
"CANCEL_BUTTON_TEXT": "Annuller", "CANCEL_BUTTON_TEXT": "Annuller",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Display Name", "LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "Beskrivelse", "LABEL": "Beskrivelse",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "Model", "LABEL": "Applies to",
"PLACEHOLDER": "Please select a model", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Model is required"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required" "ERROR": "Type is required"
}, },
"KEY": { "KEY": {
"LABEL": "Key" "LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Slet", "BUTTON_TEXT": "Slet",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}", "TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm", "PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Slet ", "YES": "Slet ",
"NO": "Annuller" "NO": "Annuller"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Opdater", "UPDATE_BUTTON_TEXT": "Opdater",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "Slet" "DELETE": "Slet"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Åbn", "TEXT": "Åbn"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Løst", "TEXT": "Løst"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Pending", "TEXT": "Pending"
"VALUE": "pending"
}, },
{ "snoozed": {
"TEXT": "Snoozed", "TEXT": "Snoozed"
"VALUE": "snoozed"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "Modtaget via e-mail", "RECEIVED_VIA_EMAIL": "Modtaget via e-mail",
"VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter", "VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter",
"REPLY_TO_TWEET": "Svar på dette tweet", "REPLY_TO_TWEET": "Svar på dette tweet",
"SENT": "Sent successfully",
"NO_MESSAGES": "No Messages", "NO_MESSAGES": "No Messages",
"NO_CONTENT": "No content available", "NO_CONTENT": "No content available",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View File

@ -7,6 +7,7 @@
"COMPANY": "Virksomhed", "COMPANY": "Virksomhed",
"LOCATION": "Lokation", "LOCATION": "Lokation",
"CONVERSATION_TITLE": "Samtaledetaljer", "CONVERSATION_TITLE": "Samtaledetaljer",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Browser", "BROWSER": "Browser",
"OS": "Operativsystem", "OS": "Operativsystem",
"INITIATED_FROM": "Startet fra", "INITIATED_FROM": "Startet fra",
@ -154,6 +155,11 @@
"LABEL": "Inbox", "LABEL": "Inbox",
"ERROR": "Select an inbox" "ERROR": "Select an inbox"
}, },
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Besked", "LABEL": "Besked",
"PLACEHOLDER": "Skriv din besked her", "PLACEHOLDER": "Skriv din besked her",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details" "VIEW_DETAILS": "View details"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakter",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Add", "BUTTON": "Add",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Notes" "TITLE": "Notes"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Add", "BUTTON": "Add",
"PLACEHOLDER": "Add a note", "PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note" "TITLE": "Shift + Enter to create a note"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "View all notes" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute", "BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "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": { "ADD": {
"TITLE": "Create custom attribute", "TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact." "DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "Attribute value", "LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Tidligere Samtaler" "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": { "EMAIL_HEADER": {
"TO": "To", "TO": "To",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "dage prøveperiode tilbage.", "TRIAL_MESSAGE": "dage prøveperiode tilbage.",
"TRAIL_BUTTON": "Køb Nu" "TRAIL_BUTTON": "Køb Nu",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "Kontoindstillinger", "ACCOUNT_SETTINGS": "Kontoindstillinger",
"APPLICATIONS": "Applications", "APPLICATIONS": "Applications",
"LABELS": "Etiketter", "LABELS": "Etiketter",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber",
"TEAMS": "Teams", "TEAMS": "Teams",
"ALL_CONTACTS": "All Contacts", "ALL_CONTACTS": "All Contacts",
"TAGGED_WITH": "Tagged with", "TAGGED_WITH": "Tagged with",

View File

@ -1,68 +1,71 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Benutzerdefinierte Attribute",
"HEADER_BTN_TXT": "Attribut hinzufügen", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Attribut hinzufügen", "TITLE": "Add Custom Attribute",
"SUBMIT": "Erstellen", "SUBMIT": "Erstellen",
"CANCEL_BUTTON_TEXT": "Stornieren", "CANCEL_BUTTON_TEXT": "Stornieren",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Anzeigename", "LABEL": "Anzeigename",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name wird benötigt"
}, },
"DESC": { "DESC": {
"LABEL": "Beschreibung", "LABEL": "Beschreibung",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Beschreibung wird benötigt"
}, },
"MODEL": { "MODEL": {
"LABEL": "Modell", "LABEL": "Applies to",
"PLACEHOLDER": "Bitte wählen Sie einen Typ", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Modell wird benötigt"
}, },
"TYPE": { "TYPE": {
"LABEL": "Typ", "LABEL": "Typ",
"PLACEHOLDER": "Please select a type", "PLACEHOLDER": "Bitte wählen Sie einen Typ",
"ERROR": "Type is required" "ERROR": "Typ wird benötigt"
}, },
"KEY": { "KEY": {
"LABEL": "Schlüssel" "LABEL": "Schlüssel",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Löschen", "BUTTON_TEXT": "Löschen",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Sind Sie sicher, dass Sie %{attributeName} löschen möchten", "TITLE": "Sind Sie sicher, dass Sie %{attributeName} löschen möchten",
"PLACE_HOLDER": "Bitte geben Sie {attributeName} zur Bestätigung ein", "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 ", "YES": "Löschen ",
"NO": "Stornieren" "NO": "Stornieren"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Attribut hinzufügen", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Aktualisieren", "UPDATE_BUTTON_TEXT": "Aktualisieren",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
"HEADER": "Benutzerdefinierte Attribute", "HEADER": "Benutzerdefinierte Attribute",
"CONVERSATION": "Conversation", "CONVERSATION": "Unterhaltung",
"CONTACT": "Kontakt" "CONTACT": "Kontakt"
}, },
"LIST": { "LIST": {
@ -77,8 +80,8 @@
"DELETE": "Löschen" "DELETE": "Löschen"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -54,7 +54,7 @@
"ERROR": "Uhrzeit auf Seite ist erforderlich" "ERROR": "Uhrzeit auf Seite ist erforderlich"
}, },
"ENABLED": "Kampagne aktivieren", "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" "SUBMIT": "Kampagne hinzufügen"
}, },
"API": { "API": {

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Offen", "TEXT": "Offen"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Gelöst", "TEXT": "Gelöst"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Ausstehend", "TEXT": "Ausstehend"
"VALUE": "pending"
}, },
{ "snoozed": {
"TEXT": "Erinnern", "TEXT": "Erinnern"
"VALUE": "snoozed"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,9 +81,10 @@
"RECEIVED_VIA_EMAIL": "Per E-Mail empfangen", "RECEIVED_VIA_EMAIL": "Per E-Mail empfangen",
"VIEW_TWEET_IN_TWITTER": "Tweet auf Twitter anzeigen", "VIEW_TWEET_IN_TWITTER": "Tweet auf Twitter anzeigen",
"REPLY_TO_TWEET": "Auf diesen Tweet antworten", "REPLY_TO_TWEET": "Auf diesen Tweet antworten",
"SENT": "Erfolgreich gesendet",
"NO_MESSAGES": "Keine Nachrichten", "NO_MESSAGES": "Keine Nachrichten",
"NO_CONTENT": "Kein Inhalt verfügbar", "NO_CONTENT": "Kein Inhalt verfügbar",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Zitierten Text ausblenden",
"SHOW_QUOTED_TEXT": "Show Quoted Text" "SHOW_QUOTED_TEXT": "Zitierten Text anzeigen"
} }
} }

View File

@ -7,6 +7,7 @@
"COMPANY": "Firma", "COMPANY": "Firma",
"LOCATION": "Ort", "LOCATION": "Ort",
"CONVERSATION_TITLE": "Unterhaltungsdetails", "CONVERSATION_TITLE": "Unterhaltungsdetails",
"VIEW_PROFILE": "Profil anzeigen",
"BROWSER": "Browser", "BROWSER": "Browser",
"OS": "Betriebssystem", "OS": "Betriebssystem",
"INITIATED_FROM": "Initiiert von", "INITIATED_FROM": "Initiiert von",
@ -32,8 +33,8 @@
"NO_RESULT": "Keine Labels gefunden" "NO_RESULT": "Keine Labels gefunden"
} }
}, },
"MERGE_CONTACT": "Merge contact", "MERGE_CONTACT": "Kontakte zusammenführen",
"CONTACT_ACTIONS": "Contact actions", "CONTACT_ACTIONS": "Kontakt-Aktionen",
"MUTE_CONTACT": "Unterhaltung stummschalten", "MUTE_CONTACT": "Unterhaltung stummschalten",
"UNMUTE_CONTACT": "Unterhaltung entmuten", "UNMUTE_CONTACT": "Unterhaltung entmuten",
"MUTED_SUCCESS": "Diese Unterhaltung ist für 6 Stunden auf stumm schalten", "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." "DESC": "Fügen Sie grundlegende Informationen über den Kontakt hinzu."
}, },
"IMPORT_CONTACTS": { "IMPORT_CONTACTS": {
"BUTTON_LABEL": "Import", "BUTTON_LABEL": "Importieren",
"TITLE": "Import Contacts", "TITLE": "Kontakte importieren",
"DESC": "Import contacts through a CSV file.", "DESC": "Kontakte über CSV-Datei importieren.",
"DOWNLOAD_LABEL": "Download a sample csv.", "DOWNLOAD_LABEL": "Ein CSV-Beispiel herunterladen.",
"FORM": { "FORM": {
"LABEL": "CSV-Datei", "LABEL": "CSV-Datei",
"SUBMIT": "Import", "SUBMIT": "Importieren",
"CANCEL": "Stornieren" "CANCEL": "Stornieren"
}, },
"SUCCESS_MESSAGE": "Contacts saved successfully", "SUCCESS_MESSAGE": "Kontakte erfolgreich gespeichert",
"ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut" "ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut"
}, },
"DELETE_CONTACT": { "DELETE_CONTACT": {
"BUTTON_LABEL": "Delete Contact", "BUTTON_LABEL": "Kontakt löschen",
"TITLE": "Kontakt löschen", "TITLE": "Kontakt löschen",
"DESC": "Delete contact details", "DESC": "Kontakt-Details bearbeiten",
"CONFIRM": { "CONFIRM": {
"TITLE": "Löschung bestätigen", "TITLE": "Löschung bestätigen",
"MESSAGE": "Bist du sicher, das du das löschen möchtest?", "MESSAGE": "Bist du sicher, das du das löschen möchtest?",
@ -81,8 +82,8 @@
"NO": "Nein, behalten " "NO": "Nein, behalten "
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Contact deleted successfully", "SUCCESS_MESSAGE": "Kontakt erfolgreich gelöscht",
"ERROR_MESSAGE": "Could not delete contact. Please try again later." "ERROR_MESSAGE": "Kontakt konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
} }
}, },
"CONTACT_FORM": { "CONTACT_FORM": {
@ -154,6 +155,11 @@
"LABEL": "Posteingang", "LABEL": "Posteingang",
"ERROR": "Posteingang auswählen" "ERROR": "Posteingang auswählen"
}, },
"SUBJECT": {
"LABEL": "Betreff",
"PLACEHOLDER": "Betreff",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Nachricht", "LABEL": "Nachricht",
"PLACEHOLDER": "Schreiben Sie Ihre Nachricht hier", "PLACEHOLDER": "Schreiben Sie Ihre Nachricht hier",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Details anzeigen" "VIEW_DETAILS": "Details anzeigen"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakte",
"LOADING": "Kontaktprofil wird geladen..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Hinzufügen", "BUTTON": "Hinzufügen",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Notizen werden geladen...",
"NOT_AVAILABLE": "Für diesen Kontakt wurden keine Notizen erstellt",
"HEADER": { "HEADER": {
"TITLE": "Notizen" "TITLE": "Notizen"
}, },
"LIST": {
"LABEL": "Notiz hinzugefügt"
},
"ADD": { "ADD": {
"BUTTON": "Hinzufügen", "BUTTON": "Hinzufügen",
"PLACEHOLDER": "Notiz hinzufügen", "PLACEHOLDER": "Notiz hinzufügen",
"TITLE": "Shift + Enter um eine Notiz zu erstellen" "TITLE": "Shift + Enter um eine Notiz zu erstellen"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "Alle Notizen anzeigen" "DELETE": "Notiz löschen"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Eigenes Attribut hinzufügen", "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": { "ADD": {
"TITLE": "Eigenes Attribut erstellen", "TITLE": "Eigenes Attribut erstellen",
"DESC": "Füge diesem Kontakt benutzerdefinierte Informationen hinzu." "DESC": "Füge diesem Kontakt benutzerdefinierte Informationen hinzu."
@ -239,24 +261,46 @@
"VALUE": { "VALUE": {
"LABEL": "Attributwert", "LABEL": "Attributwert",
"PLACEHOLDER": "Bsp.: 11901 " "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": { "MERGE_CONTACTS": {
"TITLE": "Kontakte zusammenführen", "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": { "PRIMARY": {
"TITLE": "Hauptkontakt", "TITLE": "Hauptkontakt",
"HELP_LABEL": "To be kept" "HELP_LABEL": "Zu erhalten"
}, },
"CHILD": { "CHILD": {
"TITLE": "Kontakt zum Zusammenführen", "TITLE": "Kontakt zum Zusammenführen",
"PLACEHOLDER": "Search for a contact", "PLACEHOLDER": "Nach Kontakt suchen",
"HELP_LABEL": "To be deleted" "HELP_LABEL": "Zu löschen"
}, },
"SUMMARY": { "SUMMARY": {
"TITLE": "Zusammenfassung", "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." "ATTRIBUTE_WARNING": "Details von Kontakt <strong>%{childContactName}</strong> wird zu <strong>%{primaryContactName}</strong> kopiert."
}, },
"SEARCH": { "SEARCH": {
@ -269,7 +313,7 @@
"ERROR": "Wählen Sie einen Kontakt zum Zusammenführen" "ERROR": "Wählen Sie einen Kontakt zum Zusammenführen"
}, },
"SUCCESS_MESSAGE": "Kontakt erfolgreich zusammengeführt", "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!"
} }
} }
} }

View File

@ -23,7 +23,7 @@
"24_HOURS_WINDOW": "24-Stunden-Nachrichtenfenster-Beschränkung", "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_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", "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:", "REPLYING_TO": "Du antwortest auf:",
"REMOVE_SELECTION": "Auswahl entfernen", "REMOVE_SELECTION": "Auswahl entfernen",
"DOWNLOAD": "Herunterladen", "DOWNLOAD": "Herunterladen",
@ -40,9 +40,9 @@
"OPEN": "Mehr", "OPEN": "Mehr",
"CLOSE": "Schließen", "CLOSE": "Schließen",
"DETAILS": "Einzelheiten", "DETAILS": "Einzelheiten",
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_TOMORROW": "Schlummern bis morgen",
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_WEEK": "Schlummern bis nächste Woche",
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply" "SNOOZED_UNTIL_NEXT_REPLY": "Schlummern bis zur nächsten Antwort"
}, },
"RESOLVE_DROPDOWN": { "RESOLVE_DROPDOWN": {
"MARK_PENDING": "Als ausstehend markieren", "MARK_PENDING": "Als ausstehend markieren",
@ -87,7 +87,7 @@
"CHANGE_AGENT": "Konversationsempfänger geändert", "CHANGE_AGENT": "Konversationsempfänger geändert",
"CHANGE_TEAM": "Teamzuordnung dieser Konversation 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", "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:", "SENT_BY": "Gesendet von:",
"ASSIGNMENT": { "ASSIGNMENT": {
"SELECT_AGENT": "Agent auswählen", "SELECT_AGENT": "Agent auswählen",
@ -148,14 +148,35 @@
"PLACEHOLDER": "Keine" "PLACEHOLDER": "Keine"
}, },
"ACCORDION": { "ACCORDION": {
"CONTACT_DETAILS": "Contact Details", "CONTACT_DETAILS": "Kontakt-Details",
"CONVERSATION_ACTIONS": "Conversation Actions", "CONVERSATION_ACTIONS": "Aktionen für Unterhaltung",
"CONVERSATION_LABELS": "Konversationsetiketten", "CONVERSATION_LABELS": "Konversationsetiketten",
"CONVERSATION_INFO": "Conversation Information", "CONVERSATION_INFO": "Informationen über Unterhaltung",
"CONTACT_ATTRIBUTES": "Contact Attributes", "CONTACT_ATTRIBUTES": "Kontakt-Attribute",
"PREVIOUS_CONVERSATION": "Vorherige Gespräche" "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": { "EMAIL_HEADER": {
"TO": "An", "TO": "An",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -74,10 +74,10 @@
}, },
"NETWORK": { "NETWORK": {
"NOTIFICATION": { "NOTIFICATION": {
"TEXT": "Disconnected from Chatwoot" "TEXT": "Verbindung zu Chatwoot getrennt"
}, },
"BUTTON": { "BUTTON": {
"REFRESH": "Refresh" "REFRESH": "Neu laden"
} }
} }
} }

View File

@ -58,7 +58,7 @@
}, },
"CHANNEL_WEBHOOK_URL": { "CHANNEL_WEBHOOK_URL": {
"LABEL": "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" "ERROR": "Bitte geben Sie eine gültige URL ein"
}, },
"CHANNEL_DOMAIN": { "CHANNEL_DOMAIN": {
@ -97,8 +97,8 @@
"SUBMIT_BUTTON": "Posteingang erstellen" "SUBMIT_BUTTON": "Posteingang erstellen"
}, },
"TWILIO": { "TWILIO": {
"TITLE": "Twilio SMS/WhatsApp Channel", "TITLE": "Twilio SMS/WhatsApp-Kanal",
"DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", "DESC": "Integrieren Sie Twilio und unterstützen Sie Ihre Kunden via SMS oder WhatsApp.",
"ACCOUNT_SID": { "ACCOUNT_SID": {
"LABEL": "Account SID", "LABEL": "Account SID",
"PLACEHOLDER": "Bitte geben Sie Ihre Twilio Account SID ein", "PLACEHOLDER": "Bitte geben Sie Ihre Twilio Account SID ein",
@ -115,7 +115,7 @@
}, },
"CHANNEL_NAME": { "CHANNEL_NAME": {
"LABEL": "Posteingang-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" "ERROR": "Dieses Feld wird benötigt"
}, },
"PHONE_NUMBER": { "PHONE_NUMBER": {
@ -137,16 +137,16 @@
"DESC": "Unterstützen Sie Ihre Kunden per SMS mit Twilio-Integration." "DESC": "Unterstützen Sie Ihre Kunden per SMS mit Twilio-Integration."
}, },
"WHATSAPP": { "WHATSAPP": {
"TITLE": "WhatsApp Channel", "TITLE": "WhatsApp-Kanal",
"DESC": "Start supporting your customers via WhatsApp.", "DESC": "Unterstützen Sie Ihre Kunden via WhatsApp.",
"PROVIDERS": { "PROVIDERS": {
"LABEL": "API Provider", "LABEL": "API-Provider",
"TWILIO": "Twilio", "TWILIO": "Twilio",
"360_DIALOG": "360Dialog" "360_DIALOG": "360Dialog"
}, },
"INBOX_NAME": { "INBOX_NAME": {
"LABEL": "Posteingang-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" "ERROR": "Dieses Feld wird benötigt"
}, },
"PHONE_NUMBER": { "PHONE_NUMBER": {
@ -155,15 +155,15 @@
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen." "ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
}, },
"API_KEY": { "API_KEY": {
"LABEL": "API key", "LABEL": "API-Schlüssel",
"SUBTITLE": "Configure the WhatsApp API key.", "SUBTITLE": "Konfigurieren Sie den WhatsApp API-Schlüssel.",
"PLACEHOLDER": "API key", "PLACEHOLDER": "API-Schlüssel",
"APPLY_FOR_ACCESS": "Don't have any API key? Apply for access here", "APPLY_FOR_ACCESS": "Sie haben keinen API-Schlüssel? Für den Zugriff hier beantragen",
"ERROR": "Please enter a valid value." "ERROR": "Bitte geben Sie einen gültigen Wert ein."
}, },
"SUBMIT_BUTTON": "Create WhatsApp Channel", "SUBMIT_BUTTON": "WhatsApp-Kanal erstellen",
"API": { "API": {
"ERROR_MESSAGE": "We were not able to save the WhatsApp channel" "ERROR_MESSAGE": "Wir konnten den WhatsApp-Kanal nicht speichern"
} }
}, },
"API_CHANNEL": { "API_CHANNEL": {
@ -204,50 +204,50 @@
"FINISH_MESSAGE": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse." "FINISH_MESSAGE": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
}, },
"LINE_CHANNEL": { "LINE_CHANNEL": {
"TITLE": "LINE Channel", "TITLE": "LINE-Kanal",
"DESC": "Integrate with LINE channel and start supporting your customers.", "DESC": "Integrieren Sie den LINE-Kanal und unterstützen Sie Ihre Kunden.",
"CHANNEL_NAME": { "CHANNEL_NAME": {
"LABEL": "Kanal Name", "LABEL": "Kanal Name",
"PLACEHOLDER": "Bitte geben Sie einen Kanalnamen ein", "PLACEHOLDER": "Bitte geben Sie einen Kanalnamen ein",
"ERROR": "Dieses Feld wird benötigt" "ERROR": "Dieses Feld wird benötigt"
}, },
"LINE_CHANNEL_ID": { "LINE_CHANNEL_ID": {
"LABEL": "LINE Channel ID", "LABEL": "LINE-Kanal-ID",
"PLACEHOLDER": "LINE Channel ID" "PLACEHOLDER": "LINE-Kanal-ID"
}, },
"LINE_CHANNEL_SECRET": { "LINE_CHANNEL_SECRET": {
"LABEL": "LINE Channel Secret", "LABEL": "LINE-Kanal-Geheimnis",
"PLACEHOLDER": "LINE Channel Secret" "PLACEHOLDER": "LINE-Kanal-Geheimnis"
}, },
"LINE_CHANNEL_TOKEN": { "LINE_CHANNEL_TOKEN": {
"LABEL": "LINE Channel Token", "LABEL": "LINE-Kanal-Token",
"PLACEHOLDER": "LINE Channel Token" "PLACEHOLDER": "LINE-Kanal-Token"
}, },
"SUBMIT_BUTTON": "Create LINE Channel", "SUBMIT_BUTTON": "LINE-Kanal erstellen",
"API": { "API": {
"ERROR_MESSAGE": "We were not able to save the LINE channel" "ERROR_MESSAGE": "Wir konnten den LINE-Kanal nicht speichern"
}, },
"API_CALLBACK": { "API_CALLBACK": {
"TITLE": "Callback URL", "TITLE": "Callback URL",
"SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." "SUBTITLE": "Sie müssen die Webhook-URL in der LINE-Anwendung mit der hier genannten URL konfigurieren."
} }
}, },
"TELEGRAM_CHANNEL": { "TELEGRAM_CHANNEL": {
"TITLE": "Telegram Channel", "TITLE": "Telegram-Kanal",
"DESC": "Integrate with Telegram channel and start supporting your customers.", "DESC": "Integrieren Sie den Telegram-Kanal und unterstützen Sie Ihre Kunden.",
"BOT_TOKEN": { "BOT_TOKEN": {
"LABEL": "Bot Token", "LABEL": "Bot-Token",
"SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", "SUBTITLE": "Konfigurieren Sie den Bot-Token, welchen Sie von Telegram BotFather erhalten haben.",
"PLACEHOLDER": "Bot Token" "PLACEHOLDER": "Bot-Token"
}, },
"SUBMIT_BUTTON": "Create Telegram Channel", "SUBMIT_BUTTON": "Telegram-Kanal erstellen",
"API": { "API": {
"ERROR_MESSAGE": "We were not able to save the telegram channel" "ERROR_MESSAGE": "Wir konnten den Telegram-Kanal nicht speichern"
} }
}, },
"AUTH": { "AUTH": {
"TITLE": "Wähle einen Kanal", "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": { "AGENTS": {
"TITLE": "Agenten", "TITLE": "Agenten",
@ -292,23 +292,23 @@
}, },
"AUTO_ASSIGNMENT": { "AUTO_ASSIGNMENT": {
"ENABLED": "Aktiviert", "ENABLED": "Aktiviert",
"DISABLED": "Behindert" "DISABLED": "Deaktiviert"
}, },
"EMAIL_COLLECT_BOX": { "EMAIL_COLLECT_BOX": {
"ENABLED": "Aktiviert", "ENABLED": "Aktiviert",
"DISABLED": "Behindert" "DISABLED": "Deaktiviert"
}, },
"ENABLE_CSAT": { "ENABLE_CSAT": {
"ENABLED": "Aktiviert", "ENABLED": "Aktiviert",
"DISABLED": "Behindert" "DISABLED": "Deaktiviert"
}, },
"ENABLE_HMAC": { "ENABLE_HMAC": {
"LABEL": "Enable" "LABEL": "Aktivieren"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Löschen", "BUTTON_TEXT": "Löschen",
"AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar", "AVATAR_DELETE_BUTTON_TEXT": "Avatar löschen",
"CONFIRM": { "CONFIRM": {
"TITLE": "Löschung bestätigen", "TITLE": "Löschung bestätigen",
"MESSAGE": "Bist du sicher, das du das löschen möchtest ", "MESSAGE": "Bist du sicher, das du das löschen möchtest ",
@ -319,8 +319,8 @@
"API": { "API": {
"SUCCESS_MESSAGE": "Posteingang erfolgreich gelöscht", "SUCCESS_MESSAGE": "Posteingang erfolgreich gelöscht",
"ERROR_MESSAGE": "Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.", "ERROR_MESSAGE": "Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.",
"AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully", "AVATAR_SUCCESS_MESSAGE": "Avatar von Posteingang erfolgreich gelöscht",
"AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later." "AVATAR_ERROR_MESSAGE": "Der Avatar vom Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
} }
}, },
"TABS": { "TABS": {
@ -353,11 +353,11 @@
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktivieren oder deaktivieren Sie die automatische Zuweisung verfügbarer Agenten für neue Konversationen", "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_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_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_VERIFICATION": "Erzwinge Benutzer-Identitätsüberprüfung",
"HMAC_MANDATORY_DESCRIPTION": "If enabled, Chatwoot SDKs setUser method will not work unless the `identifier_hash` is provided for each user.", "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": "Inbox Identifier", "INBOX_IDENTIFIER": "Identifizierung für Posteingang",
"INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.", "INBOX_IDENTIFIER_SUB_TEXT": "Verwenden Sie den hier angezeigten `inbox_identifier`-Token zur Authentifizierung Ihrer API-Clients.",
"FORWARD_EMAIL_TITLE": "Forward to Email", "FORWARD_EMAIL_TITLE": "Weiterleitung an E-Mail",
"FORWARD_EMAIL_SUB_TEXT": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse." "FORWARD_EMAIL_SUB_TEXT": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
}, },
"FACEBOOK_REAUTHORIZE": { "FACEBOOK_REAUTHORIZE": {
@ -390,7 +390,7 @@
"TIMEZONE_LABEL": "Zeitzone auswählen", "TIMEZONE_LABEL": "Zeitzone auswählen",
"UPDATE": "Einstellungen für Geschäftszeiten aktualisieren", "UPDATE": "Einstellungen für Geschäftszeiten aktualisieren",
"TOGGLE_AVAILABILITY": "Geschäftszeiten für diesen Posteingang aktivieren", "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.", "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.", "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": { "DAY": {

View File

@ -5,7 +5,7 @@
"HEADER": "Anwendungen", "HEADER": "Anwendungen",
"STATUS": { "STATUS": {
"ENABLED": "Aktiviert", "ENABLED": "Aktiviert",
"DISABLED": "Behindert" "DISABLED": "Deaktiviert"
}, },
"CONFIGURE": "Konfigurieren", "CONFIGURE": "Konfigurieren",
"ADD_BUTTON": "Neuen Hook hinzufügen", "ADD_BUTTON": "Neuen Hook hinzufügen",

View File

@ -62,7 +62,7 @@
} }
}, },
"AGENT_REPORTS": { "AGENT_REPORTS": {
"HEADER": "Agents Overview", "HEADER": "Agenten-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...", "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.", "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", "DOWNLOAD_AGENT_REPORTS": "Agenten-Berichte herunterladen",
@ -125,11 +125,11 @@
} }
}, },
"LABEL_REPORTS": { "LABEL_REPORTS": {
"HEADER": "Labels Overview", "HEADER": "Label-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...", "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.", "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", "DOWNLOAD_LABEL_REPORTS": "Label-Berichte herunterladen",
"FILTER_DROPDOWN_LABEL": "Select Label", "FILTER_DROPDOWN_LABEL": "Label auswählen",
"METRICS": { "METRICS": {
"CONVERSATIONS": { "CONVERSATIONS": {
"NAME": "Gespräche", "NAME": "Gespräche",
@ -188,10 +188,10 @@
} }
}, },
"INBOX_REPORTS": { "INBOX_REPORTS": {
"HEADER": "Inbox Overview", "HEADER": "Posteingangsübersicht",
"LOADING_CHART": "Diagrammdaten laden ...", "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.", "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", "FILTER_DROPDOWN_LABEL": "Eingang auswählen",
"METRICS": { "METRICS": {
"CONVERSATIONS": { "CONVERSATIONS": {
@ -251,11 +251,11 @@
} }
}, },
"TEAM_REPORTS": { "TEAM_REPORTS": {
"HEADER": "Team Overview", "HEADER": "Team-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...", "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.", "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", "DOWNLOAD_TEAM_REPORTS": "Team-Berichte herunterladen",
"FILTER_DROPDOWN_LABEL": "Select Team", "FILTER_DROPDOWN_LABEL": "Team auswählen",
"METRICS": { "METRICS": {
"CONVERSATIONS": { "CONVERSATIONS": {
"NAME": "Gespräche", "NAME": "Gespräche",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "Tage der Testversion verbleibend.", "TRIAL_MESSAGE": "Tage der Testversion verbleibend.",
"TRAIL_BUTTON": "Jetzt kaufen" "TRAIL_BUTTON": "Jetzt kaufen",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "Kontoeinstellungen", "ACCOUNT_SETTINGS": "Kontoeinstellungen",
"APPLICATIONS": "Anwendungen", "APPLICATIONS": "Anwendungen",
"LABELS": "Labels", "LABELS": "Labels",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Benutzerdefinierte Attribute",
"TEAMS": "Teams", "TEAMS": "Teams",
"ALL_CONTACTS": "Alle Kontakte", "ALL_CONTACTS": "Alle Kontakte",
"TAGGED_WITH": "Markiert mit", "TAGGED_WITH": "Markiert mit",
@ -178,15 +179,15 @@
"OPEN_CONVERSATION": "Unterhaltung öffnen", "OPEN_CONVERSATION": "Unterhaltung öffnen",
"RESOLVE_AND_NEXT": "Lösen und zum Nächsten gehen", "RESOLVE_AND_NEXT": "Lösen und zum Nächsten gehen",
"NAVIGATE_DROPDOWN": "Dropdown-Elemente navigieren", "NAVIGATE_DROPDOWN": "Dropdown-Elemente navigieren",
"RESOLVE_CONVERSATION": "Unterhaltung lösen", "RESOLVE_CONVERSATION": "Unterhaltung als gelöst kennzeichnen",
"GO_TO_CONVERSATION_DASHBOARD": "Zur Konversationsübersicht", "GO_TO_CONVERSATION_DASHBOARD": "Gehe zur Konversationsübersicht",
"ADD_ATTACHMENT": "Anhang hinzufügen", "ADD_ATTACHMENT": "Anhang hinzufügen",
"GO_TO_CONTACTS_DASHBOARD": "Zur Kontaktübersicht", "GO_TO_CONTACTS_DASHBOARD": "Zur Kontaktübersicht",
"TOGGLE_SIDEBAR": "Seitenleiste umschalten", "TOGGLE_SIDEBAR": "Seitenleiste umschalten",
"GO_TO_REPORTS_SIDEBAR": "Zur Berichtsseitenleiste", "GO_TO_REPORTS_SIDEBAR": "Zur Berichtsseitenleiste",
"MOVE_TO_NEXT_TAB": "Zum nächsten Tab in der Konversationsliste gehen", "MOVE_TO_NEXT_TAB": "Zum nächsten Tab in der Konversationsliste gehen",
"GO_TO_SETTINGS": "Zu den Einstellungen", "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", "SWITCH_TO_PRIVATE_NOTE": "Zu privaten Notizen wechseln",
"TOGGLE_RICH_CONTENT_EDITOR": "Rich-Content-Editor umschalten", "TOGGLE_RICH_CONTENT_EDITOR": "Rich-Content-Editor umschalten",
"SWITCH_TO_REPLY": "Zur Antwort wechseln", "SWITCH_TO_REPLY": "Zur Antwort wechseln",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Ιδιότητες", "HEADER": "Προσαρμοζόμενες Ιδιότητες",
"HEADER_BTN_TXT": "Προσθήκη ιδιότητας", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Λήψη ιδιοτήτων", "LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Ιδιότητες</b> <p>Μια προσαρμοσμένη ιδιότητα παρακολουθεί γεγονότα σχετικά με τις επαφές σας/συνομιλίες σας — όπως για παράδειγμα συνδρομή, ή όταν γίνεται η πρώτη παραγγελία κ. λπ. <br /><br />Για τη δημιουργία ιδιοτήτων απλά κάντε κλικ στο<b>Προσθήκη Ιδιότητας.</b> Μπορείτε επίσης να επεξεργαστείτε ή να διαγράψετε μια υπάρχουσα Ιδιότητα κάνοντας κλικ στο κουμπί Επεξεργασία ή διαγραφή.</p>", "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": { "ADD": {
"TITLE": "Προσθήκη ιδιότητας", "TITLE": "Add Custom Attribute",
"SUBMIT": "Δημιουργία", "SUBMIT": "Δημιουργία",
"CANCEL_BUTTON_TEXT": "Άκυρο", "CANCEL_BUTTON_TEXT": "Άκυρο",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Εμφανιζόμενο Όνομα", "LABEL": "Εμφανιζόμενο Όνομα",
"PLACEHOLDER": "Εισάγετε το εμφανιζόμενο όνομα της ιδιότητας", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Το όνομα απαιτείται" "ERROR": "Το όνομα απαιτείται"
}, },
"DESC": { "DESC": {
"LABEL": "Περιγραφή", "LABEL": "Περιγραφή",
"PLACEHOLDER": "Εισάγετε την περιγραφή της ιδιότητας", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Η περιγραφή απαιτείται" "ERROR": "Η περιγραφή απαιτείται"
}, },
"MODEL": { "MODEL": {
"LABEL": "Μοντέλο", "LABEL": "Applies to",
"PLACEHOLDER": "Παρακαλώ επιλέξτε ένα μοντέλο", "PLACEHOLDER": "Please select one",
"ERROR": "Απαιτείται το μοντέλο" "ERROR": "Απαιτείται το μοντέλο"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Ο τύπος απαιτείται" "ERROR": "Ο τύπος απαιτείται"
}, },
"KEY": { "KEY": {
"LABEL": "Κλειδί" "LABEL": "Κλειδί",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Η ιδιότητα προστέθηκε με επιτυχία", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η δημιουργία Ιδιότητας, Παρακαλώ δοκιμάστε ξανά αργότερα" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Διαγραφή", "BUTTON_TEXT": "Διαγραφή",
"API": { "API": {
"SUCCESS_MESSAGE": "Η ιδιότητα προστέθηκε με επιτυχία.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Δεν ήταν δυνατή η διαγραφή της ιδιότητας. Δοκιμάστε ξανά." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Είστε σίγουροι ότι θέλετε να διαγράψετε την ομάδα %{attributeName}", "TITLE": "Είστε σίγουροι ότι θέλετε να διαγράψετε την ομάδα %{attributeName}",
"PLACE_HOLDER": "Παρακαλώ πληκτρολογήστε {attributeName} για επιβεβαίωση", "PLACE_HOLDER": "Παρακαλώ πληκτρολογήστε {attributeName} για επιβεβαίωση",
"MESSAGE": "Διαγραφή θα καταργήσει την ιδιότητα", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Διαγραφή ", "YES": "Διαγραφή ",
"NO": "Άκυρο" "NO": "Άκυρο"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Επεξεργασία ιδιότητας", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Ενημέρωση", "UPDATE_BUTTON_TEXT": "Ενημέρωση",
"API": { "API": {
"SUCCESS_MESSAGE": "Ο πράκτορας ενημερώθηκε επιτυχώς", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ιδιότητας, παρακαλώ προσπαθήστε ξανά" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "Διαγραφή" "DELETE": "Διαγραφή"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "Δεν δημιουργήθηκαν χαρακτηριστικά", "404": "There are no custom attributes created",
"NOT_FOUND": "Δεν έχουν ρυθμιστεί ιδιότητες" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Ανοιχτές", "TEXT": "Ανοιχτές"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Επιλυθείσες", "TEXT": "Επιλύθηκαν"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Εκκρεμεί", "TEXT": "Εκκρεμεί"
"VALUE": "εκκρεμεί"
}, },
{ "snoozed": {
"TEXT": "Αναβολή", "TEXT": "Αναβολή"
"VALUE": "αναβολή"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "Παραλήφθηκε από email", "RECEIVED_VIA_EMAIL": "Παραλήφθηκε από email",
"VIEW_TWEET_IN_TWITTER": "Προβολή του tweet στο Twitter", "VIEW_TWEET_IN_TWITTER": "Προβολή του tweet στο Twitter",
"REPLY_TO_TWEET": "Απάντηση στο tweet", "REPLY_TO_TWEET": "Απάντηση στο tweet",
"SENT": "Επιτυχής αποστολή",
"NO_MESSAGES": "Κανένα Μήνυμα", "NO_MESSAGES": "Κανένα Μήνυμα",
"NO_CONTENT": "Μη διαθέσιμο περιεχόμενο", "NO_CONTENT": "Μη διαθέσιμο περιεχόμενο",
"HIDE_QUOTED_TEXT": "Απόκρυψη Κειμένου Παράθεσης", "HIDE_QUOTED_TEXT": "Απόκρυψη Κειμένου Παράθεσης",

View File

@ -7,6 +7,7 @@
"COMPANY": "Εταιρία", "COMPANY": "Εταιρία",
"LOCATION": "Θέση", "LOCATION": "Θέση",
"CONVERSATION_TITLE": "Λεπτομέρειες συνομιλίας", "CONVERSATION_TITLE": "Λεπτομέρειες συνομιλίας",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Φυλλομετρητής", "BROWSER": "Φυλλομετρητής",
"OS": "Λειτουργικό", "OS": "Λειτουργικό",
"INITIATED_FROM": "Αρχικοποίηση από", "INITIATED_FROM": "Αρχικοποίηση από",
@ -154,6 +155,11 @@
"LABEL": "Εισερχόμενα", "LABEL": "Εισερχόμενα",
"ERROR": "Επιλέξτε ένα κιβώτιο εισερχόμενων" "ERROR": "Επιλέξτε ένα κιβώτιο εισερχόμενων"
}, },
"SUBJECT": {
"LABEL": "Θέμα",
"PLACEHOLDER": "Θέμα",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Μήνυμα", "LABEL": "Μήνυμα",
"PLACEHOLDER": "Γράψτε το μήνυμά σας εδώ", "PLACEHOLDER": "Γράψτε το μήνυμά σας εδώ",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Προβολή λεπτομεριών" "VIEW_DETAILS": "Προβολή λεπτομεριών"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Επαφές",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Προσθήκη", "BUTTON": "Προσθήκη",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Σημειώσεις" "TITLE": "Σημειώσεις"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Προσθήκη", "BUTTON": "Προσθήκη",
"PLACEHOLDER": "Προσθήκη σημείωσης", "PLACEHOLDER": "Προσθήκη σημείωσης",
"TITLE": "Shift + Enter για δημιουργία σημείωσης" "TITLE": "Shift + Enter για δημιουργία σημείωσης"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "Εμφάνιση όλων των σημειώσεων" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Προσθήκη προσαρμοσμένης ιδιότητας", "BUTTON": "Προσθήκη προσαρμοσμένης ιδιότητας",
"NOT_AVAILABLE": "Δεν υπάρχουν διαθέσιμες προσαρμοσμένες ιδιότητες για αυτήν την επαφή.", "NOT_AVAILABLE": "Δεν υπάρχουν διαθέσιμες προσαρμοσμένες ιδιότητες για αυτήν την επαφή.",
"COPY_SUCCESSFUL": "Αντιγράφτηκε με επιτυχία στο πρόχειρο",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Επεξεργασία ιδιότητας"
},
"ADD": { "ADD": {
"TITLE": "Δημιουργία προσαρμοσμένης ιδιότητας", "TITLE": "Δημιουργία προσαρμοσμένης ιδιότητας",
"DESC": "Προσθέστε προσαρμοσμένες πληροφορίες σε αυτήν την επαφή." "DESC": "Προσθέστε προσαρμοσμένες πληροφορίες σε αυτήν την επαφή."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "Τιμή ιδιότητας", "LABEL": "Τιμή ιδιότητας",
"PLACEHOLDER": "π.χ.: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Προηγούμενες συνομιλίες" "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": { "EMAIL_HEADER": {
"TO": "Προς", "TO": "Προς",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "ημέρες δοκιμαστικής περιόδου απομένουν.", "TRIAL_MESSAGE": "ημέρες δοκιμαστικής περιόδου απομένουν.",
"TRAIL_BUTTON": "Αγόρασε τώρα" "TRAIL_BUTTON": "Αγόρασε τώρα",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,7 +143,7 @@
"ACCOUNT_SETTINGS": "Ρυθμίσεις Λογαριασμού", "ACCOUNT_SETTINGS": "Ρυθμίσεις Λογαριασμού",
"APPLICATIONS": "Εφαρμογές", "APPLICATIONS": "Εφαρμογές",
"LABELS": "Ετικέτες", "LABELS": "Ετικέτες",
"ATTRIBUTES": "Ιδιότητες", "CUSTOM_ATTRIBUTES": "Προσαρμοζόμενες Ιδιότητες",
"TEAMS": "Ομάδες", "TEAMS": "Ομάδες",
"ALL_CONTACTS": "Όλες Οι Επαφές", "ALL_CONTACTS": "Όλες Οι Επαφές",
"TAGGED_WITH": "Ετικέτα με", "TAGGED_WITH": "Ετικέτα με",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Custom Attributes",
"HEADER_BTN_TXT": "Add Attribute", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Add attribute", "TITLE": "Add Custom Attribute",
"SUBMIT": "Create", "SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Cancel", "CANCEL_BUTTON_TEXT": "Cancel",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Display Name", "LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "Description", "LABEL": "Description",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "Model", "LABEL": "Applies to",
"PLACEHOLDER": "Please select a model", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Model is required"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required" "ERROR": "Type is required"
}, },
"KEY": { "KEY": {
"LABEL": "Key" "LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Delete", "BUTTON_TEXT": "Delete",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}", "TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm", "PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Delete ", "YES": "Delete ",
"NO": "Cancel" "NO": "Cancel"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Update", "UPDATE_BUTTON_TEXT": "Update",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -72,8 +75,8 @@
"DELETE": "Delete" "DELETE": "Delete"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Open", "TEXT": "Open"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Resolved", "TEXT": "Resolved"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Pending", "TEXT": "Pending"
"VALUE": "pending"
}, },
{ "snoozed": {
"TEXT": "Snoozed", "TEXT": "Snoozed"
"VALUE": "snoozed"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",

View File

@ -7,6 +7,7 @@
"COMPANY": "Company", "COMPANY": "Company",
"LOCATION": "Location", "LOCATION": "Location",
"CONVERSATION_TITLE": "Conversation Details", "CONVERSATION_TITLE": "Conversation Details",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Browser", "BROWSER": "Browser",
"OS": "Operating System", "OS": "Operating System",
"INITIATED_FROM": "Initiated from", "INITIATED_FROM": "Initiated from",
@ -154,6 +155,11 @@
"LABEL": "Inbox", "LABEL": "Inbox",
"ERROR": "Select an inbox" "ERROR": "Select an inbox"
}, },
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Message", "LABEL": "Message",
"PLACEHOLDER": "Write your message here", "PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details" "VIEW_DETAILS": "View details"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contacts",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Add", "BUTTON": "Add",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Notes" "TITLE": "Notes"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Add", "BUTTON": "Add",
"PLACEHOLDER": "Add a note", "PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note" "TITLE": "Shift + Enter to create a note"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "View all notes" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute", "BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "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": { "ADD": {
"TITLE": "Create custom attribute", "TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact." "DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": { "VALUE": {
"LABEL": "Attribute value", "LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Previous Conversations" "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": { "EMAIL_HEADER": {
"TO": "To", "TO": "To",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -79,5 +79,50 @@
"BUTTON": { "BUTTON": {
"REFRESH": "Refresh" "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"
}
} }
} }

View File

@ -103,7 +103,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "days trial remaining.", "TRIAL_MESSAGE": "days trial remaining.",
"TRAIL_BUTTON": "Buy Now" "TRAIL_BUTTON": "Buy Now",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -138,7 +139,7 @@
"ACCOUNT_SETTINGS": "Account Settings", "ACCOUNT_SETTINGS": "Account Settings",
"APPLICATIONS": "Applications", "APPLICATIONS": "Applications",
"LABELS": "Labels", "LABELS": "Labels",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Custom Attributes",
"TEAMS": "Teams", "TEAMS": "Teams",
"ALL_CONTACTS": "All Contacts", "ALL_CONTACTS": "All Contacts",
"TAGGED_WITH": "Tagged with", "TAGGED_WITH": "Tagged with",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "Attributes", "HEADER": "Atributos personalizados",
"HEADER_BTN_TXT": "Add Attribute", "HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching attributes", "LOADING": "Fetching custom 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>", "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": { "ADD": {
"TITLE": "Add attribute", "TITLE": "Add Custom Attribute",
"SUBMIT": "Crear", "SUBMIT": "Crear",
"CANCEL_BUTTON_TEXT": "Cancelar", "CANCEL_BUTTON_TEXT": "Cancelar",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "Display Name", "LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name", "PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required" "ERROR": "Name is required"
}, },
"DESC": { "DESC": {
"LABEL": "Descripción", "LABEL": "Descripción",
"PLACEHOLDER": "Enter attribute description", "PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required" "ERROR": "Description is required"
}, },
"MODEL": { "MODEL": {
"LABEL": "Model", "LABEL": "Applies to",
"PLACEHOLDER": "Please select a model", "PLACEHOLDER": "Please select one",
"ERROR": "Model is required" "ERROR": "Model is required"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required" "ERROR": "Type is required"
}, },
"KEY": { "KEY": {
"LABEL": "Key" "LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute added successfully", "SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later" "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "Eliminar", "BUTTON_TEXT": "Eliminar",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.", "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again." "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "¿Está seguro que quiere borrar - %{attributeName}?", "TITLE": "¿Está seguro que quiere borrar - %{attributeName}?",
"PLACE_HOLDER": "Por favor, escriba {attributeName} para confirmar", "PLACE_HOLDER": "Por favor, escriba {attributeName} para confirmar",
"MESSAGE": "Deleting will remove the attribute", "MESSAGE": "Deleting will remove the custom attribute",
"YES": "Eliminar ", "YES": "Eliminar ",
"NO": "Cancelar" "NO": "Cancelar"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "Edit attribute", "TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Actualizar", "UPDATE_BUTTON_TEXT": "Actualizar",
"API": { "API": {
"SUCCESS_MESSAGE": "Attribute updated successfully", "SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again" "ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "Eliminar" "DELETE": "Eliminar"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "There are no attributes created", "404": "There are no custom attributes created",
"NOT_FOUND": "There are no attributes configured" "NOT_FOUND": "There are no custom attributes configured"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "Abrir", "TEXT": "Abrir"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "Resuelto", "TEXT": "Resuelto"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "Pending", "TEXT": "Pending"
"VALUE": "pending"
}, },
{ "snoozed": {
"TEXT": "Snoozed", "TEXT": "Snoozed"
"VALUE": "snoozed"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "Recibido por correo electrónico", "RECEIVED_VIA_EMAIL": "Recibido por correo electrónico",
"VIEW_TWEET_IN_TWITTER": "Ver trino en Twitter", "VIEW_TWEET_IN_TWITTER": "Ver trino en Twitter",
"REPLY_TO_TWEET": "Responder a éste trino", "REPLY_TO_TWEET": "Responder a éste trino",
"SENT": "Sent successfully",
"NO_MESSAGES": "No hay mensajes", "NO_MESSAGES": "No hay mensajes",
"NO_CONTENT": "No hay contenido disponible", "NO_CONTENT": "No hay contenido disponible",
"HIDE_QUOTED_TEXT": "Hide Quoted Text", "HIDE_QUOTED_TEXT": "Hide Quoted Text",

View File

@ -7,6 +7,7 @@
"COMPANY": "Empresa", "COMPANY": "Empresa",
"LOCATION": "Ubicación", "LOCATION": "Ubicación",
"CONVERSATION_TITLE": "Detalles de la conversación", "CONVERSATION_TITLE": "Detalles de la conversación",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Navegador", "BROWSER": "Navegador",
"OS": "Sistema operativo", "OS": "Sistema operativo",
"INITIATED_FROM": "Iniciado desde", "INITIATED_FROM": "Iniciado desde",
@ -154,6 +155,11 @@
"LABEL": "Bandeja de entrada", "LABEL": "Bandeja de entrada",
"ERROR": "Seleccione una bandeja de entrada" "ERROR": "Seleccione una bandeja de entrada"
}, },
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": { "MESSAGE": {
"LABEL": "Mensaje", "LABEL": "Mensaje",
"PLACEHOLDER": "Escriba su mensaje aquí", "PLACEHOLDER": "Escriba su mensaje aquí",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Ver detalles" "VIEW_DETAILS": "Ver detalles"
} }
}, },
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contactos",
"LOADING": "Loading contact profile..."
},
"REMINDER": { "REMINDER": {
"ADD_BUTTON": { "ADD_BUTTON": {
"BUTTON": "Añadir", "BUTTON": "Añadir",
@ -199,16 +209,21 @@
} }
}, },
"NOTES": { "NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": { "HEADER": {
"TITLE": "Notas" "TITLE": "Notas"
}, },
"LIST": {
"LABEL": "added a note"
},
"ADD": { "ADD": {
"BUTTON": "Añadir", "BUTTON": "Añadir",
"PLACEHOLDER": "Añadir nota", "PLACEHOLDER": "Añadir nota",
"TITLE": "Shift + Enter para crear una nota" "TITLE": "Shift + Enter para crear una nota"
}, },
"FOOTER": { "CONTENT_HEADER": {
"BUTTON": "Ver todas las notas" "DELETE": "Delete note"
} }
}, },
"EVENTS": { "EVENTS": {
@ -222,8 +237,15 @@
} }
}, },
"CUSTOM_ATTRIBUTES": { "CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute", "BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.", "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": { "ADD": {
"TITLE": "Create custom attribute", "TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact." "DESC": "Add custom information to this contact."
@ -233,13 +255,35 @@
"CANCEL": "Cancelar", "CANCEL": "Cancelar",
"NAME": { "NAME": {
"LABEL": "Custom attribute name", "LABEL": "Custom attribute name",
"PLACEHOLDER": "Eg: shopify id", "PLACEHOLDER": "Ej: shopify id",
"ERROR": "Invalid custom attribute name" "ERROR": "Invalid custom attribute name"
}, },
"VALUE": { "VALUE": {
"LABEL": "Attribute value", "LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 " "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": { "MERGE_CONTACTS": {

View File

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Conversaciones anteriores" "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": { "EMAIL_HEADER": {
"TO": "Para", "TO": "Para",
"BCC": "Bcc", "BCC": "Bcc",

View File

@ -346,7 +346,7 @@
"ENABLE_EMAIL_COLLECT_BOX": "Activar caja de recolección de correo electrónico", "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", "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", "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", "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_TITLE": "Ajustes de la Bandeja de Entrada",
"INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de tu bandeja de entrada", "INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de tu bandeja de entrada",

View File

@ -107,7 +107,8 @@
}, },
"APP_GLOBAL": { "APP_GLOBAL": {
"TRIAL_MESSAGE": "días de prueba restantes.", "TRIAL_MESSAGE": "días de prueba restantes.",
"TRAIL_BUTTON": "Comprar ahora" "TRAIL_BUTTON": "Comprar ahora",
"DELETED_USER": "Deleted User"
}, },
"COMPONENTS": { "COMPONENTS": {
"CODE": { "CODE": {
@ -142,14 +143,14 @@
"ACCOUNT_SETTINGS": "Configuración de la cuenta", "ACCOUNT_SETTINGS": "Configuración de la cuenta",
"APPLICATIONS": "Aplicaciones", "APPLICATIONS": "Aplicaciones",
"LABELS": "Etiquetas", "LABELS": "Etiquetas",
"ATTRIBUTES": "Attributes", "CUSTOM_ATTRIBUTES": "Atributos personalizados",
"TEAMS": "Equipos", "TEAMS": "Equipos",
"ALL_CONTACTS": "Todos los contactos", "ALL_CONTACTS": "Todos los contactos",
"TAGGED_WITH": "Etiquetado con", "TAGGED_WITH": "Etiquetado con",
"REPORTS_OVERVIEW": "Overview", "REPORTS_OVERVIEW": "Overview",
"CSAT": "CSAT", "CSAT": "Encuestas de Satisfacción",
"CAMPAIGNS": "Campañas", "CAMPAIGNS": "Campañas",
"ONGOING": "Ongoing", "ONGOING": "En Curso",
"ONE_OFF": "One off", "ONE_OFF": "One off",
"REPORTS_AGENT": "Agentes", "REPORTS_AGENT": "Agentes",
"REPORTS_LABEL": "Etiquetas", "REPORTS_LABEL": "Etiquetas",

View File

@ -1,27 +1,27 @@
{ {
"ATTRIBUTES_MGMT": { "ATTRIBUTES_MGMT": {
"HEADER": "ویژگی ها", "HEADER": "ویژگی‌های سفارشی",
"HEADER_BTN_TXT": "افزودن ویژگی", "HEADER_BTN_TXT": "اضافه کردن ویژگی سفارشی",
"LOADING": "واکشی ویژگی ها", "LOADING": "واکشی ویژگی‌های سفارشی",
"SIDEBAR_TXT": "<p><b>ویژگی ها</b> <p> یک ویژگی سفارشی اطلاعات مربوط به مخاطبین یا مکالمات شما را ردیابی می کند - مانند طرح های اشتراکی یا زمانی که اولین مورد را سفارش داده اند و غیره. <br /><br /> برای ایجاد ویژگیها ، فقط روی <b> افزودن ویژگی. </b> کلیک کنید. همچنین می توانید با کلیک روی دکمه ویرایش یا حذف ، یک ویژگی موجود را ویرایش یا حذف کنید. </p>", "SIDEBAR_TXT": "<p><b>ویژگی‌های سفارشی</b> <p>یک ویژگی سفارشی اطلاعات مربوط به مخاطبین یا گفتگو شما را ردیابی می‌کند — مانند طرح‌های اشتراکی یا زمانی که اولین مورد را سفارش داده‌اند و غیره. <br /><br />برای ایجاد ویژگی‌های سفارشی، فقط روی <b>افزودن ویژگی سفارشی.</b> کلیک کنید. همچنین می‌توانید با کلیک روی دکمه ویرایش یا حذف، یک ویژگی سفارشی موجود را ویرایش یا حذف کنید.</p>",
"ADD": { "ADD": {
"TITLE": "افزودن ویژگی", "TITLE": "اضافه کردن ویژگی سفارشی",
"SUBMIT": "ايجاد كردن", "SUBMIT": "ايجاد كردن",
"CANCEL_BUTTON_TEXT": "انصراف", "CANCEL_BUTTON_TEXT": "انصراف",
"FORM": { "FORM": {
"NAME": { "NAME": {
"LABEL": "نمایش نام", "LABEL": "نمایش نام",
"PLACEHOLDER": "نام نمایشی ویژگی را وارد کنید", "PLACEHOLDER": "نام نمایشی ویژگی سفارشی را وارد کنید",
"ERROR": "نام الزامی است" "ERROR": "نام الزامی است"
}, },
"DESC": { "DESC": {
"LABEL": "توضیحات", "LABEL": "توضیحات",
"PLACEHOLDER": "توضیحات ویژگی را وارد کنید", "PLACEHOLDER": "توضیحات ویژگی سفارشی را وارد کنید",
"ERROR": "توضیحات الزامی است" "ERROR": "توضیحات الزامی است"
}, },
"MODEL": { "MODEL": {
"LABEL": "مدل", "LABEL": "شامل",
"PLACEHOLDER": "لطفا مدل را انتخاب کنید", "PLACEHOLDER": "لطفا یکی را انتخاب کنید",
"ERROR": "مدل مورد نیاز است" "ERROR": "مدل مورد نیاز است"
}, },
"TYPE": { "TYPE": {
@ -30,34 +30,37 @@
"ERROR": "نوع الزامی است" "ERROR": "نوع الزامی است"
}, },
"KEY": { "KEY": {
"LABEL": "کلید" "LABEL": "کلید",
"PLACEHOLDER": "کلید ویژگی سفارشی را وارد کنید",
"ERROR": "کلید الزامی است",
"IN_VALID": "کلید نامعتبر"
} }
}, },
"API": { "API": {
"SUCCESS_MESSAGE": "ویژگی با موفقیت اضافه شد", "SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت اضافه شد",
"ERROR_MESSAGE": "ویژگی ایجاد نشد ، لطفاً بعداً دوباره امتحان کنید" "ERROR_MESSAGE": "نمی‌توان ویژگی سفارشی ایجاد کرد، لطفا بعداً دوباره امتحان کنید"
} }
}, },
"DELETE": { "DELETE": {
"BUTTON_TEXT": "حذف", "BUTTON_TEXT": "حذف",
"API": { "API": {
"SUCCESS_MESSAGE": "ویژگی با موفقیت حذف شد.", "SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت حذف شد.",
"ERROR_MESSAGE": "ویژگی حذف نشد. دوباره امتحان کنید." "ERROR_MESSAGE": "ویژگی سفارشی حذف نشد. دوباره امتحان کنید."
}, },
"CONFIRM": { "CONFIRM": {
"TITLE": "آیا مطمئن هستید که می خواهید حذف کنید - %{attributeName}", "TITLE": "آیا مطمئن هستید که می خواهید حذف کنید - %{attributeName}",
"PLACE_HOLDER": "برای تایید لطفا {attributeName} را تایپ کنید", "PLACE_HOLDER": "برای تایید لطفا {attributeName} را تایپ کنید",
"MESSAGE": "با حذف ویژگی ، ویژگی به طور کامل پاک می شود", "MESSAGE": "با حذف ویژگی، ویژگی سفارشی به طور کامل حذف می‌شود",
"YES": "حذف ", "YES": "حذف ",
"NO": "انصراف" "NO": "انصراف"
} }
}, },
"EDIT": { "EDIT": {
"TITLE": "ویرایش ویژگی", "TITLE": "ویرایش ویژگی سفارشی",
"UPDATE_BUTTON_TEXT": "اعمال شود", "UPDATE_BUTTON_TEXT": "اعمال شود",
"API": { "API": {
"SUCCESS_MESSAGE": "ویژگی با موفقیت به روز شد", "SUCCESS_MESSAGE": "ویژگی سفارشی با موفقیت به‌روزرسانی شد",
"ERROR_MESSAGE": "هنگام بروزرسانی ویژگی خطایی روی داد ، لطفاً دوباره امتحان کنید" "ERROR_MESSAGE": "هنگام بهروزرسانی ویژگی سفارشی خطایی روی داد، لطفا دوباره امتحان کنید"
} }
}, },
"TABS": { "TABS": {
@ -77,8 +80,8 @@
"DELETE": "حذف" "DELETE": "حذف"
}, },
"EMPTY_RESULT": { "EMPTY_RESULT": {
"404": "هیچ ویژگی ایجاد نشده است", "404": "هیچ ویژگی سفارشی ایجاد نشده است",
"NOT_FOUND": "هیچ ویژگی پیکربندی نشده است" "NOT_FOUND": "هیچ ویژگی سفارشی پیکربندی نشده است"
} }
} }
} }

View File

@ -38,24 +38,20 @@
"COUNT_KEY": "allCount" "COUNT_KEY": "allCount"
} }
], ],
"CHAT_STATUS_ITEMS": [ "CHAT_STATUS_FILTER_ITEMS": {
{ "open": {
"TEXT": "باز", "TEXT": "باز"
"VALUE": "open"
}, },
{ "resolved": {
"TEXT": "حل شده", "TEXT": "حل شده"
"VALUE": "resolved"
}, },
{ "pending": {
"TEXT": "در انتظار", "TEXT": "در انتظار"
"VALUE": "در انتظار"
}, },
{ "snoozed": {
"TEXT": "به تعویق افتاد", "TEXT": "به تعویق افتاد"
"VALUE": "به تعویق افتاد"
} }
], },
"ATTACHMENTS": { "ATTACHMENTS": {
"image": { "image": {
"ICON": "ion-image", "ICON": "ion-image",
@ -85,6 +81,7 @@
"RECEIVED_VIA_EMAIL": "از طریق ایمیل دریافت شد", "RECEIVED_VIA_EMAIL": "از طریق ایمیل دریافت شد",
"VIEW_TWEET_IN_TWITTER": "مشاهده توییت در توییتر", "VIEW_TWEET_IN_TWITTER": "مشاهده توییت در توییتر",
"REPLY_TO_TWEET": "پاسخ به این توییت", "REPLY_TO_TWEET": "پاسخ به این توییت",
"SENT": "با موفقیت ارسال شد",
"NO_MESSAGES": "هیچ پیامی وجود ندارد", "NO_MESSAGES": "هیچ پیامی وجود ندارد",
"NO_CONTENT": "هیچ محتوایی موجود نیست", "NO_CONTENT": "هیچ محتوایی موجود نیست",
"HIDE_QUOTED_TEXT": "مخفی کردن متن نقل قول شده", "HIDE_QUOTED_TEXT": "مخفی کردن متن نقل قول شده",

Some files were not shown because too many files have changed in this diff Show More