Compare commits

..

5 commits

Author SHA1 Message Date
Sojan Jose
d51d7cdc23
Merge branch 'develop' into chore/5938-fix-heroku-ssl 2022-12-06 17:47:28 +03:00
Sojan
3817d297d5 chore: test 2022-11-25 18:32:47 +03:00
Sojan
27295fc47c chore: debug heroku config 2022-11-25 18:17:00 +03:00
Sojan Jose
e4b363e07f
Merge branch 'develop' into chore/5938-fix-heroku-ssl 2022-11-25 17:03:38 +03:00
Sojan
ddd79affec chore: debug heorku redis issue 2022-11-25 16:35:59 +03:00
439 changed files with 1503 additions and 4937 deletions

View file

@ -4,7 +4,7 @@ ruby '3.0.4'
##-- base gems for rails --##
gem 'rack-cors', require: 'rack/cors'
gem 'rails', '~> 6.1', '>= 6.1.6.1'
gem 'rails', '~>6.1'
# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', require: false
@ -56,7 +56,7 @@ gem 'activerecord-import'
gem 'dotenv-rails'
gem 'foreman'
gem 'puma'
gem 'webpacker', '~> 5.4', '>= 5.4.3'
gem 'webpacker', '~> 5.x'
# metrics on heroku
gem 'barnes'
@ -94,7 +94,7 @@ gem 'ddtrace'
gem 'elastic-apm'
gem 'newrelic_rpm'
gem 'scout_apm'
gem 'sentry-rails', '~> 5.3', '>= 5.3.1'
gem 'sentry-rails', '~> 5.3'
gem 'sentry-ruby', '~> 5.3'
gem 'sentry-sidekiq', '~> 5.3'
@ -175,7 +175,7 @@ group :development, :test do
gem 'mock_redis'
gem 'pry-rails'
gem 'rspec_junit_formatter'
gem 'rspec-rails', '~> 5.0.3'
gem 'rspec-rails', '~> 5.0.0'
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false

View file

@ -398,7 +398,7 @@ GEM
llhttp-ffi (0.4.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
loofah (2.19.1)
loofah (2.18.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@ -427,14 +427,14 @@ GEM
netrc (0.11.0)
newrelic_rpm (8.9.0)
nio4r (2.5.8)
nokogiri (1.13.10)
nokogiri (1.13.9)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
nokogiri (1.13.10-arm64-darwin)
nokogiri (1.13.9-arm64-darwin)
racc (~> 1.4)
nokogiri (1.13.10-x86_64-darwin)
nokogiri (1.13.9-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.13.10-x86_64-linux)
nokogiri (1.13.9-x86_64-linux)
racc (~> 1.4)
oauth (0.5.10)
orm_adapter (0.5.0)
@ -459,7 +459,7 @@ GEM
pundit (2.2.0)
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.6.1)
racc (1.6.0)
rack (2.2.4)
rack-attack (6.6.1)
rack (>= 1.0, < 3)
@ -488,8 +488,8 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.4.4)
loofah (~> 2.19, >= 2.19.1)
rails-html-sanitizer (1.4.3)
loofah (~> 2.3)
railties (6.1.6.1)
actionpack (= 6.1.6.1)
activesupport (= 6.1.6.1)
@ -765,12 +765,12 @@ DEPENDENCIES
rack-attack
rack-cors
rack-timeout
rails (~> 6.1, >= 6.1.6.1)
rails (~> 6.1)
redis
redis-namespace
responders
rest-client
rspec-rails (~> 5.0.3)
rspec-rails (~> 5.0.0)
rspec_junit_formatter
rubocop
rubocop-performance
@ -778,7 +778,7 @@ DEPENDENCIES
rubocop-rspec
scout_apm
seed_dump
sentry-rails (~> 5.3, >= 5.3.1)
sentry-rails (~> 5.3)
sentry-ruby (~> 5.3)
sentry-sidekiq (~> 5.3)
shoulda-matchers
@ -799,7 +799,7 @@ DEPENDENCIES
valid_email2
web-console
webmock
webpacker (~> 5.4, >= 5.4.3)
webpacker (~> 5.x)
webpush
wisper (= 2.0.0)
working_hours

View file

@ -46,7 +46,6 @@ class Messages::Messenger::MessageBuilder
end
def update_attachment_file_type(attachment)
return if @message.reload.attachments.blank?
return unless attachment.file_type == 'share' || attachment.file_type == 'story_mention'
attachment.file_type = file_type(attachment.file&.content_type)
@ -63,7 +62,6 @@ class Messages::Messenger::MessageBuilder
story_sender = result['from']['username']
message.content_attributes[:story_sender] = story_sender
message.content_attributes[:story_id] = story_id
message.content_attributes[:image_type] = 'story_mention'
message.content = I18n.t('conversations.messages.instagram_story_content', story_sender: story_sender)
message.save!
end
@ -76,7 +74,6 @@ class Messages::Messenger::MessageBuilder
raise
rescue Koala::Facebook::ClientError => e
# The exception occurs when we are trying fetch the deleted story or blocked story.
@message.attachments.destroy_all
@message.update(content: I18n.t('conversations.messages.instagram_deleted_story_content'))
Rails.logger.error e
{}

View file

@ -18,10 +18,6 @@ class Api::V1::ProfilesController < Api::BaseController
head :ok
end
def auto_offline
@user.account_users.find_by!(account_id: auto_offline_params[:account_id]).update!(auto_offline: auto_offline_params[:auto_offline] || false)
end
def availability
@user.account_users.find_by!(account_id: availability_params[:account_id]).update!(availability: availability_params[:availability])
end
@ -41,10 +37,6 @@ class Api::V1::ProfilesController < Api::BaseController
params.require(:profile).permit(:account_id, :availability)
end
def auto_offline_params
params.require(:profile).permit(:account_id, :auto_offline)
end
def profile_params
params.require(:profile).permit(
:email,

View file

@ -24,6 +24,7 @@ class DashboardController < ActionController::Base
'API_CHANNEL_NAME',
'API_CHANNEL_THUMBNAIL',
'ANALYTICS_TOKEN',
'ANALYTICS_HOST',
'DIRECT_UPLOADS_ENABLED',
'HCAPTCHA_SITE_KEY',
'LOGOUT_REDIRECT_LINK',

View file

@ -1,7 +1,8 @@
class Platform::Api::V1::AccountsController < PlatformController
def create
@resource = Account.create!(account_params)
@resource = Account.new(account_params)
update_resource_features
@resource.save!
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
end

View file

@ -144,12 +144,6 @@ export default {
});
},
updateAutoOffline(accountId, autoOffline = false) {
return axios.post(endPoints('autoOffline').url, {
profile: { account_id: accountId, auto_offline: autoOffline },
});
},
deleteAvatar() {
return axios.delete(endPoints('deleteAvatar').url);
},

View file

@ -16,9 +16,6 @@ const endPoints = {
availabilityUpdate: {
url: '/api/v1/profile/availability',
},
autoOffline: {
url: '/api/v1/profile/auto_offline',
},
logout: {
url: 'auth/sign_out',
},

View file

@ -1,6 +0,0 @@
/* global axios */
import wootConstants from 'dashboard/constants';
export const getTestimonialContent = () => {
return axios.get(wootConstants.TESTIMONIAL_URL);
};

View file

@ -74,8 +74,8 @@ Tahoma,
Arial,
sans-serif;
$body-antialiased: true;
$global-margin: $space-small;
$global-padding: $space-micro;
$global-margin: $space-one;
$global-padding: $space-one;
$global-weight-normal: normal;
$global-weight-bold: bold;
$global-radius: 0;

View file

@ -20,24 +20,6 @@
@include foundation-everything($flex: true);
@include foundation-prototype-text-utilities;
@include foundation-prototype-text-transformation;
@include foundation-prototype-text-decoration;
@include foundation-prototype-font-styling;
@include foundation-prototype-list-style-type;
@include foundation-prototype-rounded;
@include foundation-prototype-bordered;
@include foundation-prototype-shadow;
@include foundation-prototype-separator;
@include foundation-prototype-overflow;
@include foundation-prototype-display;
@include foundation-prototype-position;
@include foundation-prototype-border-box;
@include foundation-prototype-border-none;
@include foundation-prototype-sizing;
@include foundation-prototype-spacing;
@import 'typography';
@import 'layout';
@import 'animations';

View file

@ -155,20 +155,12 @@ $default-button-height: 4.0rem;
// Sizes
&.tiny {
height: var(--space-medium);
.icon+.button__content {
padding-left: var(--space-micro);
}
}
&.small {
height: var(--space-large);
padding-bottom: var(--space-smaller);
padding-top: var(--space-smaller);
.icon+.button__content {
padding-left: var(--space-smaller);
}
}
&.large {
@ -198,10 +190,6 @@ $default-button-height: 4.0rem;
height: auto;
margin: 0;
padding: 0;
&:hover {
text-decoration: underline;
}
}
}

View file

