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:
enabled: true
config:
threshold: 25
threshold: 30
file-lines:
enabled: true
config:
threshold: 300
exclude_patterns:
- "spec/"
- "**/specs/"

View file

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

View file

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

View file

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

View file

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

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

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

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

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
include Sift
sort_on :email, type: :string
sort_on :name, type: :string
sort_on :name, internal_name: :order_on_name, type: :scope, scope_params: [:direction]
sort_on :phone_number, type: :string
sort_on :last_activity_at, type: :datetime
sort_on :last_activity_at, internal_name: :order_on_last_activity_at, type: :scope, scope_params: [:direction]
sort_on :company, internal_name: :order_on_company_name, type: :scope, scope_params: [:direction]
sort_on :city, internal_name: :order_on_city, type: :scope, scope_params: [:direction]
sort_on :country, internal_name: :order_on_country_name, type: :scope, scope_params: [:direction]
RESULTS_PER_PAGE = 15
before_action :check_authorization
before_action :set_current_page, only: [:index, :active, :search]
before_action :fetch_contact, only: [:show, :update, :destroy, :contactable_inboxes]
before_action :fetch_contact, only: [:show, :update, :destroy, :contactable_inboxes, :destroy_custom_attributes]
before_action :set_include_contact_inboxes, only: [:index, :search]
def index
@ -50,11 +52,24 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
def show; end
def filter
result = ::Contacts::FilterService.new(params.permit!, current_user).perform
contacts = result[:contacts]
@contacts_count = result[:count]
@contacts = fetch_contacts_with_conversation_count(contacts)
end
def contactable_inboxes
@all_contactable_inboxes = Contacts::ContactableInboxesService.new(contact: @contact).get
@contactable_inboxes = @all_contactable_inboxes.select { |contactable_inbox| policy(contactable_inbox[:inbox]).show? }
end
# TODO : refactor this method into dedicated contacts/custom_attributes controller class and routes
def destroy_custom_attributes
@contact.custom_attributes = @contact.custom_attributes.excluding(params[:custom_attributes])
@contact.save!
end
def create
ActiveRecord::Base.transaction do
@contact = Current.account.contacts.new(contact_params)
@ -91,10 +106,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
def resolved_contacts
return @resolved_contacts if @resolved_contacts
@resolved_contacts = Current.account.contacts
.where.not(email: [nil, ''])
.or(Current.account.contacts.where.not(phone_number: [nil, '']))
.or(Current.account.contacts.where.not(identifier: [nil, '']))
@resolved_contacts = Current.account.contacts.resolved_contacts
@resolved_contacts = @resolved_contacts.tagged_with(params[:labels], any: true) if params[:labels].present?
@resolved_contacts
end

View file

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

View file

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

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]
channel_attributes = get_channel_attributes(@inbox.channel_type)
@inbox.channel.update!(permitted_params(channel_attributes)[:channel]) if permitted_params(channel_attributes)[:channel].present?
# Inbox update doesn't necessarily need channel attributes
return if permitted_params(channel_attributes)[:channel].blank?
@inbox.channel.update!(permitted_params(channel_attributes)[:channel])
update_channel_feature_flags
end

View file

@ -55,7 +55,7 @@ class Api::V1::AccountsController < Api::BaseController
end
def check_signup_enabled
raise ActionController::RoutingError, 'Not Found' if ENV.fetch('ENABLE_ACCOUNT_SIGNUP', true) == 'false'
raise ActionController::RoutingError, 'Not Found' if GlobalConfig.get_value('ENABLE_ACCOUNT_SIGNUP') == 'false'
end
def pundit_user

View file

@ -11,11 +11,19 @@ class Api::V1::Widget::ContactsController < Api::V1::Widget::BaseController
render json: contact_identify_action.perform
end
# TODO : clean up this with proper routes delete contacts/custom_attributes
def destroy_custom_attributes
@contact.custom_attributes = @contact.custom_attributes.excluding(params[:custom_attributes])
@contact.save!
render json: @contact
end
private
def process_hmac
return if params[:identifier_hash].blank?
raise StandardError, 'HMAC failed: Invalid Identifier Hash Provided' unless valid_hmac?
return if params[:identifier_hash].blank? && !@web_widget.hmac_mandatory
render json: { error: 'HMAC failed: Invalid Identifier Hash Provided' }, status: :unauthorized unless valid_hmac?
@contact_inbox.update(hmac_verified: true)
end

View file

@ -27,7 +27,9 @@ class DashboardController < ActionController::Base
'ANALYTICS_TOKEN',
'ANALYTICS_HOST'
).merge(
APP_VERSION: Chatwoot.config[:version]
APP_VERSION: Chatwoot.config[:version],
VAPID_PUBLIC_KEY: VapidService.public_key,
ENABLE_ACCOUNT_SIGNUP: GlobalConfigService.load('ENABLE_ACCOUNT_SIGNUP', 'false')
)
end

View file

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

View file

@ -2,7 +2,27 @@ import ApiClient from './ApiClient';
class ContactNotes extends ApiClient {
constructor() {
super('contact_notes', { accountScoped: true });
super('notes', { accountScoped: true });
this.contactId = null;
}
get url() {
return `${this.baseUrl()}/contacts/${this.contactId}/notes`;
}
get(contactId) {
this.contactId = contactId;
return super.get();
}
create(contactId, content) {
this.contactId = contactId;
return super.create({ content });
}
delete(contactId, id) {
this.contactId = contactId;
return super.delete(id);
}
}

View file

@ -60,6 +60,12 @@ class ContactAPI extends ApiClient {
headers: { 'Content-Type': 'multipart/form-data' },
});
}
destroyCustomAttributes(contactId, customAttributes) {
return axios.post(`${this.url}/${contactId}/destroy_custom_attributes`, {
custom_attributes: customAttributes,
});
}
}
export default new ContactAPI();

View file

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

View file

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

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

View file

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

View file

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

View file