@ -59,8 +59,12 @@
.hamburger--menu {
cursor: pointer;
display: block;
display: none;
margin-right: $space-normal;
@media screen and (max-width: 1200px) {
display: block;
}
}
.header--icon {

View file

@ -345,9 +345,6 @@ export default {
};
},
pageTitle() {
if (this.hasAppliedFilters) {
return this.$t('CHAT_LIST.TAB_HEADING');
}
if (this.inbox.name) {
return this.inbox.name;
}
@ -442,6 +439,9 @@ export default {
},
methods: {
onApplyFilter(payload) {
if (this.$route.name !== 'home') {
this.$router.push({ name: 'home' });
}
this.resetBulkActions();
this.foldersQuery = filterQueryGenerator(payload);
this.$store.dispatch('conversationPage/reset');

View file

@ -1,12 +1,7 @@
<template>
<woot-button
size="small"
variant="clear"
color-scheme="secondary"
icon="list"
class="toggle-sidebar"
@click="onMenuItemClick"
/>
<button @click="onMenuItemClick">
<fluent-icon class="hamburger--menu" icon="list" />
</button>
</template>
<script>
@ -21,8 +16,13 @@ export default {
};
</script>
<style scoped lang="scss">
.toggle-sidebar {
margin-right: var(--space-small);
margin-left: var(--space-minus-small);
.hamburger--menu {
cursor: pointer;
display: none;
margin-right: var(--space-normal);
@media screen and (max-width: 1200px) {
display: block;
}
}
</style>

View file

@ -18,35 +18,12 @@
</woot-button>
</woot-dropdown-item>
<woot-dropdown-divider />
<woot-dropdown-item class="auto-offline--toggle">
<div class="info-wrap">
<fluent-icon
v-tooltip.right-start="$t('SIDEBAR.SET_AUTO_OFFLINE.INFO_TEXT')"
icon="info"
size="14"
class="info-icon"
/>
<span class="auto-offline--text">
{{ $t('SIDEBAR.SET_AUTO_OFFLINE.TEXT') }}
</span>
</div>
<woot-switch
size="small"
class="auto-offline--switch"
:value="currentUserAutoOffline"
@input="updateAutoOffline"
/>
</woot-dropdown-item>
<woot-dropdown-divider />
</woot-dropdown-menu>
</template>
<script>
import { mapGetters } from 'vuex';
import { mixin as clickaway } from 'vue-clickaway';
import alertMixin from 'shared/mixins/alertMixin';
import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem';
import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu';
import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader';
@ -64,7 +41,7 @@ export default {
AvailabilityStatusBadge,
},
mixins: [clickaway, alertMixin],
mixins: [clickaway],
data() {
return {
@ -77,7 +54,6 @@ export default {
...mapGetters({
getCurrentUserAvailability: 'getCurrentUserAvailability',
currentAccountId: 'getCurrentAccountId',
currentUserAutoOffline: 'getCurrentUserAutoOffline',
}),
availabilityDisplayLabel() {
const availabilityIndex = AVAILABILITY_STATUS_KEYS.findIndex(
@ -109,30 +85,21 @@ export default {
closeStatusMenu() {
this.isStatusMenuOpened = false;
},
updateAutoOffline(autoOffline) {
this.$store.dispatch('updateAutoOffline', {
accountId: this.currentAccountId,
autoOffline,
});
},
changeAvailabilityStatus(availability) {
const accountId = this.currentAccountId;
if (this.isUpdating) {
return;
}
this.isUpdating = true;
try {
this.$store.dispatch('updateAvailability', {
availability,
account_id: this.currentAccountId,
this.$store
.dispatch('updateAvailability', {
availability: availability,
account_id: accountId,
})
.finally(() => {
this.isUpdating = false;
});
} catch (error) {
this.showAlert(
this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.SET_AVAILABILITY_ERROR')
);
} finally {
this.isUpdating = false;
}
},
},
};
@ -176,32 +143,4 @@ export default {
align-items: baseline;
}
}
.auto-offline--toggle {
align-items: center;
display: flex;
justify-content: space-between;
padding: var(--space-smaller) 0 var(--space-smaller) var(--space-small);
margin: 0;
.info-wrap {
display: flex;
align-items: center;
}
.info-icon {
margin-top: -1px;
}
.auto-offline--switch {
margin: -1px var(--space-micro) 0;
}
.auto-offline--text {
margin: 0 var(--space-smaller);
font-size: var(--font-size-mini);
font-weight: var(--font-weight-medium);
color: var(--s-700);
}
}
</style>

View file

@ -1,4 +1,3 @@
import { FEATURE_FLAGS } from '../../../../featureFlags';
import { frontendURL } from '../../../../helper/URLHelper';
const primaryMenuItems = accountId => [
@ -14,7 +13,6 @@ const primaryMenuItems = accountId => [
icon: 'book-contacts',
key: 'contacts',
label: 'CONTACTS',
featureFlag: FEATURE_FLAGS.CRM,
toState: frontendURL(`accounts/${accountId}/contacts`),
toStateName: 'contacts_dashboard',
roles: ['administrator', 'agent'],
@ -23,7 +21,6 @@ const primaryMenuItems = accountId => [
icon: 'arrow-trending-lines',
key: 'reports',
label: 'REPORTS',
featureFlag: FEATURE_FLAGS.REPORTS,
toState: frontendURL(`accounts/${accountId}/reports`),
toStateName: 'settings_account_reports',
roles: ['administrator'],
@ -32,7 +29,6 @@ const primaryMenuItems = accountId => [
icon: 'megaphone',
key: 'campaigns',
label: 'CAMPAIGNS',
featureFlag: FEATURE_FLAGS.CAMPAIGNS,
toState: frontendURL(`accounts/${accountId}/campaigns`),
toStateName: 'settings_account_campaigns',
roles: ['administrator'],
@ -41,7 +37,7 @@ const primaryMenuItems = accountId => [
icon: 'library',
key: 'helpcenter',
label: 'HELP_CENTER.TITLE',
featureFlag: FEATURE_FLAGS.HELP_CENTER,
featureFlag: 'help_center',
toState: frontendURL(`accounts/${accountId}/portals`),
toStateName: 'default_portal_articles',
roles: ['administrator'],

View file

@ -102,7 +102,6 @@ const settings = accountId => ({
label: 'AGENT_BOTS',
beta: true,
hasSubMenu: false,
globalConfigFlag: 'csmlEditorHost',
toState: frontendURL(`accounts/${accountId}/settings/agent-bots`),
toStateName: 'agent_bots',
featureFlag: FEATURE_FLAGS.AGENT_BOTS,

View file

@ -61,24 +61,6 @@
</a>
</router-link>
</woot-dropdown-item>
<woot-dropdown-item v-if="currentUser.type === 'SuperAdmin'">
<a
href="/super_admin"
class="button small clear secondary"
target="_blank"
rel="noopener nofollow noreferrer"
@click="$emit('close')"
>
<fluent-icon
icon="content-settings"
size="14"
class="icon icon--font"
/>
<span class="button__content">
{{ $t('SIDEBAR_ITEMS.SUPER_ADMIN_CONSOLE') }}
</span>
</a>
</woot-dropdown-item>
<woot-dropdown-item>
<woot-button
variant="clear"
@ -153,7 +135,7 @@ export default {
.dropdown-pane {
left: var(--space-slab);
bottom: var(--space-larger);
min-width: 22rem;
z-index: var(--z-index-low);
min-width: 16.8rem;
z-index: var(--z-index-much-higher);
}
</style>

View file

@ -261,7 +261,14 @@ export default {
width: 20rem;
flex-shrink: 0;
overflow-y: hidden;
position: unset;
@include breakpoint(xlarge down) {
position: absolute;
}
@include breakpoint(xlarge up) {
position: unset;
}
&:hover {
overflow-y: hidden;

View file

@ -112,7 +112,6 @@ $label-badge-size: var(--space-slab);
padding: var(--space-smaller) var(--space-smaller);
margin: var(--space-smaller) 0;
text-align: left;
line-height: 1.2;
&:hover {
background: var(--s-25);
@ -136,6 +135,8 @@ $label-badge-size: var(--space-slab);
.menu-label {
flex-grow: 1;
display: inline-flex;
align-items: center;
}
.inbox-icon {

View file

@ -106,22 +106,18 @@ export default {
activeInbox: 'getSelectedInbox',
accountId: 'getCurrentAccountId',
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
globalConfig: 'globalConfig/get',
}),
hasSubMenu() {
return !!this.menuItem.children;
},
isMenuItemVisible() {
if (this.menuItem.globalConfigFlag) {
return !!this.globalConfig[this.menuItem.globalConfigFlag];
if (!this.menuItem.featureFlag) {
return true;
}
if (this.menuItem.featureFlag) {
return this.isFeatureEnabledonAccount(
this.accountId,
this.menuItem.featureFlag
);
}
return true;
return this.isFeatureEnabledonAccount(
this.accountId,
this.menuItem.featureFlag
);
},
isAllConversations() {
return (

View file

@ -1,11 +1,10 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`SidemenuIcon matches snapshot 1`] = `
<woot-button
class="toggle-sidebar"
color-scheme="secondary"
icon="list"
size="small"
variant="clear"
/>
<button>
<fluent-icon
class="hamburger--menu"
icon="list"
/>
</button>
`;

View file

@ -4,7 +4,7 @@
<fluent-icon :icon="icon" size="12" class="label--icon" />
</span>
<span
v-if="variant === 'smooth' && title && !icon"
v-if="variant === 'smooth'"
:style="{ background: color }"
class="label-color-dot"
/>
@ -117,16 +117,14 @@ export default {
height: var(--space-medium);
&.small {
font-size: var(--font-size-mini);
font-size: var(--font-size-micro);
padding: var(--space-micro) var(--space-smaller);
line-height: 1.2;
height: var(--space-two);
letter-spacing: 0.15px;
}
.label--icon {
cursor: pointer;
}
.label-color-dot {
margin-right: var(--space-smaller);
}
@ -201,8 +199,8 @@ export default {
&.smooth {
background: transparent;
border: 1px solid var(--s-100);
color: var(--s-700);
border: 1px solid var(--s-75);
color: var(--s-800);
}
}
@ -223,22 +221,14 @@ export default {
}
.label-action--button {
display: flex;
margin-right: var(--space-smaller);
margin-bottom: var(--space-minus-micro);
}
.label-color-dot {
display: inline-block;
width: var(--space-slab);
height: var(--space-slab);
width: var(--space-one);
height: var(--space-one);
border-radius: var(--border-radius-small);
margin-right: var(--space-smaller);
box-shadow: var(--shadow-small);
}
.label.small .label-color-dot {
width: var(--space-small);
height: var(--space-small);
border-radius: var(--border-radius-small);
box-shadow: var(--shadow-small);
}
</style>

View file

@ -2,7 +2,7 @@
<button
type="button"
class="toggle-button"
:class="{ active: value, small: size === 'small' }"
:class="{ active: value }"
role="switch"
:aria-checked="value.toString()"
@click="onClick"
@ -15,7 +15,6 @@
export default {
props: {
value: { type: Boolean, default: false },
size: { type: String, default: '' },
},
methods: {
onClick() {
@ -46,20 +45,6 @@ export default {
background-color: var(--w-500);
}
&.small {
width: 22px;
height: 14px;
span {
height: var(--space-one);
width: var(--space-one);
&.active {
transform: translate(var(--space-small), var(--space-zero));
}
}
}
span {
--space-one-point-five: 1.5rem;
background-color: var(--white);

View file

@ -67,9 +67,6 @@ export default {
if (Object.keys(this.enabledFeatures).length === 0) {
return false;
}
if (key === 'website') {
return this.enabledFeatures.channel_website;
}
if (key === 'facebook') {
return this.enabledFeatures.channel_facebook;
}

View file

@ -61,7 +61,6 @@ export default {
}
.colorpicker--selected {
border: 1px solid var(--color-border-light);
border-radius: $space-smaller;
cursor: pointer;
height: $space-large;

View file

@ -46,16 +46,11 @@ export default {
return {
conversation: this.currentChat,
contact: this.$store.getters['contacts/getContact'](this.contactId),
currentAgent: this.currentAgent,
};
},
contactId() {
return this.currentChat?.meta?.sender?.id;
},
currentAgent() {
const { id, name, email } = this.$store.getters.getCurrentUser;
return { id, name, email };
},
},
mounted() {

View file

@ -10,11 +10,11 @@ import 'videojs-record/dist/css/videojs.record.css';
import videojs from 'video.js';
import inboxMixin from '../../../../shared/mixins/inboxMixin';
import alertMixin from '../../../../shared/mixins/alertMixin';
import Recorder from 'opus-recorder';
import encoderWorker from 'opus-recorder/dist/encoderWorker.min';
import waveWorker from 'opus-recorder/dist/waveWorker.min';
import WaveSurfer from 'wavesurfer.js';
import MicrophonePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.microphone.js';
@ -29,19 +29,14 @@ WaveSurfer.microphone = MicrophonePlugin;
export default {
name: 'WootAudioRecorder',
mixins: [alertMixin],
props: {
audioRecordFormat: {
type: String,
default: AUDIO_FORMATS.WEBM,
},
},
mixins: [inboxMixin, alertMixin],
data() {
return {
player: false,
recordingDateStarted: new Date(0),
initialTimeDuration: '00:00',
recorderOptions: {
debug: true,
controls: true,
bigPlayButton: false,
fluid: false,
@ -76,9 +71,6 @@ export default {
record: {
audio: true,
video: false,
maxLength: 900,
timeSlice: 1000,
maxFileSize: 15 * 1024 * 1024,
...(this.audioRecordFormat === AUDIO_FORMATS.WEBM && {
monitorGain: 0,
recordingGain: 1,
@ -88,10 +80,11 @@ export default {
streamPages: true,
maxFramesPerPage: 1,
encoderFrameSize: 1,
encoderPath: waveWorker,
encoderPath: 'opus-recorder/dist/waveWorker.min.js',
}),
...(this.audioRecordFormat === AUDIO_FORMATS.OGG && {
displayMilliseconds: false,
maxLength: 300,
audioEngine: 'opus-recorder',
audioWorkerURL: encoderWorker,
audioChannels: 1,
@ -107,6 +100,12 @@ export default {
isRecording() {
return this.player && this.player.record().isRecording();
},
audioRecordFormat() {
if (this.isAWebWidgetInbox) {
return AUDIO_FORMATS.WEBM;
}
return AUDIO_FORMATS.OGG;
},
},
mounted() {
window.Recorder = Recorder;

View file

@ -47,9 +47,6 @@ import {
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
import AnalyticsHelper, {
ANALYTICS_EVENTS,
} from '../../../helper/AnalyticsHelper';
const createState = (content, placeholder, plugins = []) => {
return EditorState.create({
@ -271,7 +268,6 @@ export default {
);
this.state = this.editorView.state.apply(tr);
this.emitOnChange();
AnalyticsHelper.track(ANALYTICS_EVENTS.USED_MENTIONS);
return false;
},
@ -301,7 +297,6 @@ export default {
this.emitOnChange();
tr.scrollIntoView();
AnalyticsHelper.track(ANALYTICS_EVENTS.INSERTED_A_CANNED_RESPONSE);
return false;
},

View file

@ -91,7 +91,6 @@
</span>
<span class="unread">{{ unreadCount > 9 ? '9+' : unreadCount }}</span>
</div>
<card-labels :conversation-id="chat.id" />
</div>
<woot-context-menu
v-if="showContextMenu"
@ -126,8 +125,8 @@ import InboxName from '../InboxName';
import inboxMixin from 'shared/mixins/inboxMixin';
import ConversationContextMenu from './contextMenu/Index.vue';
import alertMixin from 'shared/mixins/alertMixin';
import TimeAgo from 'dashboard/components/ui/TimeAgo';
import CardLabels from './conversationCardComponents/CardLabels.vue';
import timeAgo from 'dashboard/components/ui/TimeAgo';
const ATTACHMENT_ICONS = {
image: 'image',
audio: 'headphones-sound-wave',
@ -139,11 +138,10 @@ const ATTACHMENT_ICONS = {
export default {
components: {
CardLabels,
InboxName,
Thumbnail,
ConversationContextMenu,
TimeAgo,
timeAgo,
},
mixins: [
@ -372,15 +370,11 @@ export default {
</script>
<style lang="scss" scoped>
.conversation {
align-items: flex-start;
align-items: center;
&:hover {
background: var(--color-background-light);
}
&::v-deep .user-thumbnail-box {
margin-top: var(--space-normal);
}
}
.conversation-selected {
@ -389,10 +383,8 @@ export default {
.has-inbox-name {
&::v-deep .user-thumbnail-box {
margin-top: var(--space-large);
}
.checkbox-wrapper {
margin-top: var(--space-large);
margin-top: var(--space-normal);
align-items: flex-start;
}
.conversation--meta {
margin-top: var(--space-normal);
@ -437,7 +429,6 @@ export default {
margin-top: var(--space-minus-micro);
vertical-align: middle;
}
.checkbox-wrapper {
height: 40px;
width: 40px;
@ -447,7 +438,6 @@ export default {
border-radius: 100%;
margin-top: var(--space-normal);
cursor: pointer;
&:hover {
background-color: var(--w-100);
}

View file

@ -21,11 +21,7 @@
/>
</h3>
<div class="conversation--header--actions">
<inbox-name
v-if="hasMultipleInboxes"
:inbox="inbox"
class="margin-right-small"
/>
<inbox-name :inbox="inbox" class="margin-right-small" />
<span
v-if="isSnoozed"
class="snoozed--display-text margin-right-small"
@ -149,9 +145,6 @@ export default {
const { inbox_id: inboxId } = this.chat;
return this.$store.getters['inboxes/getInbox'](inboxId);
},
hasMultipleInboxes() {
return this.$store.getters['inboxes/getInboxes'].length > 1;
},
},
methods: {

View file

@ -15,6 +15,7 @@
v-if="data.content"
:message="message"
:is-email="isEmailContentType"
:readable-time="readableTime"
:display-quoted-button="displayQuotedButton"
/>
<span
@ -28,6 +29,7 @@
<bubble-image
v-if="attachment.file_type === 'image' && !hasImageError"
:url="attachment.data_url"
:readable-time="readableTime"
@error="onImageLoadError"
/>
<audio v-else-if="attachment.file_type === 'audio'" controls>
@ -36,6 +38,7 @@
<bubble-video
v-else-if="attachment.file_type === 'video'"
:url="attachment.data_url"
:readable-time="readableTime"
/>
<bubble-location
v-else-if="attachment.file_type === 'location'"
@ -43,7 +46,11 @@
:longitude="attachment.coordinates_long"
:name="attachment.fallback_title"
/>
<bubble-file v-else :url="attachment.data_url" />
<bubble-file
v-else
:url="attachment.data_url"
:readable-time="readableTime"
/>
</div>
</div>
<bubble-actions
@ -58,9 +65,10 @@
:is-private="data.private"
:message-type="data.message_type"
:message-status="status"
:readable-time="readableTime"
:source-id="data.source_id"
:inbox-id="data.inbox_id"
:created-at="createdAt"
:message-read="showReadTicks"
/>
</div>
<spinner v-if="isPending" size="tiny" />
@ -111,6 +119,8 @@
</template>
<script>
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
import timeMixin from '../../../mixins/time';
import BubbleMailHead from './bubble/MailHead';
import BubbleText from './bubble/Text';
import BubbleImage from './bubble/Image';
@ -139,7 +149,7 @@ export default {
ContextMenu,
Spinner,
},
mixins: [alertMixin, messageFormatterMixin, contentTypeMixin],
mixins: [alertMixin, timeMixin, messageFormatterMixin, contentTypeMixin],
props: {
data: {
type: Object,
@ -157,6 +167,10 @@ export default {
type: Boolean,
default: false,
},
hasUserReadMessage: {
type: Boolean,
default: false,
},
isWebWidgetInbox: {
type: Boolean,
default: false,
@ -259,8 +273,11 @@ export default {
'has-tweet-menu': this.isATweet,
};
},
createdAt() {
return this.contentAttributes.external_created_at || this.data.created_at;
readableTime() {
return this.messageStamp(
this.contentAttributes.external_created_at || this.data.created_at,
'LLL d, h:mm a'
);
},
isBubble() {
return [0, 1, 3].includes(this.data.message_type);
@ -271,6 +288,14 @@ export default {
isOutgoing() {
return this.data.message_type === MESSAGE_TYPE.OUTGOING;
},
showReadTicks() {
return (
(this.isOutgoing || this.isTemplate) &&
this.hasUserReadMessage &&
this.isWebWidgetInbox &&
!this.data.private
);
},
isTemplate() {
return this.data.message_type === MESSAGE_TYPE.TEMPLATE;
},

View file

@ -40,6 +40,9 @@
:is-a-tweet="isATweet"
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory"
:has-user-read-message="
hasUserReadMessage(message.created_at, getLastSeenAt)
"
:is-web-widget-inbox="isAWebWidgetInbox"
/>
<li v-show="unreadMessageCount != 0" class="unread--toast">
@ -60,6 +63,9 @@
:is-a-tweet="isATweet"
:is-a-whatsapp-channel="isAWhatsAppChannel"
:has-instagram-story="hasInstagramStory"
:has-user-read-message="
hasUserReadMessage(message.created_at, getLastSeenAt)
"
:is-web-widget-inbox="isAWebWidgetInbox"
/>
</ul>

View file

@ -37,7 +37,6 @@
<woot-audio-recorder
v-if="showAudioRecorderEditor"
ref="audioRecorderInput"
:audio-record-format="audioRecordFormat"
@state-recorder-progress-changed="onStateProgressRecorderChanged"
@state-recorder-changed="onStateRecorderChanged"
@finish-record="onFinishRecorder"
@ -148,7 +147,6 @@ import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
import {
MAXIMUM_FILE_UPLOAD_SIZE,
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
AUDIO_FORMATS,
} from 'shared/constants/messages';
import { BUS_EVENTS } from 'shared/constants/busEvents';
@ -163,9 +161,6 @@ import { LocalStorage, LOCAL_STORAGE_KEYS } from '../../../helper/localStorage';
import { trimContent, debounce } from '@chatwoot/utils';
import wootConstants from 'dashboard/constants';
import { isEditorHotKeyEnabled } from 'dashboard/mixins/uiSettings';
import AnalyticsHelper, {
ANALYTICS_EVENTS,
} from '../../../helper/AnalyticsHelper';
const EmojiInput = () => import('shared/components/emoji/EmojiInput');
@ -464,12 +459,6 @@ export default {
editorStateId() {
return `draft-${this.conversationIdByRoute}-${this.replyType}`;
},
audioRecordFormat() {
if (this.isAWebWidgetInbox) {
return AUDIO_FORMATS.WEBM;
}
return AUDIO_FORMATS.OGG;
},
},
watch: {
currentChat(conversation) {
@ -709,7 +698,6 @@ export default {
},
replaceText(message) {
setTimeout(() => {
AnalyticsHelper.track(ANALYTICS_EVENTS.INSERTED_A_CANNED_RESPONSE);
this.message = message;
}, 100);
},

View file

@ -1,14 +1,8 @@
<template>
<div class="message-text--metadata">
<span
class="time"
:class="{
'has-status-icon':
showSentIndicator || showDeliveredIndicator || showReadIndicator,
}"
>
{{ readableTime }}
</span>
<span class="time" :class="{ delivered: messageRead }">{{
readableTime
}}</span>
<span v-if="showReadIndicator" class="read-indicator-wrap">
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.MESSAGE_READ')"
@ -17,7 +11,7 @@
size="14"
/>
</span>
<span v-else-if="showDeliveredIndicator" class="read-indicator-wrap">
<span v-if="showDeliveredIndicator" class="read-indicator-wrap">
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.DELIVERED')"
icon="checkmark-double"
@ -25,7 +19,7 @@
size="14"
/>
</span>
<span v-else-if="showSentIndicator" class="read-indicator-wrap">
<span v-if="showSentIndicator" class="read-indicator-wrap">
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.SENT')"
icon="checkmark"
@ -60,6 +54,19 @@
size="16"
/>
</button>
<a
v-if="hasInstagramStory && (isIncoming || isOutgoing) && linkToStory"
:href="linkToStory"
target="_blank"
rel="noopener noreferrer nofollow"
>
<fluent-icon
v-tooltip.top-start="$t('CHAT_LIST.LINK_TO_STORY')"
icon="open"
class="action--icon cursor-pointer"
size="16"
/>
</a>
<a
v-if="isATweet && (isOutgoing || isIncoming) && linkToTweet"
:href="linkToTweet"
@ -80,19 +87,17 @@
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
import { BUS_EVENTS } from 'shared/constants/busEvents';
import inboxMixin from 'shared/mixins/inboxMixin';
import { mapGetters } from 'vuex';
import timeMixin from '../../../../mixins/time';
export default {
mixins: [inboxMixin, timeMixin],
mixins: [inboxMixin],
props: {
sender: {
type: Object,
default: () => ({}),
},
createdAt: {
type: Number,
default: 0,
readableTime: {
type: String,
default: '',
},
storySender: {
type: String,
@ -138,9 +143,12 @@ export default {
type: [String, Number],
default: 0,
},
messageRead: {
type: Boolean,
default: false,
},
},
computed: {
...mapGetters({ currentChat: 'getSelectedChat' }),
inbox() {
return this.$store.getters['inboxes/getInbox'](this.inboxId);
},
@ -150,9 +158,6 @@ export default {
isOutgoing() {
return MESSAGE_TYPE.OUTGOING === this.messageType;
},
isTemplate() {
return MESSAGE_TYPE.TEMPLATE === this.messageType;
},
isDelivered() {
return MESSAGE_STATUS.DELIVERED === this.messageStatus;
},
@ -162,9 +167,6 @@ export default {
isSent() {
return MESSAGE_STATUS.SENT === this.messageStatus;
},
readableTime() {
return this.messageStamp(this.createdAt, 'LLL d, h:mm a');
},
screenName() {
const { additional_attributes: additionalAttributes = {} } =
this.sender || {};
@ -185,52 +187,28 @@ export default {
const { storySender, storyId } = this;
return `https://www.instagram.com/stories/${storySender}/${storyId}`;
},
showStatusIndicators() {
if ((this.isOutgoing || this.isTemplate) && !this.private) {
return true;
}
return false;
},
showSentIndicator() {
if (!this.showStatusIndicators) {
return false;
}
if (this.isAnEmailChannel) {
return !!this.sourceId;
}
if (this.isAWhatsAppChannel) {
return this.sourceId && this.isSent;
}
return false;
return (
this.isOutgoing &&
this.sourceId &&
(this.isAnEmailChannel || (this.isAWhatsAppChannel && this.isSent))
);
},
showDeliveredIndicator() {
if (!this.showStatusIndicators) {
return false;
}
if (this.isAWhatsAppChannel) {
return this.sourceId && this.isDelivered;
}
return false;
return (
this.isOutgoing &&
this.sourceId &&
this.isAWhatsAppChannel &&
this.isDelivered
);
},
showReadIndicator() {
if (!this.showStatusIndicators) {
return false;
}
if (this.isAWebWidgetInbox) {
const { contact_last_seen_at: contactLastSeenAt } = this.currentChat;
return contactLastSeenAt >= this.createdAt;
}
if (this.isAWhatsAppChannel) {
return this.sourceId && this.isRead;
}
return false;
return (
this.isOutgoing &&
this.sourceId &&
this.isAWhatsAppChannel &&
this.isRead
);
},
},
methods: {
@ -253,13 +231,12 @@ export default {
.action--icon {
color: var(--white);
&.read-tick {
color: var(--v-100);
}
&.read-indicator {
color: var(--g-200);
color: var(--g-300);
}
}
@ -324,9 +301,8 @@ export default {
position: absolute;
right: var(--space-small);
white-space: nowrap;
&.has-status-icon {
right: var(--space-large);
&.delivered {
right: var(--space-medium);
line-height: 2;
}
}

View file

@ -35,6 +35,10 @@ export default {
type: String,
default: '',
},
readableTime: {
type: String,
default: '',
},
isEmail: {
type: Boolean,
default: true,

View file

@ -1,136 +0,0 @@
<template>
<div
v-show="activeLabels.length"
ref="labelContainer"
class="label-container"
>
<div class="labels-wrap" :class="{ expand: showAllLabels }">
<woot-label
v-for="(label, index) in activeLabels"
:key="label.id"
:title="label.title"
:description="label.description"
:color="label.color"
variant="smooth"
small
:class="{ hidden: !showAllLabels && index > labelPosition }"
/>
<woot-button
v-if="showExpandLabelButton"
:title="
showAllLabels
? $t('CONVERSATION.CARD.HIDE_LABELS')
: $t('CONVERSATION.CARD.SHOW_LABELS')
"
class="show-more--button"
color-scheme="secondary"
variant="hollow"
:icon="showAllLabels ? 'chevron-left' : 'chevron-right'"
size="tiny"
@click="onShowLabels"
/>
</div>
</div>
</template>
<script>
import conversationLabelMixin from 'dashboard/mixins/conversation/labelMixin';
export default {
mixins: [conversationLabelMixin],
props: {
conversationId: {
type: Number,
required: true,
},
},
data() {
return {
showAllLabels: false,
showExpandLabelButton: false,
labelPosition: -1,
};
},
watch: {
activeLabels() {
this.$nextTick(() => this.computeVisibleLabelPosition());
},
},
mounted() {
this.computeVisibleLabelPosition();
},
methods: {
onShowLabels(e) {
e.stopPropagation();
this.showAllLabels = !this.showAllLabels;
},
computeVisibleLabelPosition() {
const labelContainer = this.$refs.labelContainer;
const labels = this.$refs.labelContainer.querySelectorAll('.label');
let labelOffset = 0;
this.showExpandLabelButton = false;
Array.from(labels).forEach((label, index) => {
labelOffset += label.offsetWidth + 8;
if (labelOffset < labelContainer.clientWidth - 16) {
this.labelPosition = index;
} else {
this.showExpandLabelButton = true;
}
});
},
},
};
</script>
<style lang="scss" scoped>
.show-more--button {
height: var(--space-two);
position: sticky;
flex-shrink: 0;
right: 0;
margin-right: var(--space-medium);
&.secondary:focus {
color: var(--s-700);
border-color: var(--s-300);
}
}
.label-container {
margin-top: var(--space-micro);
}
.labels-wrap {
display: flex;
align-items: center;
min-width: 0;
flex-shrink: 1;
&.expand {
height: auto;
overflow: visible;
flex-flow: row wrap;
.label {
margin-bottom: var(--space-smaller);
}
.show-more--button {
margin-bottom: var(--space-smaller);
}
}
.secondary {
border: 1px solid var(--s-100);
}
.label {
margin-bottom: 0;
}
}
.hidden {
visibility: hidden;
position: absolute;
}
</style>

View file

@ -22,6 +22,5 @@ export default {
EXPANDED: 'expanded',
},
DOCS_URL: '//www.chatwoot.com/docs/product/',
TESTIMONIAL_URL: 'https://testimonials.cdn.chatwoot.com/content.json',
};
export const DEFAULT_REDIRECT_URL = '/app/';

View file

@ -1,18 +1,13 @@
export const FEATURE_FLAGS = {
AGENT_BOTS: 'agent_bots',
AGENT_MANAGEMENT: 'agent_management',
AUTO_RESOLVE_CONVERSATIONS: 'auto_resolve_conversations',
AUTOMATIONS: 'automations',
CAMPAIGNS: 'campaigns',
CANNED_RESPONSES: 'canned_responses',
CRM: 'crm',
CUSTOM_ATTRIBUTES: 'custom_attributes',
INBOX_MANAGEMENT: 'inbox_management',
INTEGRATIONS: 'integrations',
LABELS: 'labels',
MACROS: 'macros',
HELP_CENTER: 'help_center',
REPORTS: 'reports',
TEAM_MANAGEMENT: 'team_management',
VOICE_RECORDER: 'voice_recorder',
};

View file

@ -1,9 +0,0 @@
export const EXECUTED_A_MACRO = 'Executed a macro';
export const SENT_MESSAGE = 'Sent a message';
export const SENT_PRIVATE_NOTE = 'Sent a private note';
export const INSERTED_A_CANNED_RESPONSE = 'Inserted a canned response';
export const USED_MENTIONS = 'Used mentions';
export const MERGED_CONTACTS = 'Used merge contact option';
export const ADDED_TO_CANNED_RESPONSE = 'Used added to canned response option';
export const ADDED_A_CUSTOM_ATTRIBUTE = 'Added a custom attribute';
export const ADDED_AN_INBOX = 'Added an inbox';

View file

@ -1,67 +0,0 @@
import { AnalyticsBrowser } from '@june-so/analytics-next';
class AnalyticsHelper {
constructor({ token: analyticsToken } = {}) {
this.analyticsToken = analyticsToken;
this.analytics = null;
this.user = {};
}
async init() {
if (!this.analyticsToken) {
return;
}
let [analytics] = await AnalyticsBrowser.load({
writeKey: this.analyticsToken,
});
this.analytics = analytics;
}
identify(user) {
if (!this.analytics) {
return;
}
this.user = user;
this.analytics.identify(this.user.email, {
userId: this.user.id,
email: this.user.email,
name: this.user.name,
avatar: this.user.avatar_url,
});
const { accounts, account_id: accountId } = this.user;
const [currentAccount] = accounts.filter(
account => account.id === accountId
);
if (currentAccount) {
this.analytics.group(currentAccount.id, this.user.id, {
name: currentAccount.name,
});
}
}
track(eventName, properties = {}) {
if (!this.analytics) {
return;
}
this.analytics.track({
userId: this.user.id,
event: eventName,
properties,
});
}
page(params) {
if (!this.analytics) {
return;
}
this.analytics.page(params);
}
}
export * as ANALYTICS_EVENTS from './events';
export default new AnalyticsHelper(window.analyticsConfig);

View file

@ -17,22 +17,13 @@ const formatArray = params => {
return params;
};
const generatePayloadForObject = item => {
if (item.action_params.id) {
item.action_params = [item.action_params.id];
} else {
item.action_params = [item.action_params];
}
return item.action_params;
};
const generatePayload = data => {
const actions = JSON.parse(JSON.stringify(data));
let payload = actions.map(item => {
if (Array.isArray(item.action_params)) {
item.action_params = formatArray(item.action_params);
} else if (typeof item.action_params === 'object') {
item.action_params = generatePayloadForObject(item);
item.action_params = [item.action_params.id];
} else if (!item.action_params) {
item.action_params = [];
} else {

View file

@ -60,11 +60,15 @@ export const getFormattedPreChatFields = ({ preChatFields }) => {
return {
...item,
label: getLabel({
key: item.name,
key: standardFieldKeys[item.name]
? standardFieldKeys[item.name].key
: item.name,
label: item.label ? item.label : item.name,
}),
placeholder: getPlaceHolder({
key: item.name,
key: standardFieldKeys[item.name]
? standardFieldKeys[item.name].key
: item.name,
placeholder: item.placeholder ? item.placeholder : item.name,
}),
};

View file

@ -1,4 +1,4 @@
import AnalyticsHelper from './AnalyticsHelper';
import posthog from 'posthog-js';
export const CHATWOOT_SET_USER = 'CHATWOOT_SET_USER';
export const CHATWOOT_RESET = 'CHATWOOT_RESET';
@ -8,9 +8,16 @@ export const ANALYTICS_RESET = 'ANALYTICS_RESET';
export const initializeAnalyticsEvents = () => {
window.bus.$on(ANALYTICS_IDENTITY, ({ user }) => {
AnalyticsHelper.identify(user);
if (window.analyticsConfig) {
posthog.identify(user.id, { name: user.name, email: user.email });
}
});
window.bus.$on(ANALYTICS_RESET, () => {
if (window.analyticsConfig) {
posthog.reset();
}
});
window.bus.$on(ANALYTICS_RESET, () => {});
};
export const initializeChatwootEvents = () => {

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "لا توجد استجابة",
"RATING_TITLE": "التقييم",
"FEEDBACK_TITLE": "الملاحظات",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "إغلاق المحادثة",
"REOPEN_ACTION": "إعادة فتح",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "رقم الهاتف",
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
},
"API_CALLBACK": {
"TITLE": "عنوان Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "رقم الهاتف",
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
},
"SUBMIT_BUTTON": "إنشاء قناة عرض التردد",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "رقم الهاتف",
"PLACEHOLDER": "الرجاء إدخال رقم الهاتف الذي سيتم إرسال الرسائل منه.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "الرجاء إدخال قيمة صحيحة. يجب أن يبدأ رقم الهاتف بعلامة `+`."
},
"PHONE_NUMBER_ID": {
"LABEL": "رقم الهاتف",

View file

@ -103,9 +103,7 @@
"متصل",
"مشغول",
"غير متصل"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "عنوان البريد الإلكتروني الخاص بك",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "اختر حساباً من القائمة التالية",
"PROFILE_SETTINGS": "إعدادات الملف الشخصي",
"KEYBOARD_SHORTCUTS": "اختصارات لوحة المفاتيح",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "تسجيل الخروج"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "الفئة",
"CATEGORY_EMPTY_MESSAGE": "لم يتم العثور على فئات"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "قراءة المستندات"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "اسم الشركة",
"LABEL": "اسم الحساب",
"PLACEHOLDER": "مؤسسة Wayne"
},
"SUBMIT": "إرسال"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "تسجيل حساب",
"TITLE": "تسجيل",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "من خلال التسجيل، فإنك توافق على <a href=\"https://www.chatwoot.com/terms\">شروط الخدمة</a> و <a href=\"https://www.chatwoot.com/privacy-policy\">سياسة الخصوصية</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "اسم الحساب",
"PLACEHOLDER": "أدخل اسم الحساب. مثال: Wayne Enterprises",
"ERROR": "اسم الحساب قصير جداً"
},
"FULL_NAME": {
"LABEL": "الاسم الكامل",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "البريد الإلكتروني للعمل",
"PLACEHOLDER": "أدخل عنوان بريدك الإلكتروني للعمل. مثال: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "عنوان البريد الإلكتروني غير صالح"
},
"PASSWORD": {
"LABEL": "كلمة المرور",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "No response",
"RATING_TITLE": "Rating",
"FEEDBACK_TITLE": "Feedback",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Phone number",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Телефон",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"SUBMIT_BUTTON": "Create Bandwidth Channel",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Phone number",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"PHONE_NUMBER_ID": {
"LABEL": "Phone number ID",

View file

@ -103,9 +103,7 @@
"Online",
"Busy",
"Offline"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Your email address",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings",
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Logout"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Category",
"CATEGORY_EMPTY_MESSAGE": "No categories found"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Read docs"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Име на фирма",
"LABEL": "Account Name",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Изпращане"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Register an account",
"TITLE": "Register",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "By signing up, you agree to our <a href=\"https://www.chatwoot.com/terms\">T & C</a> and <a href=\"https://www.chatwoot.com/privacy-policy\">Privacy policy</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Account name",
"PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises",
"ERROR": "Account name is too short"
},
"FULL_NAME": {
"LABEL": "Full name",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Work email",
"PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "Email address is invalid"
},
"PASSWORD": {
"LABEL": "Password",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "Sense resposta",
"RATING_TITLE": "Rating",
"FEEDBACK_TITLE": "Feedback",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Resoldre",
"REOPEN_ACTION": "Tornar a obrir",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de telèfon",
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de telèfon",
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
},
"SUBMIT_BUTTON": "Create Bandwidth Channel",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de telèfon",
"PLACEHOLDER": "Introduïu el número de telèfon des del qual serà enviat el missatge.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Introduïu un valor vàlid. El número de telèfon hauria de començar amb el signe `+`."
},
"PHONE_NUMBER_ID": {
"LABEL": "Phone number ID",

View file

@ -103,9 +103,7 @@
"En línia",
"Ocupat",
"Fora de línia"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "La teva adreça de correu electrònic",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Selecciona un compte de la llista següent",
"PROFILE_SETTINGS": "Configuració del Perfil",
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Sortir"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Category",
"CATEGORY_EMPTY_MESSAGE": "No categories found"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Read docs"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Nom de la companyia",
"LABEL": "Nom del compte",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Envia"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Registra un compte",
"TITLE": "Registre",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "En registrar-vos, esteu dacord amb el nostre <a href=\"https://www.chatwoot.com/terms\">T & C</a> i <a href=\"https://www.chatwoot.com/privacy-policy\">Polítiques de Privadesa</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Nom del compte",
"PLACEHOLDER": "Introdueix el nom del compte. ex: Wayne Enterprises",
"ERROR": "El nom del compte és massa curt"
},
"FULL_NAME": {
"LABEL": "Nom complet",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Email de treball",
"PLACEHOLDER": "Introdueix la teva adreça email de treball. ex: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "Adreça email invàlida"
},
"PASSWORD": {
"LABEL": "Contrasenya",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "Bez odpovědi",
"RATING_TITLE": "Hodnocení",
"FEEDBACK_TITLE": "Zpětná vazba",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Vyřešit",
"REOPEN_ACTION": "Znovu otevřít",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonní číslo",
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonní číslo",
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
},
"SUBMIT_BUTTON": "Create Bandwidth Channel",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonní číslo",
"PLACEHOLDER": "Zadejte prosím telefonní číslo, ze kterého bude zpráva odeslána.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Zadejte platnou hodnotu. Telefonní číslo by mělo začínat znakem `+`."
},
"PHONE_NUMBER_ID": {
"LABEL": "Phone number ID",

View file

@ -103,9 +103,7 @@
"Online",
"Zaneprázdněn",
"Offline"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Vaše e-mailová adresa",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Vyberte účet z následujícího seznamu",
"PROFILE_SETTINGS": "Nastavení profilu",
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Odhlásit se"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Category",
"CATEGORY_EMPTY_MESSAGE": "No categories found"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Read docs"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Název společnosti",
"LABEL": "Název účtu",
"PLACEHOLDER": "Wayne podniky"
},
"SUBMIT": "Odeslat"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Registrovat účet",
"TITLE": "Registrovat se",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "Registrací souhlasíte s našimi <a href=\"https://www.chatwoot.com/terms\">T & C</a> a <a href=\"https://www.chatwoot.com/privacy-policy\">Zásadami ochrany osobních údajů</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Název účtu",
"PLACEHOLDER": "Zadejte název účtu. např.: Novákova společnost",
"ERROR": "Název účtu je příliš krátký"
},
"FULL_NAME": {
"LABEL": "Celé jméno",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Pracovní e-mail",
"PLACEHOLDER": "Zadejte svou pracovní e-mailovou adresu. např.: jan@novak.spolecnost",
"ERROR": "Please enter a valid work email address"
"ERROR": "E-mailová adresa je neplatná"
},
"PASSWORD": {
"LABEL": "Heslo",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "Intet svar",
"RATING_TITLE": "Bedømmelse",
"FEEDBACK_TITLE": "Tilbagemelding",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Løs",
"REOPEN_ACTION": "Genåben",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
},
"SUBMIT_BUTTON": "Opret Båndbredde Kanal",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn."
},
"PHONE_NUMBER_ID": {
"LABEL": "Telefonnummer ID",

View file

@ -103,9 +103,7 @@
"Online",
"Optaget",
"Offline"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Din e-mail adresse",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste",
"PROFILE_SETTINGS": "Profilindstillinger",
"KEYBOARD_SHORTCUTS": "Tastaturgenveje",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Log Ud"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Kategori",
"CATEGORY_EMPTY_MESSAGE": "Ingen kategorier fundet"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Læs dokumenter"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Virksomhedens Navn",
"LABEL": "Kontonavn",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Send"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Registrer en konto",
"TITLE": "Registrer",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "Ved at tilmelde dig, accepterer du vores <a href=\"https://www.chatwoot.com/terms\">T & C</a> og <a href=\"https://www.chatwoot.com/privacy-policy\">Privatlivspolitik</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Kontonavn",
"PLACEHOLDER": "Indtast et kontonavn, fx: Wayne Enterprises",
"ERROR": "Kontonavn er for kort"
},
"FULL_NAME": {
"LABEL": "Fulde navn",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Arbejde e-mail",
"PLACEHOLDER": "Indtast din arbejdsmailadresse fx: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "E-mail adresse er ugyldig"
},
"PASSWORD": {
"LABEL": "Adgangskode",

View file

@ -1,39 +1,39 @@
{
"AGENT_BOTS": {
"HEADER": "Bots",
"LOADING_EDITOR": "Editor wird geladen...",
"HEADER_BTN_TXT": "Bot-Konfiguration hinzufügen",
"SIDEBAR_TXT": "<p><b>Agenten Bots</b> <p>Agenten Bots erlauben es Ihnen, die Unterhaltungen zu automatisieren</p>",
"LOADING_EDITOR": "Loading Editor...",
"HEADER_BTN_TXT": "Add Bot Configuration",
"SIDEBAR_TXT": "<p><b>Agent Bots</b> <p>Agent bots allows you to automate the conversations</p>",
"CSML_BOT_EDITOR": {
"NAME": {
"LABEL": "Bot Name",
"PLACEHOLDER": "Geben Sie Ihrem Bot einen Namen",
"ERROR": "Bot Name ist erforderlich"
"PLACEHOLDER": "Give your bot a name",
"ERROR": "Bot name is required"
},
"DESCRIPTION": {
"LABEL": "Bot Beschreibung",
"PLACEHOLDER": "Was macht dieser Bot?"
"LABEL": "Bot Description",
"PLACEHOLDER": "What does this bot do?"
},
"BOT_CONFIG": {
"ERROR": "Bitte geben Sie Ihre CSML Bot-Konfiguration oben ein",
"API_ERROR": "Ihre CSML-Konfiguration ist ungültig, bitte korrigieren Sie sie und versuchen es erneut."
"ERROR": "Please enter your CSML bot configuration above",
"API_ERROR": "Your CSML configuration is invalid, please fix it and try again."
},
"SUBMIT": "Validieren und speichern"
"SUBMIT": "Validate and save"
},
"BOT_CONFIGURATION": {
"TITLE": "Agenten-Bot auswählen",
"DESC": "Sie können einen Agenten-Bot aus der Liste in diesen Posteingang setzen. Der Bot kann die Unterhaltung anfangs bearbeiten und bei Bedarf an einen Agenten übertragen.",
"TITLE": "Select an agent bot",
"DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.",
"SUBMIT": "Aktualisieren",
"SUCCESS_MESSAGE": "Agenten-Bot erfolgreich aktualisiert",
"ERROR_MESSAGE": "Konnte den Agenten-Bot nicht aktualisieren, bitte versuchen Sie es später erneut",
"SELECT_PLACEHOLDER": "Bot auswählen"
"SUCCESS_MESSAGE": "Successfully updated the agent bot",
"ERROR_MESSAGE": "Could not update the agent bot, please try again later",
"SELECT_PLACEHOLDER": "Select Bot"
},
"ADD": {
"TITLE": "Neuen Bot konfigurieren",
"TITLE": "Configure new bot",
"CANCEL_BUTTON_TEXT": "Stornieren",
"API": {
"SUCCESS_MESSAGE": "Bot erfolgreich hinzugefügt",
"ERROR_MESSAGE": "Bot konnte nicht hinzugefügt werden, bitte versuchen Sie es später erneut"
"SUCCESS_MESSAGE": "Bot added successfully",
"ERROR_MESSAGE": "Could not add bot, Please try again later"
}
},
"LIST": {

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "Keine Antwort",
"RATING_TITLE": "Bewertung",
"FEEDBACK_TITLE": "Feedback",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Fall schließen",
"REOPEN_ACTION": "Wieder öffnen",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -362,7 +362,7 @@
},
"BUTTONS": {
"CREATE": "Kategorie erstellen",
"CANCEL": "Abbrechen"
"CANCEL": "Stornieren"
},
"API": {
"SUCCESS_MESSAGE": "Kategorie erfolgreich erstellt",

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
},
"SUBMIT_BUTTON": "Bitte geben Sie Ihre Bandbreitenanwendungs-ID ein",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Telefonnummer",
"PLACEHOLDER": "Bitte geben Sie die Telefonnummer ein, von der die Nachricht gesendet wird.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Bitte geben sie einen gültigen Wert ein. Die Telefonnummer sollte mit dem Pluszeichen beginnen."
},
"PHONE_NUMBER_ID": {
"LABEL": "Telefonnummer-ID",

View file

@ -103,9 +103,7 @@
"Online",
"Beschäftigt",
"Offline"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Deine Emailadresse",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Wählen Sie ein Benutzerkonto aus der folgenden Liste",
"PROFILE_SETTINGS": "Profileinstellungen",
"KEYBOARD_SHORTCUTS": "Tastenkombinationen",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Ausloggen"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Kategorie",
"CATEGORY_EMPTY_MESSAGE": "Keine Kategorien gefunden"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Dokumente lesen"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Firmenname",
"LABEL": "Kontobezeichnung",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Abschicken"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Einen Account registrieren",
"TITLE": "Registrieren",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "Mit Ihrer Anmeldung stimmen Sie unseren <a href=\"https://www.chatwoot.com/terms\"> AGB </a> und <a href=\"https://www.chatwoot.com/privacy-policy\"> Datenschutzrichtlinie </a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Kontobezeichnung",
"PLACEHOLDER": "Geben Sie einen Kontonamen ein, z. B.: Wayne Enterprises",
"ERROR": "Kontoname ist zu kurz"
},
"FULL_NAME": {
"LABEL": "Vollständiger Name",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Geschäftliche E-Mail-Adresse",
"PLACEHOLDER": "Geben Sie Ihre geschäftliche E-Mail-Adresse ein, z. B.: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "E-Mail-Adresse ist ungültig"
},
"PASSWORD": {
"LABEL": "Passwort",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "Καμία ανταπόκριση",
"RATING_TITLE": "Αξιολόγηση",
"FEEDBACK_TITLE": "Ανατροφοδότηση",
"CARD": {
"SHOW_LABELS": "Προβολή ετικετών",
"HIDE_LABELS": "Απόκρυψη ετικετών"
},
"HEADER": {
"RESOLVE_ACTION": "Επίλυση",
"REOPEN_ACTION": "Επαναφορά",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Αναζήτηση emojis",
"NOT_FOUND": "Κανένα emoji δεν ταιριάζει με την αναζήτησή σας"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Αριθμός τηλεφώνου",
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
},
"API_CALLBACK": {
"TITLE": "URL επανάκλησης",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Αριθμός τηλεφώνου",
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
},
"SUBMIT_BUTTON": "Δημιουργήστε Bandwidth",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Αριθμός τηλεφώνου",
"PLACEHOLDER": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου από τον οποίο θα σταλεί το μήνυμα.",
"ERROR": "Παρακαλώ δώστε έναν έγκυρο αριθμό τηλεφώνου που ξεκινά με ένα σύμβολο `+` και δεν περιέχει κενά."
"ERROR": "Παρακαλώ καταχωρήστε μια έγκυρη τιμή. Ο αριθμός του τηλεφώνου πρέπει να ξεκινά με το σύμβολο `+`."
},
"PHONE_NUMBER_ID": {
"LABEL": "Αριθμός Τηλεφώνου",

View file

@ -103,9 +103,7 @@
"Στην Γραμμή",
"Απασχολημένος",
"Εκτός"
],
"SET_AVAILABILITY_SUCCESS": "Η διαθεσιμότητα ορίστηκε με επιτυχία",
"SET_AVAILABILITY_ERROR": "Αδυναμία ορισμού διαθεσιμότητας, παρακαλώ προσπαθήστε ξανά"
]
},
"EMAIL": {
"LABEL": "Η διεύθυνση email",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Επιλέξτε ένα λογαριασμό από την Λίστα",
"PROFILE_SETTINGS": "Ρυθμίσεις Προφίλ",
"KEYBOARD_SHORTCUTS": "Συντομεύσεις Πληκτρολογίου",
"SUPER_ADMIN_CONSOLE": "Super Admin Κονσόλα",
"LOGOUT": "Έξοδος (Logout)"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Κατηγορία",
"CATEGORY_EMPTY_MESSAGE": "Δεν βρέθηκαν κατηγορίες"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Αυτόματη σήμανση εκτός σύνδεσης",
"INFO_TEXT": "Αφήστε το σύστημα να σας σηματοδοτήσει αυτόματα εκτός σύνδεσης, όταν δεν χρησιμοποιείτε την εφαρμογή ή τον πίνακα ελέγχου."
},
"DOCS": "Ανάγνωση εγγράφων"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Όνομα Εταιρείας",
"LABEL": "Ονομασία Λογαριασμού",
"PLACEHOLDER": "Wayne Α. Ε"
},
"SUBMIT": "Καταχώρηση"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Καταχωρήστε ένα λογαριασμό",
"TITLE": "Καταχώρηση",
"TESTIMONIAL_HEADER": "Το μόνο που χρειάζεται είναι ένα βήμα για να προχωρήσουμε",
"TESTIMONIAL_CONTENT": "Είστε ένα βήμα μακριά από την εμπλοκή των πελατών σας, και την εύρεση νέων.",
"TERMS_ACCEPT": "Με την καταχώρηση, έχετε συμφωνήσει με τους όρους μας <a href=\"https://www.chatwoot.com/terms\">T & C</a> και <a href=\"https://www.chatwoot.com/privacy-policy\">την πολιτική ιδιωτικών δεδομένων</a>",
"COMPANY_NAME": {
"LABEL": "Επωνυμία εταιρείας",
"PLACEHOLDER": "Εισάγετε το όνομα της εταιρείας σας. π. χ.: Wayne Enterprises",
"ERROR": "Το όνομα της εταιρείας είναι πολύ σύντομο"
"ACCOUNT_NAME": {
"LABEL": "Ονομασία Λογαριασμού",
"PLACEHOLDER": "Συμπληρώστε όνομα λογαριασμού π. χ. Wayne Α. Ε",
"ERROR": "Το όνομα του λογαριασμού είναι πολύ σύντομο"
},
"FULL_NAME": {
"LABEL": "Πλήρες όνομα",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "email εργασίας",
"PLACEHOLDER": "συμπληρώστε το email εργασίας πχ: papadopoulos@wyane.com",
"ERROR": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email"
"ERROR": "Η διεύθυνση email είναι εσφαλμένη"
},
"PASSWORD": {
"LABEL": "Κωδικός",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "No response",
"RATING_TITLE": "Rating",
"FEEDBACK_TITLE": "Feedback",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Phone number",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Phone number",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"SUBMIT_BUTTON": "Create Bandwidth Channel",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Phone number",
"PLACEHOLDER": "Please enter the phone number from which message will be sent.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Please enter a valid value. Phone number should start with `+` sign."
},
"PHONE_NUMBER_ID": {
"LABEL": "Phone number ID",

View file

@ -99,9 +99,11 @@
},
"AVAILABILITY": {
"LABEL": "Availability",
"STATUSES_LIST": ["Online", "Busy", "Offline"],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
"STATUSES_LIST": [
"Online",
"Busy",
"Offline"
]
},
"EMAIL": {
"LABEL": "Your email address",
@ -132,7 +134,6 @@
"SELECTOR_SUBTITLE": "Select an account from the following list",
"PROFILE_SETTINGS": "Profile Settings",
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Logout"
},
"APP_GLOBAL": {
@ -225,10 +226,6 @@
"CATEGORY": "Category",
"CATEGORY_EMPTY_MESSAGE": "No categories found"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Read docs"
},
"BILLING_SETTINGS": {
@ -260,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Company Name",
"LABEL": "Account Name",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Submit"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Register an account",
"TITLE": "Register",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "By signing up, you agree to our <a href=\"https://www.chatwoot.com/terms\">T & C</a> and <a href=\"https://www.chatwoot.com/privacy-policy\">Privacy policy</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Account name",
"PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises",
"ERROR": "Account name is too short"
},
"FULL_NAME": {
"LABEL": "Full name",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "Work email",
"PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises",
"ERROR": "Please enter a valid work email address"
"ERROR": "Email address is invalid"
},
"PASSWORD": {
"LABEL": "Password",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "No hay respuesta",
"RATING_TITLE": "Calificación",
"FEEDBACK_TITLE": "Comentarios",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Resolver",
"REOPEN_ACTION": "Reabrir",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de teléfono",
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
},
"API_CALLBACK": {
"TITLE": "URL de devolución de llamada",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de teléfono",
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
},
"SUBMIT_BUTTON": "Crear Canal de Bandwidth",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Número de teléfono",
"PLACEHOLDER": "Por favor, introduzca el número de teléfono desde el que se enviará el mensaje.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`."
},
"PHONE_NUMBER_ID": {
"LABEL": "ID de número de teléfono",

View file

@ -103,9 +103,7 @@
"En línea",
"Ocupado",
"Fuera de línea"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Tu dirección de correo",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Seleccione una cuenta de la siguiente lista",
"PROFILE_SETTINGS": "Ajustes del perfil",
"KEYBOARD_SHORTCUTS": "Atajos de teclado",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Cerrar sesión"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Categoría",
"CATEGORY_EMPTY_MESSAGE": "No se encontraron categorías"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Leer documentos"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Empresa",
"LABEL": "Nombre de cuenta",
"PLACEHOLDER": "Empresas de Wayne"
},
"SUBMIT": "Enviar"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "Registrar una cuenta",
"TITLE": "Registrarse",
"TESTIMONIAL_HEADER": "All it takes is one step to move forward",
"TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.",
"TERMS_ACCEPT": "Al registrarte, aceptas nuestra <a href=\"https://www.chatwoot.com/terms\">T & C</a> y nuestra <a href=\"https://www.chatwoot.com/privacy-policy\">política de privacidad</a>",
"COMPANY_NAME": {
"LABEL": "Company name",
"PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises",
"ERROR": "Company name is too short"
"ACCOUNT_NAME": {
"LABEL": "Nombre de cuenta",
"PLACEHOLDER": "Empresas de Wayne",
"ERROR": "El nombre de la cuenta es demasiado corto"
},
"FULL_NAME": {
"LABEL": "Nombre completo",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "E-mail",
"PLACEHOLDER": "bruce@wayne.empresas",
"ERROR": "Please enter a valid work email address"
"ERROR": "El correo no es válido"
},
"PASSWORD": {
"LABEL": "Contraseña",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "بدون پاسخ",
"RATING_TITLE": "رتبه",
"FEEDBACK_TITLE": "بازخورد",
"CARD": {
"SHOW_LABELS": "مشاهده کردن برچسب‌ها",
"HIDE_LABELS": "پنهان کردن برچسب‌ها"
},
"HEADER": {
"RESOLVE_ACTION": "حل شد",
"REOPEN_ACTION": "دوباره باز کنید",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "جستجوی ایموجی",
"NOT_FOUND": "هیچ ایموجی با جستجوی شما مطابقت ندارد"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "شماره تلفن",
"PLACEHOLDER": "لطفا شماره‌ای که پیام‌ می‌بایست به آن ارسال شود را وارد کنید",
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره می‌بایست با کاراکتر `+` شروع شود"
},
"API_CALLBACK": {
"TITLE": "آدرس URL مربوط به API",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "شماره تلفن",
"PLACEHOLDER": "لطفا شماره‌ای که پیام‌ می‌بایست به آن ارسال شود را وارد کنید",
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره می‌بایست با کاراکتر `+` شروع شود"
},
"SUBMIT_BUTTON": "ایجاد کانال Bandwidth",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "شماره تلفن",
"PLACEHOLDER": "لطفا شماره‌ای که پیام‌ می‌بایست به آن ارسال شود را وارد کنید",
"ERROR": "لطفا یک شماره تلفن معتبر ارائه دهید که با علامت «+» شروع شود و بدون فاصله بین اعداد باشد."
"ERROR": "لطفا شماره تلفن را به شکل صحیح وارد کنید. شماره می‌بایست با کاراکتر `+` شروع شود"
},
"PHONE_NUMBER_ID": {
"LABEL": "شناسه شماره تلفن",
@ -445,8 +445,8 @@
"ENABLE_CSAT_SUB_TEXT": "پس از پایان گفتگو ، نظرسنجی CSAT (رضایت مشتری) را فعال/غیرفعال کنید",
"ENABLE_CONTINUITY_VIA_EMAIL": "ادامه مکالمه را از طریق ایمیل فعال کنید",
"ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "اگر آدرس ایمیل تماس در دسترس باشد، مکالمات از طریق ایمیل ادامه خواهد یافت.",
"LOCK_TO_SINGLE_CONVERSATION": "قفل کردن مکالمه تکی",
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "چند مکالمه را برای یک مخاطب در این صندوق ورودی فعال یا غیرفعال کنید",
"LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
"LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
"INBOX_UPDATE_TITLE": "تنظیمات صندوق ورودی",
"INBOX_UPDATE_SUB_TEXT": "تغییر پارامترهای صندوق ورودی",
"AUTO_ASSIGNMENT_SUB_TEXT": "فعال کردن یا غیرفعال کردن واگذاری خودکار گفتگوها به ایجنت های عضو این صندوق ورودی.",

View file

@ -103,9 +103,7 @@
"آنلاین",
"مشغول",
"آفلاین"
],
"SET_AVAILABILITY_SUCCESS": "در دسترس بودن با موفقیت تنظیم شد",
"SET_AVAILABILITY_ERROR": "در دسترس بودن تنظیم نشد، لطفا دوباره امتحان کنید"
]
},
"EMAIL": {
"LABEL": "ایمیل شما",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "از لیست یکی از حساب‌ها را انتخاب کنید",
"PROFILE_SETTINGS": "تنظیمات پروفایل",
"KEYBOARD_SHORTCUTS": "میانبرهای صفحه‌کلید",
"SUPER_ADMIN_CONSOLE": "کنسول سوپر مدیر",
"LOGOUT": "خروج از حساب‌کاربری"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "دسته‌بندی",
"CATEGORY_EMPTY_MESSAGE": "هیچ دسته‌بندی‌ای یافت نشد"
},
"SET_AUTO_OFFLINE": {
"TEXT": "علامت گذاری خودکار به صورت آفلاین",
"INFO_TEXT": "هنگامی که از برنامه یا پیشخوان استفاده نمی‌کنید، به سیستم اجازه دهید به طور خودکار شما را به صورت آفلاین علامت گذاری کند."
},
"DOCS": "اسناد را بخوانید"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "نام شرکت",
"LABEL": "عنوان حساب",
"PLACEHOLDER": "شرکت ایران ناسیونال"
},
"SUBMIT": "ثبت"

View file

@ -2,13 +2,11 @@
"REGISTER": {
"TRY_WOOT": "ثبت‌نام حساب‌کاربری",
"TITLE": "ثبت نام",
"TESTIMONIAL_HEADER": "تنها چیزی که لازم است یک قدم برای حرکت به جلو است",
"TESTIMONIAL_CONTENT": "شما یک قدم تا جذب مشتریان خود، حفظ آنها و یافتن مشتریان جدید فاصله دارید.",
"TERMS_ACCEPT": "با ثبت نام، اعلام می‌دارید که <a href=\"https://www.chatwoot.com/terms\">قوانین</a> و <a href=\"https://www.chatwoot.com/privacy-policy\">شرایط استفاده</a> از این نرم افزار را تایید کرده و می‌پذیرید",
"COMPANY_NAME": {
"LABEL": "نام شرکت",
"PLACEHOLDER": "نام شرکت خود را وارد کنید. به عنوان مثال: شرکت وین",
"ERROR": "نام شرکت خیلی کوتاه است"
"ACCOUNT_NAME": {
"LABEL": "نام حساب‌کاربری",
"PLACEHOLDER": "نام حساب‌کاربری را وارد کنید. به عنوان مثال: شرکت وین",
"ERROR": "نام حساب‌کاربری خیلی کوتاه است"
},
"FULL_NAME": {
"LABEL": "نام کامل",
@ -18,7 +16,7 @@
"EMAIL": {
"LABEL": "ایمیل کاری",
"PLACEHOLDER": "ایمیل کاری خود را وارد کنید به عنوان مثال: jafari@wayne.enterprises",
"ERROR": "لطفا یک آدرس ایمیل کاری معتبر وارد کنید"
"ERROR": "آدرس ایمیل معتبر نیست"
},
"PASSWORD": {
"LABEL": "رمز عبور",

View file

@ -41,10 +41,6 @@
"NO_RESPONSE": "No response",
"RATING_TITLE": "Arvio",
"FEEDBACK_TITLE": "Palaute",
"CARD": {
"SHOW_LABELS": "Show labels",
"HIDE_LABELS": "Hide labels"
},
"HEADER": {
"RESOLVE_ACTION": "Ratkaise",
"REOPEN_ACTION": "Uudelleenavaa",

View file

@ -1,6 +0,0 @@
{
"EMOJI": {
"PLACEHOLDER": "Search emojis",
"NOT_FOUND": "No emoji match your search"
}
}

View file

@ -134,7 +134,7 @@
"PHONE_NUMBER": {
"LABEL": "Puhelinnumero",
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
},
"API_CALLBACK": {
"TITLE": "Callback URL",
@ -185,7 +185,7 @@
"PHONE_NUMBER": {
"LABEL": "Puhelinnumero",
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
},
"SUBMIT_BUTTON": "Create Bandwidth Channel",
"API": {
@ -214,7 +214,7 @@
"PHONE_NUMBER": {
"LABEL": "Puhelinnumero",
"PLACEHOLDER": "Ole hyvä ja syötä puhelinnumero, josta viesti lähetetään.",
"ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
"ERROR": "Anna kelvollinen arvo. Puhelinnumeron pitäisi alkaa `+` merkillä."
},
"PHONE_NUMBER_ID": {
"LABEL": "Phone number ID",

View file

@ -103,9 +103,7 @@
"Paikalla",
"Kiireinen",
"Poissa"
],
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again"
]
},
"EMAIL": {
"LABEL": "Sinun sähköpostiosoitteesi",
@ -136,7 +134,6 @@
"SELECTOR_SUBTITLE": "Valitse tili tästä luettelosta",
"PROFILE_SETTINGS": "Profiilin asetukset",
"KEYBOARD_SHORTCUTS": "Keyboard Shortcuts",
"SUPER_ADMIN_CONSOLE": "Super Admin Console",
"LOGOUT": "Kirjaudu ulos"
},
"APP_GLOBAL": {
@ -229,10 +226,6 @@
"CATEGORY": "Category",
"CATEGORY_EMPTY_MESSAGE": "No categories found"
},
"SET_AUTO_OFFLINE": {
"TEXT": "Mark offline automatically",
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard."
},
"DOCS": "Read docs"
},
"BILLING_SETTINGS": {
@ -264,7 +257,7 @@
},
"FORM": {
"NAME": {
"LABEL": "Yrityksen nimi",
"LABEL": "Tilin nimi",
"PLACEHOLDER": "Wayne Enterprises"
},
"SUBMIT": "Lähetä"

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