@ -1,3 +1,44 @@
.margin-right-small {
margin-right: var(--space-small);
}
.fs-small {
font-size: var(--font-size-small);
}
.fs-default {
font-size: var(--font-size-default);
}
.fw-medium {
font-weight: var(--font-weight-medium);
}
.p-normal {
padding: var(--space-normal);
}
.overflow-scroll {
overflow: scroll;
}
.overflow-auto {
overflow: auto;
}
.overflow-hidden {
overflow: hidden;
}
.border-right {
border-right: 1px solid var(--color-border);
}
.border-left {
border-left: 1px solid var(--color-border);
}
.bg-white {
background-color: var(--white);
}

View file

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

View file

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

View file

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

View file

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

View file

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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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(() => {
window.bus = {
$emit: jest.fn(),
$on: jest.fn(),
$off: jest.fn(),
};
state = {

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "السمات",
"HEADER_BTN_TXT": "إضافة سمة",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "سمات مخصصة",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "أضف سمة",
"TITLE": "Add Custom Attribute",
"SUBMIT": "إنشاء",
"CANCEL_BUTTON_TEXT": "إلغاء",
"FORM": {
"NAME": {
"LABEL": "اسم العرض",
"PLACEHOLDER": "أدخل اسم عرض السمة",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "الوصف",
"PLACEHOLDER": "أدخل وصف السمة",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "نموذج",
"PLACEHOLDER": "الرجاء اختيار نموذج",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "النموذج مطلوب"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "النوع مطلوب"
},
"KEY": {
"LABEL": "المفتاح"
"LABEL": "المفتاح",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "تمت إضافة السمة بنجاح",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "حذف",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "هل أنت متأكد من أنك تريد حذف - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "حذف ",
"NO": "إلغاء"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "تحديث",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -77,8 +80,8 @@
"DELETE": "حذف"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "الشركة",
"LOCATION": "الموقع الجغرافي",
"CONVERSATION_TITLE": "تفاصيل المحادثة",
"VIEW_PROFILE": "View Profile",
"BROWSER": "المتصفح",
"OS": "نظام التشغيل",
"INITIATED_FROM": "تم البدء من",
@ -154,6 +155,11 @@
"LABEL": "صندوق الوارد",
"ERROR": "حدد صندوق الوارد"
},
"SUBJECT": {
"LABEL": "الموضوع",
"PLACEHOLDER": "الموضوع",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "رسالة",
"PLACEHOLDER": "اكتب رسالتك هنا",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "عرض التفاصيل"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "جهات الاتصال",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "إضافة",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "ملاحظات"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "إضافة",
"PLACEHOLDER": "إضافة ملاحظة",
"TITLE": "Shift + Enter لإنشاء مهمة"
},
"FOOTER": {
"BUTTON": "عرض جميع الملاحظات"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "إضافة سمة خاصة",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "إنشاء سمة خاصة",
"DESC": "أضف معلومات خاصة إلى جهة الاتصال هذه."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "قيمة السمة",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "تمت إضافة السمة بنجاح",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "المحادثات السابقة"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "إضافة",
"SUCCESS": "تمت إضافة السمة بنجاح",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "إلى",
"BCC": "Bcc",

View file

@ -1,7 +1,7 @@
{
"INBOX_MGMT": {
"HEADER": "قنوات التواصل",
"SIDEBAR_TXT": "<p><b>قنوات التواصل</b></p> <p> عند ربطك لموقع ويب أو صفحة فيسبوك إلى Chatwooot، يتم تسميتها <b>قناة تواصل</b>. يمكنك إنشاء قنوات تواصل غير محدودة من مختلف الأنواع في حساب Chatwoot الخاص بك. </p><p> انقر فوق <b>إضافة قناة تواصل</b> لربط موقع الويب أو صفحة فيسبوك الخاصة بك. </p><p> من لوحة الإدارة، يمكنك رؤية جميع المحادثات من جميع صناديق الوارد الخاصة بك والرد عليها من مكان موّحد عبر الضغط على علامة التبويب \"المحادثات\". </p><p> يمكنك أيضًا مشاهدة المحادثات الخاصة بصندوق وارد معين بالنقر على اسم صندوق الوارد على الجزء الجانبي من لوحة الإدارة. </p>",
"SIDEBAR_TXT": "<p><b>قنوات التواصل</b></p> <p> عند ربطك لموقع ويب أو صفحة فيسبوك إلى Chatwoot، يتم تسميتها <b>قناة تواصل</b>. يمكنك إنشاء قنوات تواصل غير محدودة من مختلف الأنواع في حساب Chatwoot الخاص بك. </p><p> انقر فوق <b>إضافة قناة تواصل</b> لربط موقع الويب أو صفحة فيسبوك الخاصة بك. </p><p> من لوحة الإدارة، يمكنك رؤية جميع المحادثات من جميع صناديق الوارد الخاصة بك والرد عليها من مكان موّحد عبر الضغط على علامة التبويب \"المحادثات\". </p><p> يمكنك أيضًا مشاهدة المحادثات الخاصة بصندوق وارد معين بالنقر على اسم صندوق الوارد على الجزء الجانبي من لوحة الإدارة. </p>",
"LIST": {
"404": "لا توجد صناديق وارد لقنوات تواصل مرتبطة بهذا الحساب."
},

View file

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

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Add Attribute",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Atributs personalitzats",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add attribute",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Crear",
"CANCEL_BUTTON_TEXT": "Cancel·la",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Descripció",
"PLACEHOLDER": "Enter attribute description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Model",
"PLACEHOLDER": "Please select a model",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required"
},
"KEY": {
"LABEL": "Key"
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Esborrar",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Suprimeix ",
"NO": "Cancel·la"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Actualitza",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -77,8 +80,8 @@
"DELETE": "Esborrar"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Companyia",
"LOCATION": "Ubicació",
"CONVERSATION_TITLE": "Detalls de les converses",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Navegador",
"OS": "Sistema operatiu",
"INITIATED_FROM": "Iniciada des de",
@ -154,6 +155,11 @@
"LABEL": "Inbox",
"ERROR": "Select an inbox"
},
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Missatge",
"PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contactes",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Add",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notes"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Add",
"PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note"
},
"FOOTER": {
"BUTTON": "View all notes"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "S'ha copiat al porta-retalls amb èxit",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Converses prèvies"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "To",
"BCC": "Bcc",

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Add Attribute",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Vlastní atributy",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add attribute",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Zrušit",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Description",
"PLACEHOLDER": "Enter attribute description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Model",
"PLACEHOLDER": "Please select a model",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required"
},
"KEY": {
"LABEL": "Key"
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Vymazat",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Vymazat ",
"NO": "Zrušit"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Aktualizovat",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -77,8 +80,8 @@
"DELETE": "Vymazat"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Společnost",
"LOCATION": "Poloha",
"CONVERSATION_TITLE": "Podrobnosti konverzace",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Prohlížeč",
"OS": "Operační systém",
"INITIATED_FROM": "Zahájeno od",
@ -154,6 +155,11 @@
"LABEL": "Inbox",
"ERROR": "Select an inbox"
},
"SUBJECT": {
"LABEL": "Předmět",
"PLACEHOLDER": "Předmět",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Zpráva",
"PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Zobrazit detaily"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakty",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Add",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notes"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Add",
"PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note"
},
"FOOTER": {
"BUTTON": "View all notes"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "Úspěšně zkopírováno do schránky",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Předchozí konverzace"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "Komu",
"BCC": "Bcc",

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Add Attribute",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Brugerdefinerede Egenskaber",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add attribute",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Opret",
"CANCEL_BUTTON_TEXT": "Annuller",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Beskrivelse",
"PLACEHOLDER": "Enter attribute description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Model",
"PLACEHOLDER": "Please select a model",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required"
},
"KEY": {
"LABEL": "Key"
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Slet",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Slet ",
"NO": "Annuller"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Opdater",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -77,8 +80,8 @@
"DELETE": "Slet"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Virksomhed",
"LOCATION": "Lokation",
"CONVERSATION_TITLE": "Samtaledetaljer",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Browser",
"OS": "Operativsystem",
"INITIATED_FROM": "Startet fra",
@ -154,6 +155,11 @@
"LABEL": "Inbox",
"ERROR": "Select an inbox"
},
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Besked",
"PLACEHOLDER": "Skriv din besked her",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakter",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Add",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notes"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Add",
"PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note"
},
"FOOTER": {
"BUTTON": "View all notes"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Tidligere Samtaler"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "To",
"BCC": "Bcc",

View file

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

View file

@ -1,68 +1,71 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Attribut hinzufügen",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Benutzerdefinierte Attribute",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Attribut hinzufügen",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Erstellen",
"CANCEL_BUTTON_TEXT": "Stornieren",
"FORM": {
"NAME": {
"LABEL": "Anzeigename",
"PLACEHOLDER": "Enter attribute display name",
"ERROR": "Name is required"
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name wird benötigt"
},
"DESC": {
"LABEL": "Beschreibung",
"PLACEHOLDER": "Enter attribute description",
"ERROR": "Description is required"
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Beschreibung wird benötigt"
},
"MODEL": {
"LABEL": "Modell",
"PLACEHOLDER": "Bitte wählen Sie einen Typ",
"ERROR": "Model is required"
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Modell wird benötigt"
},
"TYPE": {
"LABEL": "Typ",
"PLACEHOLDER": "Please select a type",
"ERROR": "Type is required"
"PLACEHOLDER": "Bitte wählen Sie einen Typ",
"ERROR": "Typ wird benötigt"
},
"KEY": {
"LABEL": "Schlüssel"
"LABEL": "Schlüssel",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Löschen",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Sind Sie sicher, dass Sie %{attributeName} löschen möchten",
"PLACE_HOLDER": "Bitte geben Sie {attributeName} zur Bestätigung ein",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Löschen ",
"NO": "Stornieren"
}
},
"EDIT": {
"TITLE": "Attribut hinzufügen",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Aktualisieren",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
"HEADER": "Benutzerdefinierte Attribute",
"CONVERSATION": "Conversation",
"CONVERSATION": "Unterhaltung",
"CONTACT": "Kontakt"
},
"LIST": {
@ -77,8 +80,8 @@
"DELETE": "Löschen"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

@ -54,7 +54,7 @@
"ERROR": "Uhrzeit auf Seite ist erforderlich"
},
"ENABLED": "Kampagne aktivieren",
"TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours",
"TRIGGER_ONLY_BUSINESS_HOURS": "Nur während Geschäftszeiten auslösen",
"SUBMIT": "Kampagne hinzufügen"
},
"API": {

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Firma",
"LOCATION": "Ort",
"CONVERSATION_TITLE": "Unterhaltungsdetails",
"VIEW_PROFILE": "Profil anzeigen",
"BROWSER": "Browser",
"OS": "Betriebssystem",
"INITIATED_FROM": "Initiiert von",
@ -32,8 +33,8 @@
"NO_RESULT": "Keine Labels gefunden"
}
},
"MERGE_CONTACT": "Merge contact",
"CONTACT_ACTIONS": "Contact actions",
"MERGE_CONTACT": "Kontakte zusammenführen",
"CONTACT_ACTIONS": "Kontakt-Aktionen",
"MUTE_CONTACT": "Unterhaltung stummschalten",
"UNMUTE_CONTACT": "Unterhaltung entmuten",
"MUTED_SUCCESS": "Diese Unterhaltung ist für 6 Stunden auf stumm schalten",
@ -57,22 +58,22 @@
"DESC": "Fügen Sie grundlegende Informationen über den Kontakt hinzu."
},
"IMPORT_CONTACTS": {
"BUTTON_LABEL": "Import",
"TITLE": "Import Contacts",
"DESC": "Import contacts through a CSV file.",
"DOWNLOAD_LABEL": "Download a sample csv.",
"BUTTON_LABEL": "Importieren",
"TITLE": "Kontakte importieren",
"DESC": "Kontakte über CSV-Datei importieren.",
"DOWNLOAD_LABEL": "Ein CSV-Beispiel herunterladen.",
"FORM": {
"LABEL": "CSV-Datei",
"SUBMIT": "Import",
"SUBMIT": "Importieren",
"CANCEL": "Stornieren"
},
"SUCCESS_MESSAGE": "Contacts saved successfully",
"SUCCESS_MESSAGE": "Kontakte erfolgreich gespeichert",
"ERROR_MESSAGE": "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut"
},
"DELETE_CONTACT": {
"BUTTON_LABEL": "Delete Contact",
"BUTTON_LABEL": "Kontakt löschen",
"TITLE": "Kontakt löschen",
"DESC": "Delete contact details",
"DESC": "Kontakt-Details bearbeiten",
"CONFIRM": {
"TITLE": "Löschung bestätigen",
"MESSAGE": "Bist du sicher, das du das löschen möchtest?",
@ -81,8 +82,8 @@
"NO": "Nein, behalten "
},
"API": {
"SUCCESS_MESSAGE": "Contact deleted successfully",
"ERROR_MESSAGE": "Could not delete contact. Please try again later."
"SUCCESS_MESSAGE": "Kontakt erfolgreich gelöscht",
"ERROR_MESSAGE": "Kontakt konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
}
},
"CONTACT_FORM": {
@ -154,6 +155,11 @@
"LABEL": "Posteingang",
"ERROR": "Posteingang auswählen"
},
"SUBJECT": {
"LABEL": "Betreff",
"PLACEHOLDER": "Betreff",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Nachricht",
"PLACEHOLDER": "Schreiben Sie Ihre Nachricht hier",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Details anzeigen"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Kontakte",
"LOADING": "Kontaktprofil wird geladen..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Hinzufügen",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Notizen werden geladen...",
"NOT_AVAILABLE": "Für diesen Kontakt wurden keine Notizen erstellt",
"HEADER": {
"TITLE": "Notizen"
},
"LIST": {
"LABEL": "Notiz hinzugefügt"
},
"ADD": {
"BUTTON": "Hinzufügen",
"PLACEHOLDER": "Notiz hinzufügen",
"TITLE": "Shift + Enter um eine Notiz zu erstellen"
},
"FOOTER": {
"BUTTON": "Alle Notizen anzeigen"
"CONTENT_HEADER": {
"DELETE": "Notiz löschen"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Eigenes Attribut hinzufügen",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"NOT_AVAILABLE": "Für diesen Kontakt sind keine benutzerdefinierten Attribute verfügbar.",
"COPY_SUCCESSFUL": "Der Code wurde erfolgreich in die Zwischenablage kopiert",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Attribut hinzufügen"
},
"ADD": {
"TITLE": "Eigenes Attribut erstellen",
"DESC": "Füge diesem Kontakt benutzerdefinierte Informationen hinzu."
@ -239,24 +261,46 @@
"VALUE": {
"LABEL": "Attributwert",
"PLACEHOLDER": "Bsp.: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribut erfolgreich hinzugefügt",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribut erfolgreich aktualisiert",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribut erfolgreich gelöscht",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {
"TITLE": "Kontakte zusammenführen",
"DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact s attributes will take precedence.",
"DESCRIPTION": "Kontakte zusammenführen, um zwei Profile zu einem zu kombinieren, einschließlich aller Attribute und Gespräche. Im Falle eines Konflikts haben die Attribute des Hauptkontakts Vorrang.",
"PRIMARY": {
"TITLE": "Hauptkontakt",
"HELP_LABEL": "To be kept"
"HELP_LABEL": "Zu erhalten"
},
"CHILD": {
"TITLE": "Kontakt zum Zusammenführen",
"PLACEHOLDER": "Search for a contact",
"HELP_LABEL": "To be deleted"
"PLACEHOLDER": "Nach Kontakt suchen",
"HELP_LABEL": "Zu löschen"
},
"SUMMARY": {
"TITLE": "Zusammenfassung",
"DELETE_WARNING": "Contact of <strong>%{childContactName}</strong> will be deleted.",
"DELETE_WARNING": "Der Kontakt von <strong>%{childContactName}</strong> wird gelöscht.",
"ATTRIBUTE_WARNING": "Details von Kontakt <strong>%{childContactName}</strong> wird zu <strong>%{primaryContactName}</strong> kopiert."
},
"SEARCH": {
@ -269,7 +313,7 @@
"ERROR": "Wählen Sie einen Kontakt zum Zusammenführen"
},
"SUCCESS_MESSAGE": "Kontakt erfolgreich zusammengeführt",
"ERROR_MESSAGE": "Could not merge contacts, try again!"
"ERROR_MESSAGE": "Kontakte konnten nicht zusammengeführt werden, bitte erneut versuchen!"
}
}
}

View file

@ -23,7 +23,7 @@
"24_HOURS_WINDOW": "24-Stunden-Nachrichtenfenster-Beschränkung",
"TWILIO_WHATSAPP_CAN_REPLY": "Du kannst auf diese Unterhaltung nur mit einer Vorlagen-Nachricht antworten aufgrund von",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24-Stunden-Nachrichtenfenster-Beschränkung",
"SELECT_A_TWEET_TO_REPLY": "Bitte wählen Sie einen Tweet aus, auf den Sie antworten möchten.",
"SELECT_A_TWEET_TO_REPLY": "Bitte wählen Sie einen Tweet aus, auf welchen Sie antworten möchten.",
"REPLYING_TO": "Du antwortest auf:",
"REMOVE_SELECTION": "Auswahl entfernen",
"DOWNLOAD": "Herunterladen",
@ -40,9 +40,9 @@
"OPEN": "Mehr",
"CLOSE": "Schließen",
"DETAILS": "Einzelheiten",
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply"
"SNOOZED_UNTIL_TOMORROW": "Schlummern bis morgen",
"SNOOZED_UNTIL_NEXT_WEEK": "Schlummern bis nächste Woche",
"SNOOZED_UNTIL_NEXT_REPLY": "Schlummern bis zur nächsten Antwort"
},
"RESOLVE_DROPDOWN": {
"MARK_PENDING": "Als ausstehend markieren",
@ -87,7 +87,7 @@
"CHANGE_AGENT": "Konversationsempfänger geändert",
"CHANGE_TEAM": "Teamzuordnung dieser Konversation geändert",
"FILE_SIZE_LIMIT": "Die Datei überschreitet das Limit von {MAXIMUM_FILE_UPLOAD_SIZE} für Anhänge",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"MESSAGE_ERROR": "Nachricht konnte nicht gesendet werden, bitte versuchen Sie es später erneut",
"SENT_BY": "Gesendet von:",
"ASSIGNMENT": {
"SELECT_AGENT": "Agent auswählen",
@ -148,14 +148,35 @@
"PLACEHOLDER": "Keine"
},
"ACCORDION": {
"CONTACT_DETAILS": "Contact Details",
"CONVERSATION_ACTIONS": "Conversation Actions",
"CONTACT_DETAILS": "Kontakt-Details",
"CONVERSATION_ACTIONS": "Aktionen für Unterhaltung",
"CONVERSATION_LABELS": "Konversationsetiketten",
"CONVERSATION_INFO": "Conversation Information",
"CONTACT_ATTRIBUTES": "Contact Attributes",
"CONVERSATION_INFO": "Informationen über Unterhaltung",
"CONTACT_ATTRIBUTES": "Kontakt-Attribute",
"PREVIOUS_CONVERSATION": "Vorherige Gespräche"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribut erfolgreich aktualisiert",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Hinzufügen",
"SUCCESS": "Attribut erfolgreich hinzugefügt",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribut erfolgreich gelöscht",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "An",
"BCC": "Bcc",

View file

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

View file

@ -58,7 +58,7 @@
},
"CHANNEL_WEBHOOK_URL": {
"LABEL": "Webhook-URL",
"PLACEHOLDER": "Enter your Webhook URL",
"PLACEHOLDER": "Geben Sie Ihre Webhook-URL ein",
"ERROR": "Bitte geben Sie eine gültige URL ein"
},
"CHANNEL_DOMAIN": {
@ -97,8 +97,8 @@
"SUBMIT_BUTTON": "Posteingang erstellen"
},
"TWILIO": {
"TITLE": "Twilio SMS/WhatsApp Channel",
"DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.",
"TITLE": "Twilio SMS/WhatsApp-Kanal",
"DESC": "Integrieren Sie Twilio und unterstützen Sie Ihre Kunden via SMS oder WhatsApp.",
"ACCOUNT_SID": {
"LABEL": "Account SID",
"PLACEHOLDER": "Bitte geben Sie Ihre Twilio Account SID ein",
@ -115,7 +115,7 @@
},
"CHANNEL_NAME": {
"LABEL": "Posteingang-Name",
"PLACEHOLDER": "Please enter a inbox name",
"PLACEHOLDER": "Bitte geben Sie einen Namen für den Posteingang ein",
"ERROR": "Dieses Feld wird benötigt"
},
"PHONE_NUMBER": {
@ -137,16 +137,16 @@
"DESC": "Unterstützen Sie Ihre Kunden per SMS mit Twilio-Integration."
},
"WHATSAPP": {
"TITLE": "WhatsApp Channel",
"DESC": "Start supporting your customers via WhatsApp.",
"TITLE": "WhatsApp-Kanal",
"DESC": "Unterstützen Sie Ihre Kunden via WhatsApp.",
"PROVIDERS": {
"LABEL": "API Provider",
"LABEL": "API-Provider",
"TWILIO": "Twilio",
"360_DIALOG": "360Dialog"
},
"INBOX_NAME": {
"LABEL": "Posteingang-Name",
"PLACEHOLDER": "Please enter an inbox name",
"PLACEHOLDER": "Bitte geben Sie einen Namen für den Posteingang ein",
"ERROR": "Dieses Feld wird benötigt"
},
"PHONE_NUMBER": {
@ -155,15 +155,15 @@
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
},
"API_KEY": {
"LABEL": "API key",
"SUBTITLE": "Configure the WhatsApp API key.",
"PLACEHOLDER": "API key",
"APPLY_FOR_ACCESS": "Don't have any API key? Apply for access here",
"ERROR": "Please enter a valid value."
"LABEL": "API-Schlüssel",
"SUBTITLE": "Konfigurieren Sie den WhatsApp API-Schlüssel.",
"PLACEHOLDER": "API-Schlüssel",
"APPLY_FOR_ACCESS": "Sie haben keinen API-Schlüssel? Für den Zugriff hier beantragen",
"ERROR": "Bitte geben Sie einen gültigen Wert ein."
},
"SUBMIT_BUTTON": "Create WhatsApp Channel",
"SUBMIT_BUTTON": "WhatsApp-Kanal erstellen",
"API": {
"ERROR_MESSAGE": "We were not able to save the WhatsApp channel"
"ERROR_MESSAGE": "Wir konnten den WhatsApp-Kanal nicht speichern"
}
},
"API_CHANNEL": {
@ -204,50 +204,50 @@
"FINISH_MESSAGE": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
},
"LINE_CHANNEL": {
"TITLE": "LINE Channel",
"DESC": "Integrate with LINE channel and start supporting your customers.",
"TITLE": "LINE-Kanal",
"DESC": "Integrieren Sie den LINE-Kanal und unterstützen Sie Ihre Kunden.",
"CHANNEL_NAME": {
"LABEL": "Kanal Name",
"PLACEHOLDER": "Bitte geben Sie einen Kanalnamen ein",
"ERROR": "Dieses Feld wird benötigt"
},
"LINE_CHANNEL_ID": {
"LABEL": "LINE Channel ID",
"PLACEHOLDER": "LINE Channel ID"
"LABEL": "LINE-Kanal-ID",
"PLACEHOLDER": "LINE-Kanal-ID"
},
"LINE_CHANNEL_SECRET": {
"LABEL": "LINE Channel Secret",
"PLACEHOLDER": "LINE Channel Secret"
"LABEL": "LINE-Kanal-Geheimnis",
"PLACEHOLDER": "LINE-Kanal-Geheimnis"
},
"LINE_CHANNEL_TOKEN": {
"LABEL": "LINE Channel Token",
"PLACEHOLDER": "LINE Channel Token"
"LABEL": "LINE-Kanal-Token",
"PLACEHOLDER": "LINE-Kanal-Token"
},
"SUBMIT_BUTTON": "Create LINE Channel",
"SUBMIT_BUTTON": "LINE-Kanal erstellen",
"API": {
"ERROR_MESSAGE": "We were not able to save the LINE channel"
"ERROR_MESSAGE": "Wir konnten den LINE-Kanal nicht speichern"
},
"API_CALLBACK": {
"TITLE": "Callback URL",
"SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here."
"SUBTITLE": "Sie müssen die Webhook-URL in der LINE-Anwendung mit der hier genannten URL konfigurieren."
}
},
"TELEGRAM_CHANNEL": {
"TITLE": "Telegram Channel",
"DESC": "Integrate with Telegram channel and start supporting your customers.",
"TITLE": "Telegram-Kanal",
"DESC": "Integrieren Sie den Telegram-Kanal und unterstützen Sie Ihre Kunden.",
"BOT_TOKEN": {
"LABEL": "Bot Token",
"SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.",
"PLACEHOLDER": "Bot Token"
"LABEL": "Bot-Token",
"SUBTITLE": "Konfigurieren Sie den Bot-Token, welchen Sie von Telegram BotFather erhalten haben.",
"PLACEHOLDER": "Bot-Token"
},
"SUBMIT_BUTTON": "Create Telegram Channel",
"SUBMIT_BUTTON": "Telegram-Kanal erstellen",
"API": {
"ERROR_MESSAGE": "We were not able to save the telegram channel"
"ERROR_MESSAGE": "Wir konnten den Telegram-Kanal nicht speichern"
}
},
"AUTH": {
"TITLE": "Wähle einen Kanal",
"DESC": "Chatwoot supports live-chat widget, Facebook page, Twitter profile, WhatsApp, Email etc., as channels. If you want to build a custom channel, you can create it using the API channel. Select one channel from the options below to proceed."
"DESC": "Chatwoot unterstützt Live-Chat-Widget, Facebook-Seite, Twitter-Profil, WhatsApp, E-Mail etc. als Kanäle. Wenn Sie einen eigenen Kanal erstellen möchten, können Sie einen API-Kanal verwenden. Wählen Sie einen Kanal aus den folgenden Optionen aus, um fortzufahren."
},
"AGENTS": {
"TITLE": "Agenten",
@ -292,23 +292,23 @@
},
"AUTO_ASSIGNMENT": {
"ENABLED": "Aktiviert",
"DISABLED": "Behindert"
"DISABLED": "Deaktiviert"
},
"EMAIL_COLLECT_BOX": {
"ENABLED": "Aktiviert",
"DISABLED": "Behindert"
"DISABLED": "Deaktiviert"
},
"ENABLE_CSAT": {
"ENABLED": "Aktiviert",
"DISABLED": "Behindert"
"DISABLED": "Deaktiviert"
},
"ENABLE_HMAC": {
"LABEL": "Enable"
"LABEL": "Aktivieren"
}
},
"DELETE": {
"BUTTON_TEXT": "Löschen",
"AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar",
"AVATAR_DELETE_BUTTON_TEXT": "Avatar löschen",
"CONFIRM": {
"TITLE": "Löschung bestätigen",
"MESSAGE": "Bist du sicher, das du das löschen möchtest ",
@ -319,8 +319,8 @@
"API": {
"SUCCESS_MESSAGE": "Posteingang erfolgreich gelöscht",
"ERROR_MESSAGE": "Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.",
"AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully",
"AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later."
"AVATAR_SUCCESS_MESSAGE": "Avatar von Posteingang erfolgreich gelöscht",
"AVATAR_ERROR_MESSAGE": "Der Avatar vom Posteingang konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut."
}
},
"TABS": {
@ -353,11 +353,11 @@
"AUTO_ASSIGNMENT_SUB_TEXT": "Aktivieren oder deaktivieren Sie die automatische Zuweisung verfügbarer Agenten für neue Konversationen",
"HMAC_VERIFICATION": "Benutzeridentitätsüberprüfung",
"HMAC_DESCRIPTION": "Um die Benutzer-Identität zu validieren, kann via SDK einen `identity_hash` für jeden Benutzer übergeben werden. Ein Hash kann mithilfe des SH256-Verfahrens mithilfe des nachfolgenden Schlüssels generiert werden.",
"HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation",
"HMAC_MANDATORY_DESCRIPTION": "If enabled, Chatwoot SDKs setUser method will not work unless the `identifier_hash` is provided for each user.",
"INBOX_IDENTIFIER": "Inbox Identifier",
"INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.",
"FORWARD_EMAIL_TITLE": "Forward to Email",
"HMAC_MANDATORY_VERIFICATION": "Erzwinge Benutzer-Identitätsüberprüfung",
"HMAC_MANDATORY_DESCRIPTION": "Wenn aktiviert, funktioniert die setUser Methode der Chatwoot SDK nur, wenn ein `identifier_hash` für jeden Benutzer mitgeliefert wird.",
"INBOX_IDENTIFIER": "Identifizierung für Posteingang",
"INBOX_IDENTIFIER_SUB_TEXT": "Verwenden Sie den hier angezeigten `inbox_identifier`-Token zur Authentifizierung Ihrer API-Clients.",
"FORWARD_EMAIL_TITLE": "Weiterleitung an E-Mail",
"FORWARD_EMAIL_SUB_TEXT": "Starten Sie die Weiterleitung Ihrer E-Mails an die folgende E-Mail-Adresse."
},
"FACEBOOK_REAUTHORIZE": {
@ -390,7 +390,7 @@
"TIMEZONE_LABEL": "Zeitzone auswählen",
"UPDATE": "Einstellungen für Geschäftszeiten aktualisieren",
"TOGGLE_AVAILABILITY": "Geschäftszeiten für diesen Posteingang aktivieren",
"UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors",
"UNAVAILABLE_MESSAGE_LABEL": "Nachricht für Besucher außerhalb Geschäftszeiten",
"UNAVAILABLE_MESSAGE_DEFAULT": "Wir sind momentan nicht erreichbar. Hinterlassen Sie eine Nachricht und wir antworten Ihnen sobald wir wieder zurück sind.",
"TOGGLE_HELP": "Die Aktivierung der Geschäftsverfügbarkeit zeigt die verfügbaren Stunden auf dem Live-Chat-Widget an, auch wenn alle Agenten offline sind. Außerhalb der verfügbaren Stunden können Besucher mit einer Nachricht und einem Vor-Chat-Formular gewarnt werden.",
"DAY": {

View file

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

View file

@ -62,7 +62,7 @@
}
},
"AGENT_REPORTS": {
"HEADER": "Agents Overview",
"HEADER": "Agenten-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...",
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
"DOWNLOAD_AGENT_REPORTS": "Agenten-Berichte herunterladen",
@ -125,11 +125,11 @@
}
},
"LABEL_REPORTS": {
"HEADER": "Labels Overview",
"HEADER": "Label-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...",
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
"DOWNLOAD_LABEL_REPORTS": "Download label reports",
"FILTER_DROPDOWN_LABEL": "Select Label",
"DOWNLOAD_LABEL_REPORTS": "Label-Berichte herunterladen",
"FILTER_DROPDOWN_LABEL": "Label auswählen",
"METRICS": {
"CONVERSATIONS": {
"NAME": "Gespräche",
@ -188,10 +188,10 @@
}
},
"INBOX_REPORTS": {
"HEADER": "Inbox Overview",
"HEADER": "Posteingangsübersicht",
"LOADING_CHART": "Diagrammdaten laden ...",
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
"DOWNLOAD_INBOX_REPORTS": "Download inbox reports",
"DOWNLOAD_INBOX_REPORTS": "Agenten-Berichte herunterladen",
"FILTER_DROPDOWN_LABEL": "Eingang auswählen",
"METRICS": {
"CONVERSATIONS": {
@ -251,11 +251,11 @@
}
},
"TEAM_REPORTS": {
"HEADER": "Team Overview",
"HEADER": "Team-Übersicht",
"LOADING_CHART": "Diagrammdaten laden ...",
"NO_ENOUGH_DATA": "Wir haben nicht genügend Datenpunkte erhalten, um einen Bericht zu erstellen. Bitte versuchen Sie es später erneut.",
"DOWNLOAD_TEAM_REPORTS": "Download team reports",
"FILTER_DROPDOWN_LABEL": "Select Team",
"DOWNLOAD_TEAM_REPORTS": "Team-Berichte herunterladen",
"FILTER_DROPDOWN_LABEL": "Team auswählen",
"METRICS": {
"CONVERSATIONS": {
"NAME": "Gespräche",

View file

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

View file

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

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Εταιρία",
"LOCATION": "Θέση",
"CONVERSATION_TITLE": "Λεπτομέρειες συνομιλίας",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Φυλλομετρητής",
"OS": "Λειτουργικό",
"INITIATED_FROM": "Αρχικοποίηση από",
@ -154,6 +155,11 @@
"LABEL": "Εισερχόμενα",
"ERROR": "Επιλέξτε ένα κιβώτιο εισερχόμενων"
},
"SUBJECT": {
"LABEL": "Θέμα",
"PLACEHOLDER": "Θέμα",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Μήνυμα",
"PLACEHOLDER": "Γράψτε το μήνυμά σας εδώ",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Προβολή λεπτομεριών"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Επαφές",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Προσθήκη",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Σημειώσεις"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Προσθήκη",
"PLACEHOLDER": "Προσθήκη σημείωσης",
"TITLE": "Shift + Enter για δημιουργία σημείωσης"
},
"FOOTER": {
"BUTTON": "Εμφάνιση όλων των σημειώσεων"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Προσθήκη προσαρμοσμένης ιδιότητας",
"NOT_AVAILABLE": "Δεν υπάρχουν διαθέσιμες προσαρμοσμένες ιδιότητες για αυτήν την επαφή.",
"COPY_SUCCESSFUL": "Αντιγράφτηκε με επιτυχία στο πρόχειρο",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Επεξεργασία ιδιότητας"
},
"ADD": {
"TITLE": "Δημιουργία προσαρμοσμένης ιδιότητας",
"DESC": "Προσθέστε προσαρμοσμένες πληροφορίες σε αυτήν την επαφή."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "Τιμή ιδιότητας",
"PLACEHOLDER": "π.χ.: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Ο πράκτορας ενημερώθηκε επιτυχώς",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Προηγούμενες συνομιλίες"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Ο πράκτορας ενημερώθηκε επιτυχώς",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Προσθήκη",
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Η ιδιότητα προστέθηκε με επιτυχία",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "Προς",
"BCC": "Bcc",

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Add Attribute",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Custom Attributes",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add attribute",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Description",
"PLACEHOLDER": "Enter attribute description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Model",
"PLACEHOLDER": "Please select a model",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required"
},
"KEY": {
"LABEL": "Key"
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Delete ",
"NO": "Cancel"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Update",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -72,8 +75,8 @@
"DELETE": "Delete"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Company",
"LOCATION": "Location",
"CONVERSATION_TITLE": "Conversation Details",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Browser",
"OS": "Operating System",
"INITIATED_FROM": "Initiated from",
@ -154,6 +155,11 @@
"LABEL": "Inbox",
"ERROR": "Select an inbox"
},
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Message",
"PLACEHOLDER": "Write your message here",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "View details"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contacts",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Add",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notes"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Add",
"PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note"
},
"FOOTER": {
"BUTTON": "View all notes"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
@ -239,7 +261,29 @@
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Previous Conversations"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "To",
"BCC": "Bcc",

View file

@ -79,5 +79,50 @@
"BUTTON": {
"REFRESH": "Refresh"
}
},
"COMMAND_BAR": {
"SEARCH_PLACEHOLDER": "Search or jump to",
"SECTIONS": {
"GENERAL": "General",
"REPORTS": "Reports",
"CONVERSATION": "Conversation",
"CHANGE_ASSIGNEE": "Change Assignee",
"CHANGE_TEAM": "Change Team",
"ADD_LABEL": "Add label to the conversation",
"REMOVE_LABEL": "Remove label from the conversation",
"SETTINGS": "Settings"
},
"COMMANDS": {
"GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
"GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
"GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview",
"GO_TO_AGENT_REPORTS": "Go to Agent Reports",
"GO_TO_LABEL_REPORTS": "Go to Label Reports",
"GO_TO_INBOX_REPORTS": "Go to Inbox Reports",
"GO_TO_TEAM_REPORTS": "Go to Team Reports",
"GO_TO_SETTINGS_AGENTS": "Go to Agent Settings",
"GO_TO_SETTINGS_TEAMS": "Go to Team Settings",
"GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings",
"GO_TO_SETTINGS_LABELS": "Go to Label Settings",
"GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings",
"GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings",
"GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings",
"GO_TO_SETTINGS_PROFILE": "Go to Profile Settings",
"GO_TO_NOTIFICATIONS": "Go to Notifications",
"ADD_LABELS_TO_CONVERSATION": "Add label to the conversation",
"ASSIGN_AN_AGENT": "Assign an agent",
"ASSIGN_A_TEAM": "Assign a team",
"MUTE_CONVERSATION": "Mute conversation",
"UNMUTE_CONVERSATION": "Unmute conversation",
"REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation",
"REOPEN_CONVERSATION": "Reopen conversation",
"RESOLVE_CONVERSATION": "Resolve conversation",
"SEND_TRANSCRIPT": "Send an email transcript",
"SNOOZE_CONVERSATION": "Snooze Conversation",
"UNTIL_NEXT_REPLY": "Until next reply",
"UNTIL_NEXT_WEEK": "Until next week",
"UNTIL_TOMORROW": "Until tomorrow"
}
}
}

View file

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

View file

@ -1,27 +1,27 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Attributes",
"HEADER_BTN_TXT": "Add Attribute",
"LOADING": "Fetching attributes",
"SIDEBAR_TXT": "<p><b>Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Attributes, just click on the <b>Add Attribute.</b> You can also edit or delete an existing Attribute by clicking on the Edit or Delete button.</p>",
"HEADER": "Atributos personalizados",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add attribute",
"TITLE": "Add Custom Attribute",
"SUBMIT": "Crear",
"CANCEL_BUTTON_TEXT": "Cancelar",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter attribute display name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Descripción",
"PLACEHOLDER": "Enter attribute description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Model",
"PLACEHOLDER": "Please select a model",
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
@ -30,34 +30,37 @@
"ERROR": "Type is required"
},
"KEY": {
"LABEL": "Key"
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create an attribute, Please try again later"
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Eliminar",
"API": {
"SUCCESS_MESSAGE": "Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the attribute. Try again."
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "¿Está seguro que quiere borrar - %{attributeName}?",
"PLACE_HOLDER": "Por favor, escriba {attributeName} para confirmar",
"MESSAGE": "Deleting will remove the attribute",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Eliminar ",
"NO": "Cancelar"
}
},
"EDIT": {
"TITLE": "Edit attribute",
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Actualizar",
"API": {
"SUCCESS_MESSAGE": "Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating attribute, please try again"
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
@ -77,8 +80,8 @@
"DELETE": "Eliminar"
},
"EMPTY_RESULT": {
"404": "There are no attributes created",
"NOT_FOUND": "There are no attributes configured"
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}

View file

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

View file

@ -7,6 +7,7 @@
"COMPANY": "Empresa",
"LOCATION": "Ubicación",
"CONVERSATION_TITLE": "Detalles de la conversación",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Navegador",
"OS": "Sistema operativo",
"INITIATED_FROM": "Iniciado desde",
@ -154,6 +155,11 @@
"LABEL": "Bandeja de entrada",
"ERROR": "Seleccione una bandeja de entrada"
},
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Mensaje",
"PLACEHOLDER": "Escriba su mensaje aquí",
@ -188,6 +194,10 @@
"VIEW_DETAILS": "Ver detalles"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contactos",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Añadir",
@ -199,16 +209,21 @@
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notas"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Añadir",
"PLACEHOLDER": "Añadir nota",
"TITLE": "Shift + Enter para crear una nota"
},
"FOOTER": {
"BUTTON": "Ver todas las notas"
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
@ -222,8 +237,15 @@
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "Copiado al portapapeles satisfactoriamente",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
@ -233,13 +255,35 @@
"CANCEL": "Cancelar",
"NAME": {
"LABEL": "Custom attribute name",
"PLACEHOLDER": "Eg: shopify id",
"PLACEHOLDER": "Ej: shopify id",
"ERROR": "Invalid custom attribute name"
},
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {

View file

@ -156,6 +156,27 @@
"PREVIOUS_CONVERSATION": "Conversaciones anteriores"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Añadir",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"TO": "Para",
"BCC": "Bcc",

View file

@ -346,7 +346,7 @@
"ENABLE_EMAIL_COLLECT_BOX": "Activar caja de recolección de correo electrónico",
"ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Activar o desactivar la caja de recolección de correo electrónico",
"AUTO_ASSIGNMENT": "Activar asignación automática",
"ENABLE_CSAT": "Enable CSAT",
"ENABLE_CSAT": "Habilitar Encuesta de Satisfacción",
"ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation",
"INBOX_UPDATE_TITLE": "Ajustes de la Bandeja de Entrada",
"INBOX_UPDATE_SUB_TEXT": "Actualizar la configuración de tu bandeja de entrada",

View file

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

View file

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

View file

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

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