TT#105551 Convert key based i18n translations to gettext based ones

AC:
Can see the keys replaced by the actual english translation in the code
Can see the language files, including the english one, using the english translation as keys
Can see no more nested structure but flat a one only
Change-Id: I3c3fc18ff91d972cb592c8cab43b66da16193a1c
mr9.3
Sergii Leonenko 4 years ago
parent a10897307e
commit d02f82e69c

@ -69,8 +69,8 @@ In order to add a new page you need to go along the following steps:
path: '/user/new-feature',
component: CscPageNewFeature,
meta: {
title: i18n.t('pages.newFeature.title'),
subtitle: i18n.t('navigation.newFeature.subTitle')
title: i18n.t('New features'),
subtitle: i18n.t('New features sub-title')
}
}
```
@ -83,8 +83,8 @@ In order to add a new page you need to go along the following steps:
{
to: '/user/new-feature',
icon: 'fancy_icon',
label: this.$t('navigation.newFeature.title'),
sublabel: this.$t('navigation.newFeature.subTitle'),
label: this.$t('New features'),
sublabel: this.$t('New features sub-title'),
visible: true
}
```

@ -501,13 +501,13 @@ export function getDaysFromRange (options) {
let fromDay = options.fromDay
const toDay = options.toDay + 1
const wdayMap = {
1: i18n.t('pages.callForward.times.sunday'),
2: i18n.t('pages.callForward.times.monday'),
3: i18n.t('pages.callForward.times.tuesday'),
4: i18n.t('pages.callForward.times.wednesday'),
5: i18n.t('pages.callForward.times.thursday'),
6: i18n.t('pages.callForward.times.friday'),
7: i18n.t('pages.callForward.times.saturday')
1: i18n.t('Sunday'),
2: i18n.t('Monday'),
3: i18n.t('Tuesday'),
4: i18n.t('Wednesday'),
5: i18n.t('Thursday'),
6: i18n.t('Friday'),
7: i18n.t('Saturday')
}
const days = []
while (fromDay < toDay) {

@ -23,7 +23,7 @@ export async function setFaxServerField (options) {
// searching for duplicates
const destinationsIds = options.value.map(d => d.destination)
if ((new Set(destinationsIds)).size !== destinationsIds.length) {
throw Error(i18n.t('faxSettings.destinationEmailExists'))
throw Error(i18n.t('The Destination Email is already used'))
}
}
return patchReplaceFull({
@ -50,7 +50,7 @@ export async function setMailToFaxSettingField (options) {
// searching for duplicates
const destinationsIds = options.value.map(d => d.destination)
if ((new Set(destinationsIds)).size !== destinationsIds.length) {
throw Error(i18n.t('faxSettings.notifyEmailExists'))
throw Error(i18n.t('The Notify Email is already used'))
}
}
return patchReplaceFull({

@ -30,7 +30,7 @@ export function getUnassignedSlots (id) {
const slotOptions = []
unassignedSlots.forEach((slot) => {
slotOptions.push({
label: `${i18n.t('speedDial.slot')} ${slot}`,
label: `${i18n.t('Slot')} ${slot}`,
value: slot
})
})

@ -1,9 +1,9 @@
export default ({ Vue, app }) => {
Vue.prototype.$faxQualityOptions = [
{ label: app.i18n.t('communication.quality.normal'), value: 'normal' },
{ label: app.i18n.t('communication.quality.fine'), value: 'fine' },
{ label: app.i18n.t('communication.quality.super'), value: 'super' }
{ label: app.i18n.t('Normal'), value: 'normal' },
{ label: app.i18n.t('Fine'), value: 'fine' },
{ label: app.i18n.t('Super'), value: 'super' }
]
Vue.prototype.$faxQualityOptionsDefault = Vue.prototype.$faxQualityOptions[0]
}

@ -41,7 +41,7 @@ export default ({ app, router, store }) => {
})
router.afterEach((to, from) => {
const mainTitle = app.i18n.t('title')
const mainTitle = app.i18n.t('CSC')
let title = _.get(to, 'meta.title', '')
const subTitle = _.get(to, 'meta.subtitle', '')
if (mainTitle !== '') {

@ -7,7 +7,7 @@ export default ({ Vue, app }) => {
let message = null
_.forEach(def.$params, (param, paramName) => {
if (def[paramName] === false) {
message = app.i18n.t('validators.' + paramName)
message = app.i18n.t('validators.' + paramName) // TODO: does it work? we should recheck translations
}
})
return message

@ -4,7 +4,7 @@
:value="value"
:loading="loading"
title-icon="vpn_key"
:title="$t('pages.login.changePassword')"
:title="$t('Change password')"
class="csc-pbx-password-dialog"
@input="$emit('input')"
@hide="$emit('dialog-closed')"
@ -29,7 +29,7 @@
:loading="loading"
@click="$refs.changePasswordForm.submit()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</csc-dialog>

@ -18,7 +18,7 @@
flat
@click="confirm"
>
{{ $t('buttons.confirm') }}
{{ $t('Confirm') }}
</q-btn>
</csc-dialog>
</template>

@ -45,7 +45,7 @@
icon="clear"
color="white"
flat
:label="$t('buttons.cancel')"
:label="$t('Cancel')"
@click="cancel"
/>
<slot

@ -2,14 +2,14 @@
<csc-dialog
ref="dialog"
title-icon="vpn_key"
:title="$t('userSettings.changePasswordDialogTitle')"
:title="$t('Change login password')"
>
<template
v-slot:actions
>
<q-btn
icon="check"
:label="$t('buttons.confirm')"
:label="$t('Confirm')"
:disable="!ready"
unelevated
text-color="dark"

@ -4,7 +4,7 @@
v-if="!menuMinimized"
class="q-pr-md q-pl-md q-pt-xs q-pb-xs text-subtitle2"
>
{{ $t('navigation.newFeatures.header.title') }}
{{ $t('New features') }}
</div>
<csc-main-menu
:items="items"
@ -64,7 +64,7 @@ export default {
{
to: '/user/new-call-forward',
icon: 'phone_forwarded',
label: this.$t('navigation.callForward.title'),
label: this.$t('Call Forwarding'),
visible: true
}
]

@ -61,14 +61,14 @@ export default {
{
to: '/conference',
icon: 'videocam',
label: this.$t('navigation.conference.title'),
label: this.$t('Join conference'),
visible: this.isRtcEngineUiVisible
},
{
to: '/user/conversations',
icon: 'question_answer',
label: this.$t('navigation.conversations.title'),
sublabel: this.$t('navigation.conversations.subTitle'),
label: this.$t('Conversations'),
sublabel: this.$t('Calls, Faxes, VoiceMails'),
visible: true
},
{
@ -85,7 +85,7 @@ export default {
{
to: '/user/voicebox',
icon: 'voicemail',
label: this.$t('navigation.voicebox.title'),
label: this.$t('Voicebox'),
visible: true
},
{
@ -109,19 +109,19 @@ export default {
{
to: '/user/call-blocking/privacy',
icon: 'fas fa-user-secret',
label: this.$t('navigation.callBlocking.privacy'),
label: this.$t('Privacy'),
visible: true
},
{
to: '/user/speeddial',
icon: 'touch_app',
label: this.$t('navigation.speeddial.title'),
label: this.$t('Speed Dial'),
visible: true
},
{
to: '/user/reminder',
icon: 'notification_important',
label: this.$t('navigation.reminder.title'),
label: this.$t('Reminder'),
visible: true
}
]
@ -129,49 +129,49 @@ export default {
{
to: '/user/fax-settings',
icon: 'fas fa-fax',
label: this.$t('navigation.faxSettings.title'),
label: this.$t('Fax Settings'),
visible: this.hasFaxCapability
},
{
icon: 'miscellaneous_services',
label: this.$t('navigation.pbxConfiguration.title'),
label: this.$t('PBX Configuration'),
visible: this.isPbxAdmin,
opened: this.isPbxConfiguration,
children: [
{
to: '/user/pbx-configuration/seats',
icon: 'person',
label: this.$t('navigation.pbxConfiguration.seats'),
label: this.$t('Seats'),
visible: true
},
{
to: '/user/pbx-configuration/groups',
icon: 'group',
label: this.$t('navigation.pbxConfiguration.groups'),
label: this.$t('Groups'),
visible: true
},
{
to: '/user/pbx-configuration/devices',
icon: 'fas fa-fax',
label: this.$t('navigation.pbxConfiguration.devices'),
label: this.$t('Devices'),
visible: true
},
{
to: '/user/pbx-configuration/call-queues',
icon: 'filter_none',
label: this.$t('navigation.pbxConfiguration.callQueues'),
label: this.$t('Call Queues'),
visible: true
},
{
to: '/user/pbx-configuration/sound-sets',
icon: 'queue_music',
label: this.$t('navigation.pbxConfiguration.soundSets'),
label: this.$t('Sound Sets'),
visible: true
},
{
to: '/user/pbx-configuration/ms-configs',
icon: 'arrow_forward',
label: this.$t('navigation.pbxConfiguration.msConfigs'),
label: this.$t('Manager Secretary'),
visible: true
}
]
@ -179,7 +179,7 @@ export default {
{
to: '/user/pbx-settings',
icon: 'settings',
label: this.$t('navigation.pbxSettings.title'),
label: this.$t('PBX Settings'),
visible: this.isPbxEnabled
}
]

@ -2,7 +2,7 @@
<csc-popup-menu-item
icon="delete"
color="negative"
:label="$t('buttons.remove')"
:label="$t('Remove')"
@click="$emit('click', $event)"
/>
</template>

@ -2,7 +2,7 @@
<csc-popup-menu-item
icon="call"
color="primary"
:label="$t('pages.conversations.buttons.call')"
:label="$t('Call back')"
@click="$emit('click', $event)"
/>
</template>

@ -18,7 +18,7 @@
flat
@click="remove"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
</csc-dialog>
</template>

@ -2,7 +2,7 @@
<csc-dialog
:value="value"
title-icon="vpn_key"
:title="$t('pages.login.forgotPassword')"
:title="$t('Forgot password?')"
@input="$emit('input')"
@hide="resetForm()"
>
@ -16,7 +16,7 @@
v-model.trim="username"
clearable
dense
:label="$t('pages.login.username')"
:label="$t('Username')"
type="text"
:error="$v.username.$error"
:error-message="$errorMessage($v.username)"
@ -41,7 +41,7 @@
icon="check"
unelevated
color="primary"
:label="$t('toasts.send')"
:label="$t('Send')"
:loading="newPasswordRequesting"
:disable="!username || username.length < 1 || newPasswordRequesting"
@click="submit()"
@ -105,7 +105,7 @@ export default {
position: 'top',
color: 'negative',
icon: 'error',
message: this.$t('toasts.errorPasswordReset')
message: this.$t('There was an error, please retry later')
})
} finally {
this.$emit('close')

@ -10,13 +10,13 @@
<q-card-section
class="text-h6"
>
{{ $t('communication.sendFax') }}
{{ $t('Send Fax') }}
</q-card-section>
<q-card-section>
<csc-call-input
v-if="value"
v-model="form.destination"
:label="$t('communication.label.destination')"
:label="$t('Destination Number')"
@submit="sendFax"
@error="error"
/>
@ -25,13 +25,13 @@
emit-value
map-options
:options="$faxQualityOptions"
:label="$t('communication.label.quality')"
:label="$t('Quality')"
/>
<q-input
v-model="form.pageHeader"
clearable
type="text"
:label="$t('communication.label.pageHeader')"
:label="$t('Page Header')"
:error="$v.form.pageHeader.$error"
:error-message="pageHeaderErrorMessage"
@input="$v.form.pageHeader.$touch"
@ -43,7 +43,7 @@
type="textarea"
:max-height="100"
:min-rows="10"
:label="$t('communication.label.content')"
:label="$t('Content')"
:error="$v.form.data.$error"
:error-message="dataErrorMessage"
@input="$v.form.data.$touch"
@ -59,14 +59,14 @@
flat
icon="clear"
color="default"
:label="$t('communication.cancel')"
:label="$t('Cancel')"
/>
<q-btn
flat
color="primary"
icon="send"
:disable="formDisabled"
:label="$t('communication.send')"
:label="$t('Send')"
@click="sendFax"
/>
</q-card-actions>
@ -78,7 +78,7 @@
<!-- class="upload-label"-->
<!-- >-->
<!-- <div class="upload-label">-->
<!-- {{ $t('communication.label.faxFile') }}-->
<!-- {{ $t('Fax File') }}-->
<!-- </div>-->
<!-- <q-btn-->
<!-- flat-->
@ -87,7 +87,7 @@
<!-- class="upload-button"-->
<!-- @click="$refs.faxUpload.click()"-->
<!-- >-->
<!-- {{ $t('buttons.select') }}-->
<!-- {{ $t('Select') }}-->
<!-- </q-btn>-->
<!-- <span class="upload-filename">-->
<!-- {{ selectedFile }}-->
@ -124,7 +124,7 @@
<!-- color="default"-->
<!-- @mousedown.native="hideModal"-->
<!-- >-->
<!-- {{ $t('communication.cancel') }}-->
<!-- {{ $t('Cancel') }}-->
<!-- </q-btn>-->
<!-- <q-btn-->
<!-- flat-->
@ -133,7 +133,7 @@
<!-- :disable="formDisabled"-->
<!-- @click="sendFax"-->
<!-- >-->
<!-- {{ $t('communication.send') }}-->
<!-- {{ $t('Send') }}-->
<!-- </q-btn>-->
</q-dialog>
</template>
@ -204,20 +204,20 @@ export default {
!this.hasContentToSend
},
pageHeaderErrorMessage () {
return this.$t('validationErrors.maxLength', {
field: this.$t('communication.label.pageHeader'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Page Header'),
maxLength: this.$v.form.pageHeader.$params.maxLength.max
})
},
dataErrorMessage () {
if (!this.$v.form.data.required) {
return this.$t('validationErrors.fieldRequiredXor', {
fieldOne: this.$t('communication.label.content'),
fieldTwo: this.$t('communication.label.file')
return this.$t('{fieldOne} or {fieldTwo} is required', {
fieldOne: this.$t('Content'),
fieldTwo: this.$t('File')
})
} else if (!this.$v.form.data.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('communication.label.content'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Content'),
maxLength: this.$v.form.data.$params.maxLength.max
})
} else {
@ -225,9 +225,9 @@ export default {
}
},
fileErrorMessage () {
return this.$t('validationErrors.fieldRequiredXor', {
fieldOne: this.$t('communication.label.file'),
fieldTwo: this.$t('communication.label.content')
return this.$t('{fieldOne} or {fieldTwo} is required', {
fieldOne: this.$t('File'),
fieldTwo: this.$t('Content')
})
}
},
@ -253,7 +253,7 @@ export default {
sendFax () {
if (this.$v.form.$error ||
this.destinationError) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
} else {
this.$store.dispatch('communication/createFax', this.form)
}

@ -10,7 +10,7 @@
dark
dense
no-error-icon
:placeholder="$t('pages.newCallForward.dateRangeStartTime')"
:placeholder="$t('Start time')"
class="q-pa-sm"
@click="$refs.timeFromPopup.show()"
>
@ -36,7 +36,7 @@
>
<q-btn
v-close-popup
:label="$t('buttons.close')"
:label="$t('Close')"
color="primary"
flat
/>
@ -54,7 +54,7 @@
dark
dense
no-error-icon
:placeholder="$t('pages.newCallForward.dateRangeEndTime')"
:placeholder="$t('End time')"
class="q-pa-sm"
@click="$refs.timeToPopup.show()"
>
@ -80,7 +80,7 @@
>
<q-btn
v-close-popup
:label="$t('buttons.close')"
:label="$t('Close')"
color="primary"
flat
/>
@ -145,7 +145,7 @@ export default {
}
} else {
this.timeTo = null
showGlobalError(this.$t('pages.newCallForward.officeHoursInvalidTimerange'))
showGlobalError(this.$t('Please select a valid timerange'))
}
}
},

@ -15,7 +15,7 @@
</q-item-section>
<q-item-section>
<q-item-label>
{{ $t('numbers') }}
{{ $t('Numbers') }}
</q-item-label>
<q-item-label
caption
@ -50,7 +50,7 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>{{ $t('userMenu.settings') }}</q-item-label>
<q-item-label>{{ $t('Settings') }}</q-item-label>
</q-item-section>
</q-item>
<q-item
@ -67,7 +67,7 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>{{ $t('userMenu.logout') }}</q-item-label>
<q-item-label>{{ $t('Logout') }}</q-item-label>
</q-item-section>
</q-item>
</q-list>

@ -6,7 +6,7 @@
>
<div class="column col-lg-4 col-xl-4 col-md-3 gt-sm" />
<div class="column col-12 col-md-6 col-lg-4 col-xl-4">
{{ $t('notFound') }}
{{ $t('404 Not Found') }}
</div>
<div class="column col-lg-4 col-xl-4 col-md-3 gt-sm" />
</div>

@ -1,6 +1,6 @@
<template>
<csc-cf-group-condition
:title="$t('')"
title=" "
v-on="$listeners"
>
<q-list

@ -1,6 +1,6 @@
<template>
<csc-cf-group-condition
:title="$t(title)"
:title="title"
:loading="$wait.is('csc-cf-source-set-create')"
v-bind="$attrs"
v-on="$listeners"

@ -1,6 +1,6 @@
<template>
<csc-cf-group-condition
:title="$t(title)"
:title="title"
:loading="$wait.is('csc-cf-source-set-create')"
v-bind="$attrs"
v-on="$listeners"

@ -7,7 +7,7 @@
<q-btn
v-for="(day, index) in days"
:key="day.value"
:label="$t(day.label)"
:label="day.label"
:class="(index > 0)?'q-ml-sm':''"
round
no-caps
@ -31,7 +31,7 @@
v-for="(day) in days"
:key="day.value"
:name="'tab-' + day.value"
:label="$t(day.label)"
:label="day.label"
class="text-primary no-padding"
inline-label
outside-arrows

@ -47,15 +47,15 @@
<span
v-if="isInitiating"
>
{{ $t('call.initiating', {number: callNumberFormatted}) }}</span>
{{ $t('Calling {number}...', {number: callNumberFormatted}) }}</span>
<span
v-else-if="isRinging"
>
{{ $t('call.ringing', {number: callNumberFormatted}) }}</span>
{{ $t('Ringing at {number}...', {number: callNumberFormatted}) }}</span>
<span
v-else-if="isIncoming"
>
{{ $t('call.incoming', {number: callNumberFormatted}) }}</span>
{{ $t('Incoming call from {number}...', {number: callNumberFormatted}) }}</span>
</div>
<div
v-else-if="isEnded"
@ -86,7 +86,7 @@
size="24px"
/>
<div>
{{ $t('call.established', {number: callNumberFormatted}) }}
{{ $t('In call with {number}', {number: callNumberFormatted}) }}
</div>
<q-btn
v-if="!dialpadOpened"
@ -287,7 +287,7 @@
<div
class="csc-call-info-phrase"
>
{{ $t('call.' + callState + 'Short') }}
{{ callStateTitle }}
</div>
<div
class="csc-call-info-number"
@ -343,6 +343,7 @@ import {
} from 'src/helpers/ui'
import CscMedia from '../CscMedia'
import CscCallDialpad from '../CscCallDialpad'
import { CallStateTitle } from 'src/store/call'
export default {
name: 'CscCall',
components: {
@ -523,6 +524,9 @@ export default {
} else {
return 'faded'
}
},
callStateTitle () {
return CallStateTitle[this.callState]
}
},
watch: {

@ -3,7 +3,7 @@
ref="inputField"
clearable
type="text"
:label="$t('call.number')"
:label="$t('Phone number')"
:value="value"
:disable="!enabled"
:error="$v.phoneNumber.$error"
@ -65,22 +65,22 @@ export default {
computed: {
errorMessage () {
if (!this.$v.phoneNumber.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('call.number')
return this.$t('{field} is required', {
field: this.$t('Phone number')
})
} else if (!this.$v.phoneNumber.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('call.number'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Phone number'),
maxLength: this.$v.phoneNumber.$params.maxLength.max
})
} else if (!this.$v.phoneNumber.userInfo) {
return this.$t('validationErrors.inputValidNumber')
return this.$t('Input a valid phone number')
} else {
return ''
}
},
helperMessage () {
return this.$t('validationErrors.inputNumber')
return this.$t('Input a phone number')
}
},
watch: {

@ -43,16 +43,16 @@ export default {
computed: {
errorMessage () {
if (!this.$v.inputValue.required) {
return this.$t('validationErrors.fieldRequired', {
return this.$t('{field} is required', {
field: this.label
})
} else if (!this.$v.inputValue.maxLength) {
return this.$t('validationErrors.maxLength', {
return this.$t('{field} must have at most {maxLength} letters', {
field: this.label,
maxLength: this.$v.inputValue.$params.maxLength.max
})
} else if (!this.$v.inputValue.userInfo) {
return this.$t('validationErrors.inputValidNumber')
return this.$t('Input a valid phone number')
} else {
return ''
}

@ -8,7 +8,7 @@
clearable
type="password"
hide-bottom-space
:label="$t('pbxConfig.typePassword')"
:label="$t('Password')"
:disable="loading"
:error="$v.password.$error"
:error-message="errorMessagePass"
@ -27,7 +27,7 @@
clearable
type="password"
hide-bottom-space
:label="$t('pbxConfig.retypePassword')"
:label="$t('Password Retype')"
:disable="loading"
:error="$v.passwordRetype.$error"
:error-message="errorMessagePassRetype"
@ -83,14 +83,14 @@ export default {
computed: {
errorMessagePass () {
if (!this.$v.password.passwordStrength) {
return this.$t('pbxConfig.errorPasswordStrength')
return this.$t('Password is not strong enough')
} else {
return ''
}
},
errorMessagePassRetype () {
if (!this.$v.passwordRetype.sameAsPassword) {
return this.$t('pbxConfig.errorPasswordNotEqual')
return this.$t('Passwords must be equal')
} else {
return ''
}

@ -5,7 +5,7 @@
color="white"
@click="click"
>
{{ $t('buttons.reset') }}
{{ $t('Reset') }}
</q-btn>
</template>

@ -5,7 +5,7 @@
color="primary"
@click="click"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</template>

@ -4,7 +4,7 @@
color="white"
flat
dense
:label="$t('buttons.reset')"
:label="$t('Reset')"
:disable="$attrs.loading"
v-bind="$attrs"
v-on="$listeners"

@ -4,7 +4,7 @@
color="primary"
flat
dense
:label="$t('buttons.save')"
:label="$t('Save')"
:disable="$attrs.loading"
v-bind="$attrs"
v-on="$listeners"

@ -20,7 +20,7 @@
text-color="dark"
size="sm"
unelevated
:label="$t('buttons.select')"
:label="$t('Select')"
@click="$refs.fileInput.$el.click()"
/>
<q-btn
@ -31,7 +31,7 @@
text-color="dark"
size="sm"
unelevated
:label="$t('buttons.reset')"
:label="$t('Reset')"
@click="selectedFile = null; $refs.fileInput.$el.value = null"
/>
</template>

@ -8,7 +8,7 @@
v-bind="$attrs"
generate
clearable
:label="$t('pbxConfig.typePassword')"
:label="$t('Password')"
@input="inputPassword"
@generated="passwordGenerated"
@clear="passwordClear"
@ -28,7 +28,7 @@
ref="passwordRetype"
v-model="passwordRetype"
v-bind="$attrs"
:label="$t('pbxConfig.retypePassword')"
:label="$t('Password Retype')"
:error="$v.passwordRetype.$error"
:error-message="errorMessagePasswordRetype"
clearable
@ -82,7 +82,7 @@ export default {
computed: {
errorMessagePasswordRetype () {
if (!this.$v.passwordRetype.sameAsPassword) {
return this.$t('pbxConfig.errorPasswordNotEqual')
return this.$t('Passwords must be equal')
} else {
return ''
}

@ -33,7 +33,7 @@
color="primary"
flat
dense
:label="$t('buttons.undo')"
:label="$t('Undo')"
:disable="$attrs.loading"
@click="$emit('undo', $event)"
/>
@ -43,7 +43,7 @@
color="primary"
flat
dense
:label="$t('buttons.save')"
:label="$t('Save')"
:disable="$attrs.loading"
@click="$emit('save', $event)"
/>

@ -33,7 +33,7 @@
color="primary"
flat
dense
:label="$t('buttons.select')"
:label="$t('Select')"
:disable="isPlaying"
@click="$refs.fileUpload.click()"
/>
@ -43,7 +43,7 @@
color="negative"
flat
dense
:label="$t('buttons.remove')"
:label="$t('Remove')"
:disable="isPlaying"
@click="remove"
/>
@ -53,7 +53,7 @@
color="primary"
flat
dense
:label="$t('buttons.reset')"
:label="$t('Reset')"
:disable="isPlaying"
@click="cancel"
/>
@ -63,7 +63,7 @@
color="primary"
flat
dense
:label="$t('buttons.upload')"
:label="$t('Upload')"
:disable="isPlaying"
@click="upload"
/>
@ -203,9 +203,9 @@ export default {
},
removeLabel () {
if (this.deleteTerm === 'remove') {
return this.$t('buttons.removeFile')
return this.$t('Remove file')
} else {
return this.$t('buttons.resetDefaults')
return this.$t('Reset to defaults')
}
},
removeIcon () {

@ -35,13 +35,13 @@
<csc-popup-menu-item
icon="edit"
color="primary"
:label="$t('buttons.edit')"
:label="$t('Edit')"
@click="edit"
/>
<csc-popup-menu-item
icon="delete"
color="negative"
:label="$t('buttons.remove')"
:label="$t('Remove')"
@click="remove"
/>
</csc-more-menu>

@ -8,7 +8,7 @@
>
<q-item>
<q-toggle
:label="$t('callBlocking.anonymousBlocked')"
:label="$t('All anonymous incoming calls are blocked')"
:value="isAnonymousBlocked"
:disable="isAnonymousBlockRequesting"
checked-icon="block"
@ -32,7 +32,7 @@
<q-item-section>
<q-radio
:value="listMode"
:label="$t('pages.callBlocking' + suffix + '.toggleDisableLabel')"
:label="getTranslation('toggleDisableLabel')"
val="blacklist"
color="primary"
@input="updateListMode"
@ -50,7 +50,7 @@
<q-item-section>
<q-radio
:value="listMode"
:label="$t('pages.callBlocking' + suffix + '.toggleEnableLabel')"
:label="getTranslation('toggleEnableLabel')"
val="whitelist"
color="primary"
@input="updateListMode"
@ -109,7 +109,7 @@
v-else
class="row justify-center"
>
{{ $t('callBlocking.listEmptyMessage') }}
{{ $t('No numbers found') }}
</div>
</csc-page>
</template>
@ -162,16 +162,16 @@ export default {
]),
toggleButtonLabel () {
if (!this.enabled) {
return this.$i18n.t('pages.callBlocking' + this.suffix + '.toggleEnableLabel')
return this.getTranslation('toggleEnableLabel')
} else {
return this.$i18n.t('pages.callBlocking' + this.suffix + '.toggleDisableLabel')
return this.getTranslation('toggleDisableLabel')
}
},
toggleToastMessage () {
if (this.mode) {
return this.$i18n.t('pages.callBlocking' + this.suffix + '.toggleEnabledToast')
return this.getTranslation('toggleEnabledToast')
} else {
return this.$i18n.t('pages.callBlocking' + this.suffix + '.toggleDisabledToast')
return this.getTranslation('toggleDisabledToast')
}
},
suffix () {
@ -179,7 +179,7 @@ export default {
},
removeDialogMessage () {
if (this.currentRemovingIndex !== null) {
return this.$t('pages.callBlocking' + this.suffix + '.removeDialogText', {
return this.getTranslation('removeDialogText', {
number: this.numbers[this.currentRemovingIndex]
})
} else {
@ -229,7 +229,7 @@ export default {
numberDeletionConfirm (index) {
this.currentRemovingIndex = index
this.$q.dialog({
title: this.$t('pages.callBlocking' + this.suffix + '.removeDialogTitle'),
title: this.getTranslation('removeDialogTitle'),
message: this.removeDialogMessage,
color: 'primary',
cancel: true,
@ -237,6 +237,32 @@ export default {
}).onOk(data => {
this.removeNumber()
})
},
getTranslation (key, params) {
let translationsMap
switch (this.suffix) {
case 'Incoming':
translationsMap = {
toggleEnableLabel: this.$t('Only incoming calls from listed numbers are allowed'),
toggleDisableLabel: this.$t('All incoming calls from listed numbers are blocked'),
toggleEnabledToast: this.$t('All listed numbers are allowed'),
toggleDisabledToast: this.$t('All listed numbers are blocked'),
removeDialogTitle: this.$t('Remove number'),
removeDialogText: this.$t('You are about to remove the number {number}', params)
}
break
case 'Outgoing':
translationsMap = {
toggleEnableLabel: this.$t('Only outgoing calls to listed numbers are allowed'),
toggleDisableLabel: this.$t('All outgoing calls to listed numbers are blocked'),
toggleEnabledToast: this.$t('All listed numbers are allowed'),
toggleDisabledToast: this.$t('All listed numbers are blocked'),
removeDialogTitle: this.$t('Remove number'),
removeDialogText: this.$t('You are about to remove the number {number}', params)
}
break
}
return translationsMap[key]
}
}
}

@ -5,7 +5,7 @@
>
<csc-call-input
v-model="number"
:label="$t('callBlocking.number')"
:label="$t('Number')"
@submit="save"
@error="error"
/>
@ -18,7 +18,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -28,7 +28,7 @@
:disable="saveDisabled"
@click="save()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
<div
v-if="loading"
@ -48,7 +48,7 @@
icon="add"
@click="add()"
>
{{ $t('pages.callBlockingIncoming.addNumberButton') }}
{{ $t('Add number') }}
</q-btn>
</div>
</template>
@ -90,7 +90,7 @@ export default {
methods: {
save () {
if (this.numberError || this.saveDisabled) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
} else {
this.$emit('save', this.number)
}

@ -6,20 +6,20 @@
dense
color="primary"
icon="add"
:label="$t('pages.callForward.addDestinationButton')"
:label="$t('Add destination')"
>
<csc-popup-menu>
<csc-popup-menu-item
:label="$t('pages.callForward.buttons.addNumber')"
:label="$t('Add Number')"
@click="addDestinationByType('number')"
/>
<csc-popup-menu-item
:label="$t('pages.callForward.buttons.addVoicemail')"
:label="$t('Add Voicemail')"
@click="addDestinationByType('voicebox')"
/>
<csc-popup-menu-item
v-if="hasFaxCapabilityAndFaxActive && hasSendFaxFeature"
:label="$t('pages.callForward.buttons.addFax2Mail')"
:label="$t('Add Fax2Mail')"
@click="addDestinationByType('fax2mail')"
/>
</csc-popup-menu>
@ -27,7 +27,7 @@
<div v-if="isFormEnabled">
<csc-call-input
v-model="destinationForm.destination"
:label="$t('pages.callForward.destination')"
:label="$t('Destination')"
:before="beforeIconDestination"
dense
@submit="addDestination"
@ -37,8 +37,8 @@
v-model="destinationForm.timeout"
clearable
dense
:label="$t('pages.callForward.timeout')"
:suffix="$t('pages.callForward.seconds')"
:label="$t('Timeout')"
:suffix="$t('seconds')"
:error="$v.destinationForm.timeout.$error"
@input="$v.destinationForm.timeout.$touch"
@blur="$v.destinationForm.timeout.$touch"
@ -49,7 +49,7 @@
color="default"
@click="disableForm()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -58,7 +58,7 @@
:disable="$v.destinationForm.timeout.$error || destinationError"
@click="addDestination()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</div>
@ -154,16 +154,16 @@ export default {
]),
timeoutInputError () {
if (!this.$v.destinationForm.timeout.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pages.callForward.timeout')
return this.$t('{field} is required', {
field: this.$t('Timeout')
})
} else if (!this.$v.destinationForm.timeout.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pages.callForward.timeout')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Timeout')
})
} else if (!this.$v.destinationForm.timeout.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pages.callForward.timeout'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Timeout'),
minValue: this.$v.destinationForm.timeout.$params.minValue.min
})
} else {
@ -225,7 +225,7 @@ export default {
addDestination () {
if (this.$v.destinationForm.timeout.$error ||
this.destinationError) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
} else {
this.$store.dispatch('callForward/addDestination', {
form: this.destinationForm,

@ -45,7 +45,7 @@
color="default"
@click="disableForm()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
</div>
<div
@ -57,7 +57,7 @@
color="primary"
@click="addTime()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</div>
@ -85,13 +85,13 @@ export default {
data () {
return {
selectOptions: [
{ label: this.$t('pages.callForward.times.sunday'), value: 1 },
{ label: this.$t('pages.callForward.times.monday'), value: 2 },
{ label: this.$t('pages.callForward.times.tuesday'), value: 3 },
{ label: this.$t('pages.callForward.times.wednesday'), value: 4 },
{ label: this.$t('pages.callForward.times.thursday'), value: 5 },
{ label: this.$t('pages.callForward.times.friday'), value: 6 },
{ label: this.$t('pages.callForward.times.saturday'), value: 7 }
{ label: this.$t('Sunday'), value: 1 },
{ label: this.$t('Monday'), value: 2 },
{ label: this.$t('Tuesday'), value: 3 },
{ label: this.$t('Wednesday'), value: 4 },
{ label: this.$t('Thursday'), value: 5 },
{ label: this.$t('Friday'), value: 6 },
{ label: this.$t('Saturday'), value: 7 }
],
selectedWeekday: 1,
timeTo: '0:00',
@ -139,7 +139,7 @@ export default {
name: this.timeset
})
} else {
showGlobalError(this.$t('pages.callForward.times.selectValidTime'))
showGlobalError(this.$t('Select valid time'))
}
}
}

@ -2,7 +2,7 @@
<div class="dest-card">
<csc-destinations
ref="online"
:title="$t('pages.callForward.whenOnline')"
:title="$t('When I am online ...')"
:group="destinations.online"
group-name="cfu"
:timeset="timeset"
@ -14,7 +14,7 @@
class="q-mb-lg"
/>
<csc-destinations
:title="$t('pages.callForward.whenBusy')"
:title="$t('When I am busy ...')"
:group="destinations.busy"
group-name="cfb"
:timeset="timeset"
@ -23,7 +23,7 @@
class="q-mb-lg"
/>
<csc-destinations
:title="$t('pages.callForward.whenOffline')"
:title="$t('When I am offline ...')"
:group="destinations.offline"
group-name="cfna"
:timeset="timeset"
@ -93,7 +93,7 @@ export default {
showGlobalError(this.removeDestinationError)
} else if (state === 'succeeded') {
// stopLoading()
showToast(this.$t('pages.callForward.removeSuccessMessage', {
showToast(this.$t('Removed destination {destination}', {
destination: this.lastRemovedDestination
}))
this.reloadDestinations(this.timeset)
@ -107,7 +107,7 @@ export default {
showGlobalError(this.addDestinationError)
} else if (state === 'succeeded') {
// stopLoading()
showToast(this.$t('pages.callForward.addDestinationSuccessMessage', {
showToast(this.$t('Added destination {destination}', {
destination: this.lastAddedDestination
}))
this.reloadDestinations(this.timeset)
@ -136,7 +136,7 @@ export default {
showGlobalError(this.updateOwnPhoneToggleError)
} else if (state === 'succeeded') {
this.reloadDestinations(this.timeset)
showToast(this.$t('pages.callForward.updateOwnPhoneToggleSuccessMessage', {
showToast(this.$t('Own phone is {toggle}', {
toggle: this.lastOwnPhoneToggle
}))
}
@ -147,7 +147,7 @@ export default {
} else if (state === 'succeeded') {
this.$refs.online.hideModal()
this.reloadDestinations(this.timeset)
showToast(this.$t('pages.callForward.updateOwnPhoneTimeoutSuccessMessage', {
showToast(this.$t('Own phone timeout set to {timeout}', {
timeout: this.lastOwnPhoneTimeout
}))
}

@ -11,7 +11,7 @@
<csc-popup-menu-item
color="negative"
icon="delete"
:label="$t('buttons.remove')"
:label="$t('Remove')"
@click="deleteTime"
/>
</csc-more-menu>

@ -31,7 +31,7 @@
class="add-time"
@click="enableAddForm()"
>
{{ $t('pages.callForward.times.addTimeButton') }}
{{ $t('Add Time') }}
</q-btn>
</div>
</div>

@ -47,7 +47,7 @@
v-if="timesetHasDuplicate"
>
<csc-inline-alert-alert>
{{ $t('pages.callForward.times.timesetDuplicate', { timeset: timesetName }) }}
{{ $t('More than one {timeset} timeset exists. You can resolve this by resetting the {timeset} timesets.', { timeset: timesetName }) }}
<template
v-slot:action
>
@ -64,7 +64,7 @@
v-else-if="!timesetIsCompatible"
>
<csc-inline-alert-alert>
{{ $t('pages.callForward.times.timesetIncompatible', { timeset: timesetName }) }}
{{ $t('The {timeset} timeset contains incompatible values. You can resolve this by resetting the {timeset} timeset.', { timeset: timesetName }) }}
<template
v-slot:action
>
@ -81,7 +81,7 @@
v-else-if="timesetHasReverse"
>
<csc-inline-alert-alert>
{{ $t('pages.callForward.times.timesetReverse', { timeset: timesetName }) }}
{{ $t('The {timeset} timeset contain reverse order of values. You can resolve this by resetting the {timeset} timeset.', { timeset: timesetName }) }}
<template
v-slot:action
>
@ -98,7 +98,7 @@
v-show="showDefinedAlert"
>
<csc-inline-alert-warning>
{{ $t('pages.callForward.times.timesetNotDefined', { timeset: timesetName }) }}
{{ $t('The {timeset} timeset is not defined. You need to create one to be able to define call forward destinations.', { timeset: timesetName }) }}
<template
v-slot:action
>
@ -207,12 +207,12 @@ export default {
this.removeSourceState === 'requesting'
},
labelReset () {
return this.$t('pages.callForward.times.resetTimeset', {
return this.$t('Reset {timeset}', {
timeset: this.timesetName
})
},
labelAdd () {
return this.$t('pages.callForward.times.addTimeset', {
return this.$t('Add {timeset}', {
timeset: this.timesetName
})
},
@ -224,7 +224,7 @@ export default {
},
deleteTimeMessage () {
if (this.deleteTimeData !== null) {
return this.$t('pages.callForward.times.removeDialogText', {
return this.$t('You are about to remove the time entry for {day}', {
day: this.deleteTimeData.removedDay
})
} else {
@ -241,7 +241,7 @@ export default {
} else if (state === 'failed') {
showGlobalError(this.resetTimeError)
} else if (state === 'succeeded') {
showToast(this.$t('pages.callForward.times.resetSuccessMessage'))
showToast(this.$t('Reset of timesets completed'))
this.loadTimes()
}
},
@ -259,7 +259,7 @@ export default {
}
this.loadTimes()
this.loadDestinations()
showToast(this.$t('pages.callForward.times.addTimeSuccessMessage'))
showToast(this.$t('Created new timeset'))
}
},
activeTimeForm (state) {
@ -280,7 +280,7 @@ export default {
showGlobalError(this.addSourcesetError)
} else if (state === 'succeeded') {
this.$refs.sourcesets.resetForm()
showToast(this.$t('pages.callForward.sources.addSuccessMessage', {
showToast(this.$t('Created sourceset {sourceset}', {
sourceset: this.lastAddedSourceset
}))
this.loadDestinations()
@ -329,7 +329,7 @@ export default {
},
deleteTimeDialog (index) {
this.$q.dialog({
title: this.$t('pages.callForward.times.removeDialogTitle'),
title: this.$t('Remove call forward time'),
message: this.deleteTimeMessage,
color: 'negative',
cancel: true,

@ -10,12 +10,12 @@
<template
v-if="index === 0 && !ownPhoneEnabled"
>
{{ $t('pages.callForward.firstRing') }}
{{ $t('first ring') }}
</template>
<template
v-else
>
{{ $t('pages.callForward.thenRing') }}
{{ $t('then ring') }}
</template>
</q-item-label>
<q-item-label
@ -25,7 +25,7 @@
<template
v-if="isNonTerminating(destinationObject.destination)"
>
{{ $t('pages.callForward.for') }} {{ destinationObject.timeout }} {{ $t('pages.callForward.secs') }}
{{ $t('for') }} {{ destinationObject.timeout }} {{ $t('secs') }}
</template>
</q-item-label>
</q-item-section>
@ -35,10 +35,10 @@
<!-- no-wrap-->
<!-- >-->
<!-- <span v-if="index === 0 && !ownPhoneEnabled">-->
<!-- {{ $t('pages.callForward.firstRing') }}-->
<!-- {{ $t('first ring') }}-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- {{ $t('pages.callForward.thenRing') }}-->
<!-- {{ $t('then ring') }}-->
<!-- </span>-->
<!-- -->
<!-- <span>-->
@ -46,18 +46,18 @@
<!-- </span>-->
<!-- <span v-if="isNonTerminating(destinationObject.destination)">-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.for') }}-->
<!-- {{ $t('for') }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ destinationObject.timeout }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.secs') }}-->
<!-- {{ $t('secs') }}-->
<!-- </span>-->
<!-- </span>-->
<!-- -->
<!-- <q-tooltip v-if="destinationObject.terminated">-->
<!-- {{ $t('pages.callForward.terminatedTooltip') }}-->
<!-- {{ $t('This destination comes after a terminating destinations, and is therefore inactive.') }}-->
<!-- </q-tooltip>-->
<!-- -->
<!-- </q-item-section>-->
@ -69,35 +69,35 @@
<!-- <div>-->
<!-- <span v-if="!isNonTerminating(destinationObject.destination)">-->
<!-- <span v-if="index === 0 && !ownPhoneEnabled">-->
<!-- {{ $t('pages.callForward.firstRing') }}-->
<!-- {{ $t('first ring') }}-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- {{ $t('pages.callForward.thenRing') }}-->
<!-- {{ $t('then ring') }}-->
<!-- </span>-->
<!-- </span>-->
<!-- {{ destination.destination | destinationFormat }}-->
<!-- </div>-->
<!-- <div>-->
<!-- <span v-if="index === 0 && isNonTerminating(destinationObject.destination) && !ownPhoneEnabled">-->
<!-- {{ $t('pages.callForward.firstRing') }}-->
<!-- {{ $t('first ring') }}-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- {{ $t('pages.callForward.thenRing') }}-->
<!-- {{ $t('then ring') }}-->
<!-- </span>-->
<!-- <span v-if="isNonTerminating(destinationObject.destination)">-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.for') }}-->
<!-- {{ $t('for') }}-->
<!-- </span>-->
<!-- <span class="dest-values">-->
<!-- {{ destination.timeout }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.secs') }}-->
<!-- {{ $t('secs') }}-->
<!-- </span>-->
<!-- </span>-->
<!-- </div>-->
<!-- <q-tooltip v-if="destinationObject.terminated">-->
<!-- {{ $t('pages.callForward.terminatedTooltip') }}-->
<!-- {{ $t('This destination comes after a terminating destinations, and is therefore inactive.') }}-->
<!-- </q-tooltip>-->
<!-- </q-item-section>-->
<q-item-section
@ -108,20 +108,20 @@
v-if="destinations.length > 1 && !hasNoUpOption(index)"
icon="keyboard_arrow_up"
color="primary"
:label="$t('buttons.moveUp')"
:label="$t('Move up')"
@click="moveDestination('up', index)"
/>
<csc-popup-menu-item
v-if="destinations.length > 1 && !hasNoDownOption(index)"
icon="keyboard_arrow_down"
color="primary"
:label="$t('buttons.moveDown')"
:label="$t('Move down')"
@click="moveDestination('down', index)"
/>
<csc-popup-menu-item
icon="delete"
color="negative"
:label="$t('buttons.remove')"
:label="$t('Remove')"
@click="deleteDestination(index)"
/>
</csc-more-menu>
@ -134,7 +134,7 @@
<!-- v-if="destinations.length > 1 && !hasNoUpOption(index)"-->
<!-- @click="moveDestination('up', index), $refs.popover[index].close()"-->
<!-- >-->
<!-- <q-item-main :label="$t('buttons.moveUp')" />-->
<!-- <q-item-main :label="$t('Move up')" />-->
<!-- <q-item-side-->
<!-- icon="keyboard_arrow_up"-->
<!-- color="white"-->
@ -144,14 +144,14 @@
<!-- v-if="destinations.length > 1 && !hasNoDownOption(index)"-->
<!-- @click="moveDestination('down', index), $refs.popover[index].close()"-->
<!-- >-->
<!-- <q-item-main :label="$t('buttons.moveDown')" />-->
<!-- <q-item-main :label="$t('Move down')" />-->
<!-- <q-item-side-->
<!-- icon="keyboard_arrow_down"-->
<!-- color="white"-->
<!-- />-->
<!-- </q-item>-->
<!-- <q-item @click="deleteDestination(index), $refs.popover[index].close()">-->
<!-- <q-item-main :label="$t('buttons.remove')" />-->
<!-- <q-item-main :label="$t('Remove')" />-->
<!-- <q-item-side-->
<!-- icon="delete"-->
<!-- color="negative"-->
@ -272,8 +272,8 @@ export default {
const isLastDestination = this.destinations.length === 1
clonedDestinations.splice(indexInt, 1)
this.$q.dialog({
title: this.$t('pages.callForward.removeDialogTitle'),
message: this.$t('pages.callForward.removeDialogText', {
title: this.$t('Remove call forward destination'),
message: this.$t('You are about to remove the destination {destination}', {
destination: removeDestination
}),
color: 'primary',

@ -34,43 +34,43 @@
overline
class="text-uppercase"
>
{{ $t('pages.callForward.firstRing') }} {{ $t('pages.callForward.ownPhone') }}
{{ $t('first ring') }} {{ $t('own phone') }}
</q-item-label>
<q-item-label
v-if="ownPhone"
class="text-subtitle2"
>
{{ $t('pages.callForward.for') }} {{ ownPhoneTimeout || 0 }} {{ $t('pages.callForward.secs') }}
{{ $t('for') }} {{ ownPhoneTimeout || 0 }} {{ $t('secs') }}
</q-item-label>
<q-item-label
v-if="!ownPhone"
overline
class="text-uppercase"
>
{{ $t('pages.callForward.ownPhoneDisabled') }}
{{ $t('do not ring own phone') }}
</q-item-label>
<!-- <div-->
<!-- v-if="!isMobile"-->
<!-- >-->
<!-- <span v-if="ownPhone">-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.firstRing') }}-->
<!-- {{ $t('first ring') }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.ownPhone') }}-->
<!-- {{ $t('own phone') }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.for') }}-->
<!-- {{ $t('for') }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ ownPhoneTimeout || 0 }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.secs') }}-->
<!-- {{ $t('secs') }}-->
<!-- </span>-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- {{ $t('pages.callForward.ownPhoneDisabled') }}-->
<!-- {{ $t('do not ring own phone') }}-->
<!-- </span>-->
<!-- </div>-->
@ -80,32 +80,32 @@
<!-- <div-->
<!-- v-if="ownPhone"-->
<!-- >-->
<!-- {{ $t('pages.callForward.ownPhone') }}-->
<!-- {{ $t('own phone') }}-->
<!-- </div>-->
<!-- <div-->
<!-- v-else-->
<!-- >-->
<!-- {{ $t('pages.callForward.ownPhoneDisabled') }}-->
<!-- {{ $t('do not ring own phone') }}-->
<!-- </div>-->
<!-- <div-->
<!-- v-if="ownPhone"-->
<!-- >-->
<!-- <span v-if="ownPhone">-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.firstRing') }}-->
<!-- {{ $t('first ring') }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.for') }}-->
<!-- {{ $t('for') }}-->
<!-- </span>-->
<!-- <span class="dest-values">-->
<!-- {{ ownPhoneTimeout || 0 }}-->
<!-- </span>-->
<!-- <span>-->
<!-- {{ $t('pages.callForward.secs') }}-->
<!-- {{ $t('secs') }}-->
<!-- </span>-->
<!-- </span>-->
<!-- <span v-else>-->
<!-- {{ $t('pages.callForward.ownPhoneDisabled') }}-->
<!-- {{ $t('do not ring own phone') }}-->
<!-- </span>-->
<!-- </div>-->
<!-- </div>-->
@ -135,7 +135,7 @@
/>
<csc-popup-menu-item
icon="edit"
:label="$t('pages.callForward.editTimeout')"
:label="$t('Edit timeout')"
@click="showModal()"
/>
</csc-more-menu>
@ -160,7 +160,7 @@
<!-- />-->
<!-- </q-item>-->
<!-- <q-item @click="showModal();$refs.popover.close()">-->
<!-- <q-item-main :label="$t('pages.callForward.editTimeout')" />-->
<!-- <q-item-main :label="$t('Edit timeout')" />-->
<!-- <q-item-side-->
<!-- icon="fa-edit"-->
<!-- color="secondary"-->
@ -179,7 +179,7 @@
class="text-uppercase"
overline
>
{{ $t('pages.callForward.forwardToNowhere') }}
{{ $t('forward to nowhere') }}
</q-item-label>
</q-item-section>
</q-item>
@ -211,15 +211,15 @@
<q-card>
<q-card-section>
<div class="title">
{{ $t('pages.callForward.editTimeout') }}
{{ $t('Edit timeout') }}
</div>
</q-card-section>
<q-card-section>
<q-input
v-if="ownPhone"
v-model="editTimeout"
:suffix="$t('pages.callForward.seconds')"
:label="$t('pages.callForward.timeout')"
:suffix="$t('seconds')"
:label="$t('Timeout')"
:error="$v.editTimeout.$error"
:error-message="errorMessage"
@input="$v.editTimeout.$touch"
@ -233,7 +233,7 @@
color="default"
@click="hideModal"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -241,7 +241,7 @@
color="negative"
@click="resetTimeout"
>
{{ $t('buttons.reset') }}
{{ $t('Reset') }}
</q-btn>
<q-btn
flat
@ -250,7 +250,7 @@
:disable="$v.editTimeout.$error"
@click="updateTimeout"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</q-card-actions>
</q-card>
@ -339,16 +339,16 @@ export default {
},
errorMessage () {
if (!this.$v.editTimeout.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pages.callForward.timeout')
return this.$t('{field} is required', {
field: this.$t('Timeout')
})
} else if (!this.$v.editTimeout.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pages.callForward.timeout')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Timeout')
})
} else if (!this.$v.editTimeout.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pages.callForward.timeout'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Timeout'),
minValue: this.$v.editTimeout.$params.minValue.min
})
} else {
@ -393,9 +393,9 @@ export default {
},
toggleTimeoutLabel () {
const mode = this.ownPhone
? this.$t('pages.callForward.disable')
: this.$t('pages.callForward.enable')
return this.$t('pages.callForward.toggleTimeout', {
? this.$t('Disable')
: this.$t('Enable')
return this.$t('{mode} own phone', {
mode: mode
})
}

@ -11,12 +11,12 @@
:default="index === 0"
:count="destinationsCount(sourceset.destinationGroups)"
:name="sourceset.sourcesetName || 'always'"
:label="sourceset.sourcesetName || $t('pages.callForward.everyCaller')"
:label="sourceset.sourcesetName || $t('Every caller')"
icon="people"
@click="currentSourceSet = sourceset"
/>
<q-tab
:label="$t('buttons.addNew')"
:label="$t('Add new')"
name="addnew"
icon="add"
/>
@ -77,7 +77,7 @@
header
class="text-uppercase"
>
{{ $t('pages.callForward.sources.sourcesTitleMode', {
{{ $t('{mode} of sources', {
mode: capitalizedMode(sourceset.sourcesetMode)}) }}
</q-item-label>
</q-item-section>
@ -97,7 +97,7 @@
<csc-popup-menu-item
color="negative"
icon="delete"
:label="$t('buttons.remove')"
:label="$t('Remove')"
@click="removeSource(sourceset, sourceItem.source, index)"
/>
</csc-more-menu>
@ -119,7 +119,7 @@
icon="add"
@click="openForm()"
>
{{ $t('pages.callForward.sources.addSourceButton') }}
{{ $t('Add source') }}
</q-btn>
<csc-sourcesets-form
v-if="sourcesetsFormEnabled"
@ -156,7 +156,7 @@
<q-input
v-model="sourcesetName"
autofocus
:label="$t('pages.callForward.sources.sourceset')"
:label="$t('Sourceset')"
color="primary"
dense
@keyup.enter="addSourceset()"
@ -165,7 +165,7 @@
<q-item-section>
<q-input
v-model="source"
:label="$t('pages.callForward.sources.source')"
:label="$t('Source')"
color="primary"
dense
@keyup.enter="addSourceset()"
@ -193,7 +193,7 @@
class="sourceset-add-button"
@click="addSourceset()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</q-item-section>
</q-item>
@ -258,11 +258,11 @@ export default {
mode: 'whitelist',
modes: [
{
label: this.$t('pages.callForward.whitelist'),
label: this.$t('Whitelist'),
value: 'whitelist'
},
{
label: this.$t('pages.callForward.blacklist'),
label: this.$t('Blacklist'),
value: 'blacklist'
}
],
@ -288,7 +288,7 @@ export default {
},
deleteSourcesetLabel () {
return this.$q.platform.is.mobile ? ''
: this.$t('pages.callForward.sources.removeSourcesetButton')
: this.$t('Delete sourceset')
}
},
watch: {
@ -297,7 +297,7 @@ export default {
} else if (state === 'failed') {
showGlobalError(this.addSourceError)
} else if (state === 'succeeded') {
showToast(this.$t('pages.callForward.sources.addSourceSuccessMessage', {
showToast(this.$t('Added new source {source}', {
source: this.lastAddedSource
}))
this.$store.dispatch('callForward/loadSourcesets')
@ -310,7 +310,7 @@ export default {
} else if (state === 'failed') {
showGlobalError(this.removeSourcesetError)
} else if (state === 'succeeded') {
showToast(this.$t('pages.callForward.sources.removeSourcesetSuccessMessage', {
showToast(this.$t('Removed sourceset {sourceset}', {
sourceset: this.lastRemovedSourceset
}))
this.loadAll()
@ -323,7 +323,7 @@ export default {
} else if (state === 'failed') {
showGlobalError(this.removeSourceError)
} else if (state === 'succeeded') {
showToast(this.$t('pages.callForward.sources.removeSourceSuccessMessage', {
showToast(this.$t('Removed source {source}', {
source: this.lastRemovedSource
}))
this.loadAll()
@ -338,8 +338,8 @@ export default {
this.alertDeleteLastSource()
} else {
this.$q.dialog({
title: this.$t('pages.callForward.sources.removeSourceDialogTitle'),
message: this.$t('pages.callForward.sources.removeSourceDialogText', {
title: this.$t('Remove call forward source'),
message: this.$t('You are about to remove the source entry for {source}', {
source: source
}),
color: 'negative',
@ -359,7 +359,7 @@ export default {
enter: 'bounceInRight',
leave: 'bounceOutRight',
position: 'top-center',
html: this.$t('pages.callForward.sources.removeLastSourceDialogText'),
html: this.$t('Removing the last source entry is not allowed.'),
icon: 'warning',
dismissible: true
})
@ -414,7 +414,7 @@ export default {
timeset: this.timesetName
})
} else {
showGlobalError(this.$t('pages.callForward.sources.fieldMissing'))
showGlobalError(this.$t('Both sourceset name and source is required. Please provide both and try again.'))
}
},
openForm () {
@ -429,8 +429,8 @@ export default {
},
removeSourceset (sourceset) {
this.$q.dialog({
title: this.$t('pages.callForward.sources.removeSourcesetDialogTitle'),
message: this.$t('pages.callForward.sources.removeSourcesetDialogText', {
title: this.$t('Remove call forward sourceset'),
message: this.$t('You are about to remove the sourceset {sourceset}', {
sourceset: sourceset.sourcesetName
}),
color: 'negative',

@ -4,7 +4,7 @@
v-model="source"
dark
autofocus
:label="$t('pages.callForward.sources.source')"
:label="$t('Source')"
color="primary"
@keyup.enter="addSource()"
/>
@ -14,7 +14,7 @@
color="default"
@click="disableForm()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -23,7 +23,7 @@
:disable="!isValid"
@click="addSource()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</template>

@ -6,18 +6,18 @@
v-if="!hasRtcEngineCapabilityEnabled"
class="q-mb-lg"
>
{{ $t('call.rtcEngineNotEnabledConferencing') }}
{{ $t('You can not join a conference, since the RTC:engine is not active. If you operate a C5 CE then first upgrade to a C5 PRO to be able to use the RTC:engine.') }}
</csc-inline-alert-info>
<div
class="text-h6 text-center q-mb-lg"
>
{{ $t('conferencing.joinText') }}
{{ $t('Join conference with name') }}
</div>
<q-input
ref="conferenceName"
class="q-mb-lg"
:value="conferenceIdInput"
:placeholder="$t('conferencing.idPlaceholder')"
:placeholder="$t('Conference name')"
:disable="isJoining || !hasRtcEngineCapabilityEnabled"
@input="conferenceIdChanged"
>
@ -35,7 +35,7 @@
<q-btn
:disable="!hasConferenceId || isJoining || !hasRtcEngineCapabilityEnabled"
:color="shareButtonColor"
:label="$t('conferencing.shareButtonLabel')"
:label="$t('Share')"
flat
dense
icon="link"

@ -161,8 +161,8 @@ export default {
},
audioLabel () {
return this.isAudioMuted
? this.$t('conferencing.unmuteMicrophone')
: this.$t('conferencing.muteMicrophone')
? this.$t('Unmute')
: this.$t('Mute')
},
showMenu () {
this.$refs.popover.open()

@ -1,7 +1,7 @@
<template>
<csc-dialog
ref="dialogComp"
:title="$t('conferencing.shareDialogTitle')"
:title="$t('Share conference')"
:title-icon="'link'"
>
<div
@ -21,7 +21,7 @@
icon="link"
@click="copy"
>
{{ $t('conferencing.copyLinkButtonLabel') }}
{{ $t('Copy link') }}
</q-btn>
</csc-dialog>
</template>

@ -25,13 +25,13 @@
<q-item-label
caption
>
{{ $t('pages.conversations.callDuration') }}: {{ call.duration }}
{{ $t('Duration') }}: {{ call.duration }}
</q-item-label>
<q-item-label
caption
>
<span>
{{ $t('pages.conversations.cost') }}
{{ $t('Cost') }}
</span>
<span>
{{ totalCustomerCostRounded | wholeCurrency }}
@ -141,16 +141,16 @@ export default {
},
direction () {
if (this.call.direction === 'out') {
return this.$t('pages.conversations.to')
return this.$t('to')
} else {
return this.$t('pages.conversations.from')
return this.$t('from')
}
},
typeTerm () {
if (this.call.call_type === 'call') {
return this.$t('pages.conversations.call')
return this.$t('Call')
} else {
return this.$t('pages.conversations.callForwarded')
return this.$t('Call forwarded')
}
},
icon () {

@ -9,21 +9,21 @@
icon="mic"
color="primary"
/>
<q-item-main :label="$t('startAudioCall')" />
<q-item-main :label="$t('Audio Only')" />
</q-item>
<q-item @click="initCall('audioVideo')">
<q-item-side
icon="videocam"
color="primary"
/>
<q-item-main :label="$t('startVideoCall')" />
<q-item-main :label="$t('Audio + Video')" />
</q-item>
<q-item @click="initCall('audioScreen')">
<q-item-side
icon="computer"
color="primary"
/>
<q-item-main :label="$t('startScreenSharing')" />
<q-item-main :label="$t('Audio + Screen')" />
</q-item>
</q-list>
</template>

@ -85,23 +85,23 @@ export default {
},
blockIncomingLabel () {
if (this.blockedIncoming) {
return this.$t('pages.conversations.buttons.unblockIncoming')
return this.$t('Unblock Incoming')
} else {
return this.$t('pages.conversations.buttons.blockIncoming')
return this.$t('Block Incoming')
}
},
blockOutgoingLabel () {
if (this.blockedOutgoing) {
return this.$t('pages.conversations.buttons.unblockOutgoing')
return this.$t('Unblock Outgoing')
} else {
return this.$t('pages.conversations.buttons.blockOutgoing')
return this.$t('Block Outgoing')
}
},
blockBothLabel () {
if (this.blockedBoth) {
return this.$t('pages.conversations.buttons.unblockBoth')
return this.$t('Unblock Incoming/Outgoing')
} else if (this.unblockedBoth) {
return this.$t('pages.conversations.buttons.blockBoth')
return this.$t('Block Incoming/Outgoing')
} else {
return ''
}

@ -13,7 +13,7 @@
<q-item-label
class="text-subtitle1"
>
{{ $t('pages.conversations.fax') }}
{{ $t('Fax') }}
{{ direction }}
{{ fax.caller | numberFormat }}
</q-item-label>
@ -32,13 +32,13 @@
v-else-if="fax.pages === 1"
caption
>
{{ fax.pages }} {{ $t('pages.conversations.page') }}
{{ fax.pages }} {{ $t('page') }}
</q-item-label>
<q-item-label
v-else
caption
>
{{ fax.pages }} {{ $t('pages.conversations.pages') }}
{{ fax.pages }} {{ $t('pages') }}
</q-item-label>
</q-item-section>
<q-item-section
@ -48,7 +48,7 @@
<csc-popup-menu-item
icon="file_download"
color="primary"
:label="$t('pages.conversations.buttons.downloadFax')"
:label="$t('Download fax')"
@click="downloadFax"
/>
<csc-popup-menu-item-start-call

@ -13,7 +13,7 @@
<q-item-label
class="text-subtitle1"
>
{{ $t('pages.conversations.voicemail') }}
{{ $t('Voicemail') }}
{{ direction }}
{{ voiceMail.caller | destinationFormat }}
</q-item-label>
@ -25,9 +25,9 @@
<q-item-label
caption
>
{{ $t('pages.conversations.duration') }}
{{ $t('Duration') }}
{{ voiceMail.duration }}
{{ $t('pages.conversations.seconds') }}
{{ $t('seconds') }}
</q-item-label>
<csc-audio-player
ref="voicemailPlayer"
@ -44,7 +44,7 @@
<csc-popup-menu-item
icon="file_download"
color="primary"
:label="$t('pages.conversations.buttons.downloadVoicemail')"
:label="$t('Download voicemail')"
@click="downloadVoiceMail"
/>
<csc-popup-menu-item-start-call

@ -9,7 +9,7 @@
slot="title"
>
<csc-list-item-title>
{{ $t('faxSettings.destinationItemTitle', {destination: destination.destination, filetype: destination.filetype}) }}
{{ $t('&lt;{destination}&gt; as {filetype}', {destination: destination.destination, filetype: destination.filetype}) }}
</csc-list-item-title>
<q-slide-transition>
<csc-list-item-subtitle
@ -39,7 +39,7 @@
icon-color="negative"
@click="deleteDestination"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
<template slot="body">

@ -7,7 +7,7 @@
<csc-input-saveable
v-model="data.destination"
icon="email"
:label="$t('faxSettings.destinationEmail')"
:label="$t('Destination Email')"
:disable="disabled"
:readonly="loading"
:error="$v.data.destination.$error"
@ -27,7 +27,7 @@
map-options
:disable="loading"
:readonly="loading"
:label="$t('faxSettings.fileType')"
:label="$t('File Type')"
:options="fileTypeOptions"
@input="updatePropertyData('filetype')"
/>
@ -37,19 +37,19 @@
>
<q-toggle
v-model="data.incoming"
:label="$t('faxSettings.deliverIncomingFaxes')"
:label="$t('Deliver Incoming Faxes')"
:disable="loading"
@input="updatePropertyData('incoming')"
/>
<q-toggle
v-model="data.outgoing"
:label="$t('faxSettings.deliverOutgoingFaxes')"
:label="$t('Deliver Outgoing Faxes')"
:disable="loading"
@input="updatePropertyData('outgoing')"
/>
<q-toggle
v-model="data.status"
:label="$t('faxSettings.receiveReports')"
:label="$t('Receive Reports')"
:disable="loading"
@input="updatePropertyData('status')"
/>
@ -64,7 +64,7 @@
color="default"
icon="clear"
:disable="loading"
:label="$t('buttons.cancel')"
:label="$t('Cancel')"
@click="cancel()"
/>
<q-btn
@ -73,7 +73,7 @@
icon="done"
:loading="loading"
:disable="$v.data.$invalid || loading"
:label="$t('faxSettings.createDestination')"
:label="$t('Create destination')"
@click="save()"
/>
</div>
@ -129,11 +129,11 @@ export default {
computed: {
destinationErrorMessage () {
if (!this.$v.data.destination.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('faxSettings.destinationEmail')
return this.$t('{field} is required', {
field: this.$t('Destination Email')
})
} else if (!this.$v.data.destination.email) {
return this.$t('validationErrors.email')
return this.$t('Input a valid email address')
} else {
return ''
}

@ -8,7 +8,7 @@
<q-item-section>
<q-toggle
v-model="faxToMailSettings.active"
:label="$t('faxSettings.active')"
:label="$t('Active')"
:disable="!dataLoaded"
@input="setChangedData('active', !faxServerSettings.active)"
/>
@ -26,7 +26,7 @@
<q-item-section>
<csc-input-saveable
v-model.trim="faxToMailSettings.name"
:label="$t('faxSettings.sendfaxHeaderName')"
:label="$t('Name in Fax Header for Sendfax')"
:disable="!dataLoaded"
:loading="loadingFaxServerSettings"
:value-changed="nameChanged"
@ -39,7 +39,7 @@
<q-item-section>
<q-toggle
v-model="faxToMailSettings.t38"
:label="$t('faxSettings.T38')"
:label="$t('T38')"
:disable="!dataLoaded"
@input="setChangedData('t38', !faxServerSettings.t38)"
/>
@ -57,7 +57,7 @@
<q-item-section>
<q-toggle
v-model="faxToMailSettings.ecm"
:label="$t('faxSettings.ECM')"
:label="$t('ECM')"
:disable="!dataLoaded"
@input="setChangedData('ecm', !faxServerSettings.ecm)"
/>
@ -73,7 +73,7 @@
</q-item>
<q-item class="row">
<div class="col">
<span class="text-h6">{{ $t('faxSettings.destinations') }}:</span>
<span class="text-h6">{{ $t('Destinations') }}:</span>
</div>
<div class="col text-center">
<csc-spinner
@ -88,7 +88,7 @@
:disable="!dataLoaded || showAddNewDestination"
@click="openAddNewDestination"
>
{{ $t('faxSettings.addDestination') }}
{{ $t('Add destination') }}
</q-btn>
</div>
</q-item>
@ -117,7 +117,7 @@
v-if="!hasDestinations"
class="row justify-center"
>
{{ $t('faxSettings.noDestinationsCreatedYet') }}
{{ $t('No destinations created yet') }}
</q-item>
<csc-fax-to-mail-destination
v-for="(destinationItem, index) in faxToMailSettings.destinations"
@ -252,8 +252,8 @@ export default {
this.$q.dialog({
component: CscRemoveDialog,
parent: this,
title: this.$t('faxSettings.deleteDestinationTitle'),
message: this.$t('faxSettings.deleteDestinationText', { destination: destinationId })
title: this.$t('Remove Destination'),
message: this.$t('You are about to remove destination {destination}', { destination: destinationId })
}).onOk(() => {
this.deleteDestination(destinationId)
})

@ -79,7 +79,7 @@
color="default"
icon="clear"
:disable="loading"
:label="$t('buttons.cancel')"
:label="$t('Cancel')"
@click="cancel()"
/>
<q-btn
@ -144,7 +144,7 @@ export default {
computed: {
fromEmailErrorMessage () {
if (!this.$v.data.from_email.email) {
return this.$t('validationErrors.email')
return this.$t('Input a valid email address')
} else {
return ''
}

@ -83,11 +83,11 @@ export default {
},
newEmailErrorMessage () {
if (!this.$v.newEmail.required) {
return this.$t('validationErrors.fieldRequired', {
return this.$t('{field} is required', {
field: this.$t('Renew Notify Email')
})
} else if (!this.$v.newEmail.email) {
return this.$t('validationErrors.email')
return this.$t('Input a valid email address')
} else {
return ''
}
@ -138,8 +138,8 @@ export default {
},
remove () {
this.$q.dialog({
title: this.$t('faxSettings.deleteRenewNotifyEmailTitle'),
message: this.$t('faxSettings.deleteRenewNotifyEmailText', { email: this.value }),
title: this.$t('Remove secret key renew notify email'),
message: this.$t('You are about to remove secret key renew notify email: {email}', { email: this.value }),
color: 'primary',
cancel: true,
persistent: true

@ -92,11 +92,11 @@ export default {
computed: {
destinationErrorMessage () {
if (!this.$v.data.destination.required) {
return this.$t('validationErrors.fieldRequired', {
return this.$t('{field} is required', {
field: this.$t('Email')
})
} else if (!this.$v.data.destination.email) {
return this.$t('validationErrors.email')
return this.$t('Input a valid email address')
} else {
return ''
}

@ -8,7 +8,7 @@
class="self-center"
/>
<div v-else>
{{ $t('faxSettings.featureIsNotActive') }}
{{ $t('Mail To Fax feature is not active') }}
</div>
</div>
<div v-else>
@ -20,7 +20,7 @@
<q-item-section>
<q-toggle
:value="mailToFaxSettingsModel.active"
:label="$t('faxSettings.active')"
:label="$t('Active')"
:disable="true"
/>
</q-item-section>
@ -58,7 +58,7 @@
map-options
:disable="!dataLoaded"
:readonly="!dataLoaded"
:label="$t('faxSettings.secretKeyRenew')"
:label="$t('Secret Key Renew')"
:options="secretKeyRenewOptions"
@input="setChangedData('secret_key_renew', mailToFaxSettingsModel.secret_key_renew)"
>
@ -81,7 +81,7 @@
<div class="col q-py-md q-pl-md">
<div class="row q-pb-xs">
<div class="col vertical-bottom">
<span class="vertical-middle">{{ $t('faxSettings.secretKeyRenewNotify') }}:</span>
<span class="vertical-middle">{{ $t('Secret Key Renew Notify') }}:</span>
</div>
<div class="col text-right">
<q-btn
@ -91,7 +91,7 @@
:disable="!dataLoaded || showAddNewRenewEmail"
@click="openAddNewRenewEmail"
>
{{ $t('faxSettings.addEmail') }}
{{ $t('Add email') }}
</q-btn>
</div>
</div>
@ -143,7 +143,7 @@
<div class="col q-pa-md">
<div class="row q-pb-xs">
<div class="col">
{{ $t('faxSettings.ACL') }}:
{{ $t('ACL') }}:
</div>
<div class="col text-right">
<q-btn
@ -153,7 +153,7 @@
:disable="!dataLoaded || showAddNewACL"
@click="openAddNewACL"
>
{{ $t('faxSettings.addACL') }}
{{ $t('Add ACL') }}
</q-btn>
</div>
</div>
@ -253,12 +253,12 @@ export default {
return this.mailToFaxSettingsInitialized && !this.loadingMail2FaxSettings
},
secretKeyFieldLabel () {
let label = this.$t('faxSettings.secretKeyField')
label += ' (' + this.$t('faxSettings.lastModifyTime') + ': '
let label = this.$t('Secret Key (empty=disabled)')
label += ' (' + this.$t('Last Modify Time') + ': '
if (this.mailToFaxSettings.last_secret_key_modify) {
label += this.mailToFaxSettings.last_secret_key_modify + ')'
} else {
label += this.$t('faxSettings.notModifiedYet') + ')'
label += this.$t('Not modified yet') + ')'
}
return label
},

@ -13,9 +13,9 @@
<span
v-if="groupSourceset"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span class="csc-cf-from-link">
{{ $t('pages.newCallForward.fromLabelShort') +'"'+ groupSourceset +'"' }}
{{ $t(' call from ') +'"'+ groupSourceset +'"' }}
<q-menu
ref="sourcesListEditMenu"
>
@ -34,9 +34,9 @@
<span
v-if="groupTimeset && !isRange"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span class="csc-cf-from-link">
{{ $t('pages.newCallForward.dateIsShort') + groupTimeset }}
{{ $t(' date is ') + groupTimeset }}
</span>
<q-menu
ref="dayWidget"
@ -53,7 +53,7 @@
color="primary"
icon="clear"
>
{{ $t('buttons.close') }}
{{ $t('Close') }}
</q-btn>
<q-btn
v-close-popup
@ -62,7 +62,7 @@
icon="delete"
@click="showConfirmDeleteTimesetDialog"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
</div>
</q-date>
@ -70,8 +70,8 @@
<csc-confirm-dialog
ref="confirmDeleteTimesetDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelTimesetDialogTitle', {name: groupTimeset})"
:message="$t('pages.newCallForward.cancelTimesetText', {name: groupTimeset})"
:title="$t('Delete {name} timeset', {name: groupTimeset})"
:message="$t('You are about to delete {name} timeset', {name: groupTimeset})"
@confirm="deleteTimeset"
/>
@ -79,12 +79,12 @@
<span
v-if="groupTimeset && isRange"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span
ref="isRangeLink"
class="csc-cf-from-link"
>
{{ $t('pages.newCallForward.dateRangeShort') + groupTimeRange }}
{{ $t(' date range is ') + groupTimeRange }}
<q-menu
ref="editDateRangeMenu"
@hide="resetAction()"
@ -101,8 +101,8 @@
<csc-confirm-dialog
ref="confirmDeleteTimesetDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelTimesetDialogTitle', {name: groupTimeRange})"
:message="$t('pages.newCallForward.cancelTimesetText', {name: groupTimeRange})"
:title="$t('Delete {name} timeset', {name: groupTimeRange})"
:message="$t('You are about to delete {name} timeset', {name: groupTimeRange})"
@confirm="deleteTimeset"
/>
</q-menu>
@ -111,7 +111,7 @@
<span
v-if="isWeekdays && !isOfficeHours"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span
ref="isWeekdayLink"
class="csc-cf-from-link"
@ -135,7 +135,7 @@
<span
v-if="isOfficeHours"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span
ref="isOfficeHoursLink"
class="csc-cf-from-link"
@ -162,9 +162,9 @@
v-if="isTempGroup || !(groupSourceset && groupTimeset || groupSourceset && isWeekdays || groupTimeset && isWeekdays )"
class="csc-cf-destination-add-condition"
>
{{ $t('pages.newCallForward.conditionBtnLabelPrefix') }}
{{ $t(' and') }}
<span class="csc-cf-from-link">
{{ $t('pages.newCallForward.conditionBtnLabel') }}
{{ $t(' condition') }}
</span>
<q-menu
ref="conditions"
@ -179,7 +179,7 @@
clickable
@click="()=>{action = 'addFromCondition'}"
>
<q-item-section>{{ $t('pages.newCallForward.fromLabel') }}</q-item-section>
<q-item-section>{{ $t('If call from ...') }}</q-item-section>
</q-item>
<q-item
v-if="isTempGroup || !hasTimeset"
@ -187,7 +187,7 @@
clickable
@click="()=>{action = 'addDateIsCondition'}"
>
<q-item-section>{{ $t('pages.newCallForward.dateIsLabel') }}</q-item-section>
<q-item-section>{{ $t('If date is ...') }}</q-item-section>
</q-item>
<q-item
v-if="isTempGroup || !hasTimeset"
@ -195,7 +195,7 @@
clickable
@click="()=>{action = 'addDateRangeCondition'}"
>
<q-item-section>{{ $t('pages.newCallForward.dateRangeLabel') }}</q-item-section>
<q-item-section>{{ $t('If date range is ...') }}</q-item-section>
</q-item>
<q-item
v-if="isTempGroup || !hasTimeset"
@ -203,7 +203,7 @@
clickable
@click="()=>{action = 'addWeekdayCondition'}"
>
<q-item-section>{{ $t('pages.newCallForward.weekdaysLabel') }}</q-item-section>
<q-item-section>{{ $t('If weekdays are ...') }}</q-item-section>
</q-item>
<q-item
v-if="isTempGroup || !hasTimeset"
@ -211,7 +211,7 @@
clickable
@click="()=>{action = 'addOfficeHoursCondition'}"
>
<q-item-section>{{ $t('pages.newCallForward.officeHoursLabel') }}</q-item-section>
<q-item-section>{{ $t('If office hours are ...') }}</q-item-section>
</q-item>
</q-list>
</q-menu>
@ -246,7 +246,7 @@
color="primary"
icon="clear"
>
{{ $t('buttons.close') }}
{{ $t('Close') }}
</q-btn>
<q-btn
v-close-popup
@ -255,7 +255,7 @@
icon="delete"
@click="showConfirmDeleteTimesetDialog"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
</div>
</q-date>
@ -322,8 +322,8 @@
<csc-confirm-dialog
ref="confirmDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelGroupDialogTitle', {groupName: group.name})"
:message="$t('pages.newCallForward.cancelGroupDialogText', {groupName: group.name})"
:title="$t('Delete {groupName} forwarding group', {groupName: group.name})"
:message="$t('You are about to delete {groupName} call forwarding group', {groupName: group.name})"
@confirm="confirmDeleteGroup"
/>
<q-spinner-dots
@ -391,7 +391,7 @@
color="primary"
size="24px"
/>
{{ $t('pages.newCallForward.addDestinationLabel') }}
{{ $t('Add destination') }}
<q-menu
ref="destTypeMenu"
:auto-close="true"
@ -432,6 +432,7 @@ import {
import {
date
} from 'quasar'
import { WeekdayTranslationMap } from 'src/filters/date'
import CscConfirmDialog from '../../CscConfirmationDialog'
import CscNewCallForwardDestination from './CscNewCallForwardDestination'
import CscNewCallForwardAddDestinationForm from './CscNewCallForwardAddDestinationForm'
@ -511,17 +512,17 @@ export default {
switch (this.group.name) {
case 'csc-unconditional':
case 'csc-timeout':
title = `${this.$t('pages.newCallForward.titles.timeoutGroup')}`
title = `${this.$t('If available')}`
break
case 'csc-unconditional-from':
case 'csc-timeout-from':
title = `${this.$t('pages.newCallForward.titles.timeoutGroupFromPre')}`
title = `${this.$t('If available and ')}`
break
case 'csc-offline':
title = `${this.$t('pages.newCallForward.titles.offlineGroup')}`
title = `${this.$t('If not available')}`
break
case 'csc-busy':
title = `${this.$t('pages.newCallForward.titles.busyGroup')}`
title = `${this.$t('If busy')}`
break
}
return title
@ -583,11 +584,11 @@ export default {
},
weekdaysLabelShort () {
return this.timeSet.times.length > 1
? `${this.$t('pages.newCallForward.weekdaysLabelShort')}`
: `${this.$t('pages.newCallForward.weekdayLabelShort')}`
? `${this.$t(' weekdays are ')}`
: `${this.$t(' weekday is ')}`
},
officeHoursLabelShort () {
return this.$tc('pages.newCallForward.officeHoursLabelShort', this.timeSet.times.length)
return this.$tc(' office hour is | office hours are', this.timeSet.times.length)
},
groupWeekdays () {
let times = _.cloneDeep(_.get(this.timeSet, 'times', []))
@ -635,7 +636,7 @@ export default {
return this.groupTimeset || this.isRange || this.isWeekdays
},
toggleLabel () {
return this.toggleDefaultNumber ? `${this.$t('pages.newCallForward.primarNumberEnabled')}` : `${this.$t('pages.newCallForward.primarNumberDisabled')}`
return this.toggleDefaultNumber ? `${this.$t('All calls go to the primary number')}` : `${this.$t('No call goes to primary number')}`
},
isTimeoutOrUnconditional () {
return this.group.name.includes('unconditional') || this.group.name.includes('timeout')
@ -860,7 +861,7 @@ export default {
parseWeekDays (times) {
const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
return times
.map(time => this.$t('pages.callForward.times.' + weekDays[Number(time.wday) - 1]))
.map(time => WeekdayTranslationMap[weekDays[Number(time.wday) - 1]])
.join(', ')
},
checkOfficeHoursForAllDays (times) {

@ -4,7 +4,7 @@
>
<csc-input
v-model="number"
:label="$t('callBlocking.number')"
:label="$t('Number')"
@submit="save"
@error="error"
/>
@ -17,7 +17,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -27,7 +27,7 @@
:disable="saveDisabled"
@click="save(); close()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
<div
v-if="loading"
@ -117,7 +117,7 @@ export default {
const forwardGroup = await this.$store.dispatch('newCallForward/getForwardGroupById', forwardGroupId)
this.$store.dispatch('newCallForward/addGroupLoader', this.groupId)
if (this.numberError || this.saveDisabled) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
} else if (Number.isInteger(this.destinationIndex) && Number.isInteger(forwardGroup.id)) { // edit mode
await this.$store.dispatch('newCallForward/editDestination', {
index: this.destinationIndex,

@ -6,7 +6,7 @@
<q-item
class="justify-center text-bold"
>
{{ $t('pages.newCallForward.officeHoursTitle') }}
{{ $t('Office hours') }}
</q-item>
<q-item
class="justify-center"
@ -14,7 +14,7 @@
<q-checkbox
v-model="checkOfficeHoursForAllDays"
:value="sameOfficeHoursForAllDays"
:label="$t('pages.newCallForward.sameOfficeHoursForAllDays')"
:label="$t('Same time for all selected days')"
@input="toggleAllDaysSameOfficeHours"
/>
</q-item>
@ -28,7 +28,7 @@
dense
>
<q-tab
v-for="(dayLetter, index) in $t('pages.newCallForward.daysOfTheWeekShort').split(',')"
v-for="(dayLetter, index) in $t('M,T,W,T,F,S,S').split(',')"
:key="index"
:alert="hasOfficeHours(getDayNumber(index))"
:name="getDayNumber(index)"
@ -49,7 +49,7 @@
class="justify-center"
>
<q-btn
v-for="(dayLetter, index) in $t('pages.newCallForward.daysOfTheWeekShort').split(',')"
v-for="(dayLetter, index) in $t('M,T,W,T,F,S,S').split(',')"
:key="index"
class="weekday-btn q-ma-sm"
:class="{ 'day-selected-btn': weekdays.includes(getDayNumber(index))}"
@ -100,7 +100,7 @@
color="primary"
size="24px"
/>
{{ $t('pages.newCallForward.officeHoursAddBtnLabel') }}
{{ $t('Add time range') }}
</q-btn>
</q-item>
</q-list>
@ -114,14 +114,14 @@
icon="delete"
@click="showRemoveDialog()"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
<csc-confirm-dialog
ref="confirmDeleteTimesetDialog"
title-icon="delete"
class="csc-cf-delete-weekdays-btn"
:title="$t('pages.newCallForward.cancelTimesetDialogTitle', {name: 'office hours'})"
:message="$t('pages.newCallForward.cancelTimesetText', {name: 'this'})"
:title="$t('Delete {name} timeset', {name: 'office hours'})"
:message="$t('You are about to delete {name} timeset', {name: 'this'})"
@confirm="deleteTimeset"
/>
<q-btn
@ -130,7 +130,7 @@
icon="clear"
@click="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -139,7 +139,7 @@
:disabled="timeRanges.length < 1"
@click="save()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</q-item>
</q-list>

@ -4,14 +4,14 @@
>
<csc-input
v-model="name"
:label="$t('pages.newCallForward.sourcesetName')"
:label="$t('List name')"
@submit="save"
@error="errorName"
/>
<csc-call-input
v-model="number"
:label="$t('callBlocking.number')"
:label="$t('Number')"
@submit="save"
@error="errorNumber"
/>
@ -25,7 +25,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -35,7 +35,7 @@
:disable="saveDisabled"
@click="save(); close()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
<div
v-if="loading"
@ -106,7 +106,7 @@ export default {
const forwardGroupName = this.groupName
if (this.numberError || this.nameError || this.saveDisabled) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
return
}
try {

@ -8,8 +8,8 @@
<csc-confirm-dialog
ref="confirmDeleteTimesetDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelTimesetDialogTitle', {name: 'weekdays'})"
:message="$t('pages.newCallForward.cancelTimesetText', {name: 'this'})"
:title="$t('Delete {name} timeset', {name: 'weekdays'})"
:message="$t('You are about to delete {name} timeset', {name: 'this'})"
@confirm="deleteTimeset"
/>
</div>
@ -83,7 +83,7 @@
icon="delete"
@mousedown.native="showRemoveDialog()"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
<q-btn
flat
@ -91,7 +91,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -100,7 +100,7 @@
icon="done"
@click="save(); close()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
<div
v-if="loading"

@ -23,7 +23,7 @@
color="primary"
icon="done"
>
{{ $t('buttons.confirm') }}
{{ $t('Confirm') }}
</q-btn>
</div>
</q-date>
@ -46,7 +46,7 @@
color="primary"
icon="done"
>
{{ $t('buttons.confirm') }}
{{ $t('Confirm') }}
</q-btn>
</div>
</q-date>
@ -68,7 +68,7 @@
color="primary"
icon="done"
>
{{ $t('buttons.confirm') }}
{{ $t('Confirm') }}
</q-btn>
</div>
</q-time>
@ -90,7 +90,7 @@
color="primary"
icon="done"
>
{{ $t('buttons.confirm') }}
{{ $t('Confirm') }}
</q-btn>
</div>
</q-time>
@ -102,7 +102,7 @@
<q-input
v-model="dayFromFormatted"
dark
:placeholder="$t('pages.newCallForward.dateRangeStartDate')"
:placeholder="$t('Start date')"
@click="openDayFrom()"
>
<template v-slot:append>
@ -116,7 +116,7 @@
v-model="dayToFormatted"
:disable="!dayFrom"
dark
:placeholder="$t('pages.newCallForward.dateRangeEndDate')"
:placeholder="$t('End date')"
@click="openDayTo()"
>
<template v-slot:append>
@ -134,7 +134,7 @@
v-model="hourFromFormatted"
dark
:disable="!dayFrom"
:placeholder="$t('pages.newCallForward.dateRangeStartTime')"
:placeholder="$t('Start time')"
@click="openHourFrom()"
>
<template v-slot:append>
@ -147,7 +147,7 @@
<q-input
v-model="hourToFormatted"
dark
:placeholder="$t('pages.newCallForward.dateRangeEndTime')"
:placeholder="$t('End time')"
:disable="!dayTo"
@click="openHourTo()"
>
@ -169,12 +169,12 @@
icon="delete"
@mousedown.native="showRemoveDateRangeDialog()"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
<csc-confirm-dialog
ref="confirmDeleteTimesetDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelTimesetDialogTitle', {name: groupTimeRange})"
:message="$t('pages.newCallForward.cancelTimesetText', {name: groupTimeRange})"
:title="$t('Delete {name} timeset', {name: groupTimeRange})"
:message="$t('You are about to delete {name} timeset', {name: groupTimeRange})"
@confirm="deleteTimeset"
/>
</q-btn>
@ -184,7 +184,7 @@
icon="clear"
@click="resetTimeRange(); close()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -193,7 +193,7 @@
:disable="!isDateReadyForSubmit"
@click="save();"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</div>

@ -56,7 +56,7 @@
v-if="firstDestinationInCreation && (popoverToTop || popoverTimeoutToTop)"
class="csc-cf-popver-alert"
>
{{ $t('pages.newCallForward.mandatoryDestinationLabel') }}
{{ $t('Please add a destination to the group before adding conditions') }}
</div>
<csc-new-call-forward-destination-type-form
ref="selectDestinationType"
@ -94,8 +94,8 @@
<csc-confirm-dialog
ref="confirmDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelDialogTitle', {groupName: groupName})"
:message="$t('pages.newCallForward.cancelDialogText', {groupName: groupName, destination: getDestName()})"
:title="$t('Delete from {groupName} forwarding', {groupName: groupName})"
:message="$t('You are about to delete {destination} from {groupName} call forwarding', {groupName: groupName, destination: getDestName()})"
@confirm="confirmDeleteDest"
/>
</div>
@ -165,21 +165,21 @@ export default {
if (this.allCallsFwd) {
return ''
} else {
return this.$t('pages.newCallForward.destinationTimeoutLabel')
return this.$t('Then after ')
}
},
labelFront () {
if (this.allCallsFwd) {
return this.$t('pages.newCallForward.allCallsForwardedTo')
return this.$t('All calls forwarded to')
} else if (this.isVoiceMail() || this.isOfflineGroup() || this.isBusyGroup()) {
return this.$t('pages.newCallForward.destinationVoicemailLabel')
return this.$t('seconds finally forwarded to')
} else {
return this.$t('pages.newCallForward.destinationNumberLabel')
return this.$t('seconds forwarded to')
}
},
labelNumber () {
if (!this.destinationNumber || this.destinationNumber.length < 2) {
return this.$t('pages.newCallForward.destinationLabel')
return this.$t('Destination')
} else {
return this.destinationNumber
}
@ -195,7 +195,7 @@ export default {
isNaN(this.getOwnPhoneTimeout) === false
? this.getOwnPhoneTimeout
: destination.timeout
this.destinationNumber = this.isVoiceMail() ? `${this.$t('pages.newCallForward.voiceMailLabel')}` : destination.simple_destination
this.destinationNumber = this.isVoiceMail() ? `${this.$t('Voicemail')}` : destination.simple_destination
this.destinationIndex = this.index
},
async showNext () {
@ -280,7 +280,7 @@ export default {
return this.destination.simple_destination
? this.destination.simple_destination
: this.isVoiceMail()
? `${this.$t('pages.newCallForward.voiceMailLabel')}`
? `${this.$t('Voicemail')}`
: ''
},
movePopoverToTop () {

@ -4,13 +4,13 @@
class="csc-cf-dest-type"
@click="setSelectedDestinationType('destination')"
>
{{ $t('pages.newCallForward.numberLabel') }}
{{ $t('Number') }}
</div>
<div
class="csc-cf-dest-type"
@click="setSelectedDestinationType('voicemail')"
>
{{ $t('pages.newCallForward.voiceMailLabel') }}
{{ $t('Voicemail') }}
</div>
</div>
</template>

@ -4,19 +4,19 @@
class="csc-cf-dest-type"
@click="addDestinationsetUnconditional()"
>
{{ $t('pages.newCallForward.unconditionalLabel') }}
{{ $t('If available') }}
</div>
<div
class="csc-cf-dest-type"
@click="addDestinationsetOffline()"
>
{{ $t('pages.newCallForward.offlineLabel') }}
{{ $t('If not available') }}
</div>
<div
class="csc-cf-dest-type"
@click="addDestinationsetBusy()"
>
{{ $t('pages.newCallForward.busyLabel') }}
{{ $t('If busy') }}
</div>
</div>
</template>

@ -14,8 +14,8 @@
<csc-confirm-dialog
ref="confirmDialog"
title-icon="delete"
:title="$t('pages.newCallForward.cancelSourcesetDialogTitle', {name: sourceSetName})"
:message="$t('pages.newCallForward.cancelSourcesetText', {name: sourceSetName})"
:title="$t('Delete {name} sourceset', {name: sourceSetName})"
:message="$t('You are about to delete {name} sourceset', {name: sourceSetName})"
@confirm="confirmDeleteSourceset"
@closed="restorePopver"
/>
@ -42,7 +42,7 @@
<csc-input
ref="sourceInputField"
v-model="number"
:label="$t('callBlocking.number')"
:label="$t('Number')"
@submit="save()"
@error="errorNumber"
/>
@ -66,7 +66,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.close') }}
{{ $t('Close') }}
</q-btn>
<q-btn
flat
@ -74,7 +74,7 @@
icon="delete"
@mousedown.native="showRemoveDialog()"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</q-btn>
<div
v-if="loading"
@ -169,7 +169,7 @@ export default {
methods: {
async save () {
if (this.numberError || this.saveDisabled) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
}
try {
this.$store.dispatch('newCallForward/addGroupLoader', this.groupId)

@ -46,12 +46,12 @@ export default {
computed: {
selectedKeyLabel () {
const selectedValue = this.$attrs.value || { type: null }
let label = this.$t('pbxConfig.keyBothLabel')
let label = this.$t('Group/Seat/Pilot')
if (selectedValue.type !== null) {
label = ({
pilot: this.$t('pbxConfig.keyPilotLabel'),
seat: this.$t('pbxConfig.keySeatLabel'),
group: this.$t('pbxConfig.keyGroupLabel')
pilot: this.$t('Pilot'),
seat: this.$t('Seat'),
group: this.$t('Group')
})[selectedValue.type]
}
return label

@ -19,14 +19,14 @@
<csc-list-item-subtitle
v-if="!expanded"
>
{{ $t('pbxConfig.callQueueMaxLength') }}: {{ getDefaultData().max_queue_length }}
{{ $t('Maximum calls in queue') }}: {{ getDefaultData().max_queue_length }}
</csc-list-item-subtitle>
</q-slide-transition>
<q-slide-transition>
<csc-list-item-subtitle
v-if="!expanded"
>
{{ $t('pbxConfig.callQueueWrapUpTime') }}: {{ getDefaultData().queue_wrap_up_time }}
{{ $t('Wrap up time') }}: {{ getDefaultData().queue_wrap_up_time }}
</csc-list-item-subtitle>
</q-slide-transition>
</template>
@ -36,7 +36,7 @@
icon-color="negative"
@click="remove"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
<template
@ -44,7 +44,7 @@
>
<q-input
v-model="changes.max_queue_length"
:label="$t('pbxConfig.callQueueMaxLength')"
:label="$t('Maximum calls in queue')"
:error="$v.changes.max_queue_length.$error"
:error-message="queueMaxLengthErrorMessage"
@input="$v.changes.max_queue_length.$touch"
@ -65,8 +65,8 @@
</q-input>
<q-input
v-model="changes.queue_wrap_up_time"
:suffix="$t('pbxConfig.seconds')"
:label="$t('pbxConfig.callQueueWrapUpTime')"
:suffix="$t('seconds')"
:label="$t('Wrap up time')"
:error="$v.changes.queue_wrap_up_time.$error"
:error-message="queueWrapUpTimeErrorMessage"
@input="$v.changes.queue_wrap_up_time.$touch"
@ -178,17 +178,17 @@ export default {
},
queueMaxLengthErrorMessage () {
if (!this.$v.changes.max_queue_length.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.queueLength')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Queue Length')
})
} else if (!this.$v.changes.max_queue_length.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pbxConfig.queueLength'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Queue Length'),
minValue: this.$v.changes.max_queue_length.$params.minValue.min
})
} else if (!this.$v.changes.max_queue_length.maxValue) {
return this.$t('validationErrors.maxValueSecond', {
field: this.$t('pbxConfig.queueLength'),
return this.$t('{field} must be maximum of {maxValue} seconds', {
field: this.$t('Queue Length'),
maxValue: this.$v.changes.max_queue_length.$params.maxValue.max
})
} else {
@ -197,17 +197,17 @@ export default {
},
queueWrapUpTimeErrorMessage () {
if (!this.$v.changes.queue_wrap_up_time.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.wrapUpTime')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Wrap Up Time')
})
} else if (!this.$v.changes.queue_wrap_up_time.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pbxConfig.wrapUpTime'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Wrap Up Time'),
minValue: this.$v.changes.queue_wrap_up_time.$params.minValue.min
})
} else if (!this.$v.changes.queue_wrap_up_time.maxValue) {
return this.$t('validationErrors.maxValueSecond', {
field: this.$t('pbxConfig.wrapUpTime'),
return this.$t('{field} must be maximum of {maxValue} seconds', {
field: this.$t('Wrap Up Time'),
maxValue: this.$v.changes.queue_wrap_up_time.$params.maxValue.max
})
} else {

@ -6,7 +6,7 @@
map-options
:disable="loading || subscriberOptionsLoading"
:readonly="loading"
:label="$t('pbxConfig.queueExtensionName')"
:label="$t('Group/Seat/Pilot')"
:options="options"
/>
<q-input
@ -15,7 +15,7 @@
:error-message="maxQueueLengthErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.queueLength')"
:label="$t('Queue Length')"
default="3"
@input="$v.data.max_queue_length.$touch"
/>
@ -25,8 +25,8 @@
:error-message="wrapUpTimeErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.wrapUpTime')"
:suffix="$t('pbxConfig.seconds')"
:label="$t('Wrap Up Time')"
:suffix="$t('seconds')"
@input="$v.data.queue_wrap_up_time.$touch"
/>
<div
@ -39,7 +39,7 @@
icon="clear"
@click="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -49,7 +49,7 @@
icon="filter_none"
@click="save()"
>
{{ $t('pbxConfig.createConfig') }}
{{ $t('Create Call Queue') }}
</q-btn>
</div>
<csc-object-spinner
@ -122,17 +122,17 @@ export default {
computed: {
maxQueueLengthErrorMessage () {
if (!this.$v.data.max_queue_length.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.queueLength')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Queue Length')
})
} else if (!this.$v.data.max_queue_length.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pbxConfig.queueLength'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Queue Length'),
minValue: this.$v.data.max_queue_length.$params.minValue.min
})
} else if (!this.$v.data.max_queue_length.maxValue) {
return this.$t('validationErrors.maxValueSecond', {
field: this.$t('pbxConfig.queueLength'),
return this.$t('{field} must be maximum of {maxValue} seconds', {
field: this.$t('Queue Length'),
maxValue: this.$v.data.max_queue_length.$params.maxValue.max
})
} else {
@ -141,17 +141,17 @@ export default {
},
wrapUpTimeErrorMessage () {
if (!this.$v.data.queue_wrap_up_time.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.wrapUpTime')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Wrap Up Time')
})
} else if (!this.$v.data.queue_wrap_up_time.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pbxConfig.wrapUpTime'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Wrap Up Time'),
minValue: this.$v.data.queue_wrap_up_time.$params.minValue.min
})
} else if (!this.$v.data.queue_wrap_up_time.maxValue) {
return this.$t('validationErrors.maxValueSecond', {
field: this.$t('pbxConfig.wrapUpTime'),
return this.$t('{field} must be maximum of {maxValue} seconds', {
field: this.$t('Wrap Up Time'),
maxValue: this.$v.data.queue_wrap_up_time.$params.maxValue.max
})
} else {

@ -17,14 +17,14 @@
<csc-list-item-subtitle
v-if="!expanded"
>
{{ $t('pbxConfig.deviceIdentifier') }}: {{ device.identifier }}
{{ $t('MAC address') }}: {{ device.identifier }}
</csc-list-item-subtitle>
</q-slide-transition>
<q-slide-transition>
<csc-list-item-subtitle
v-if="!expanded"
>
{{ $t('pbxConfig.deviceModel') }}: {{ profile.name }}
{{ $t('Phone model') }}: {{ profile.name }}
</csc-list-item-subtitle>
</q-slide-transition>
</template>
@ -36,7 +36,7 @@
icon-color="negative"
@click="deleteDevice"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
<template
@ -44,7 +44,7 @@
>
<q-input
v-model="changes.stationName"
:label="$t('pbxConfig.deviceStationName')"
:label="$t('Station name')"
@keyup.enter="save"
>
<template
@ -60,7 +60,7 @@
</template>
</q-input>
<q-field
:label="$t('pbxConfig.deviceIdentifier')"
:label="$t('MAC address')"
>
<q-input
v-model="changes.identifier"

@ -6,7 +6,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.deviceStationName')"
:label="$t('Station name')"
:error="$v.formData.stationName.$error"
:error-message="stationNameErrorMessage"
@input="$v.formData.stationName.$touch"
@ -16,7 +16,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.deviceIdentifier')"
:label="$t('MAC address')"
:error="$v.formData.identifier.$error"
:error-message="identifierErrorMessage"
@input="$v.formData.identifier.$touch"
@ -40,7 +40,7 @@
:disable="loading"
@click="cancel"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -49,7 +49,7 @@
:disable="$v.formData.$invalid || formData.profile === null || loading"
@click="submit"
>
{{ $t('pbxConfig.createDevice') }}
{{ $t('Create device') }}
</q-btn>
</div>
<csc-object-spinner
@ -113,12 +113,12 @@ export default {
computed: {
stationNameErrorMessage () {
if (!this.$v.formData.stationName.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.deviceStationName')
return this.$t('{field} is required', {
field: this.$t('Station name')
})
} else if (!this.$v.formData.stationName.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.deviceStationName'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Station name'),
maxLength: this.$v.formData.stationName.$params.maxLength.max
})
} else {
@ -127,11 +127,11 @@ export default {
},
identifierErrorMessage () {
if (!this.$v.formData.identifier.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.deviceIdentifier')
return this.$t('{field} is required', {
field: this.$t('MAC address')
})
} else if (!this.$v.formData.identifier.customMacAddress) {
return this.$t('validationErrors.macAddress')
return this.$t('Input a valid mac address')
} else {
return ''
}

@ -47,7 +47,7 @@
<div
class="csc-device-key-title-main"
>
{{ selectedKeySetName }}: {{ $t('pbxConfig.deviceKeyType') }} {{ selectedKeyNumber }}
{{ selectedKeySetName }}: {{ $t('Lamp/Key') }} {{ selectedKeyNumber }}
</div>
</div>
</div>
@ -62,7 +62,7 @@
v-model="selectedKeyType"
emit-value
map-options
:label="$t('pbxConfig.deviceKeyType')"
:label="$t('Lamp/Key')"
:options="typeOptions"
@input="keyTypeChanged"
>
@ -87,7 +87,7 @@
:big="isMobile"
@click="closeKeyOverlay()"
>
{{ $t('buttons.close') }}
{{ $t('Close') }}
</q-btn>
</div>
</div>
@ -207,19 +207,19 @@ export default {
const options = []
if (this.selectedKey !== null && this.selectedKey.keySet.can_blf) {
options.push({
label: this.$t('pbxConfig.keyTypeBLF'),
label: this.$t('Busy Lamp Field'),
value: 'blf'
})
}
if (this.selectedKey !== null && this.selectedKey.keySet.can_private) {
options.push({
label: this.$t('pbxConfig.keyTypePrivate'),
label: this.$t('Private'),
value: 'private'
})
}
if (this.selectedKey !== null && this.selectedKey.keySet.can_shared) {
options.push({
label: this.$t('pbxConfig.keyTypeShared'),
label: this.$t('Shared'),
value: 'shared'
})
}

@ -10,7 +10,7 @@
v-model="filterTypeModel"
dense
:options="filterTypeOptions"
:label="$t('pbxConfig.seatsFiltersFilterByLabel')"
:label="$t('Filter by')"
:disable="loading"
/>
</div>
@ -23,7 +23,7 @@
type="text"
dense
:disable="loading || filterType === null"
:label="(filterType === null) ? $t('pbxConfig.seatsFilterInputLabel') : filterTypeModel.label"
:label="(filterType === null) ? $t('Type something') : filterTypeModel.label"
@keypress.enter="triggerFilter"
>
<template
@ -121,13 +121,13 @@ export default {
const options = []
this.subscriberList.forEach((subscriber) => {
let icon = 'person'
let subscriberTypeTitle = this.$t('pbxConfig.keySeatLabel')
let subscriberTypeTitle = this.$t('Seat')
if (subscriber.is_pbx_group) {
icon = 'group'
subscriberTypeTitle = this.$t('pbxConfig.keyGroupLabel')
subscriberTypeTitle = this.$t('Group')
} else if (subscriber.is_pbx_pilot) {
icon = 'person_outline'
subscriberTypeTitle = this.$t('pbxConfig.keyPilotLabel')
subscriberTypeTitle = this.$t('Pilot')
}
options.push({
label: subscriber.display_name || subscriber.webusername,
@ -148,27 +148,27 @@ export default {
filterTypeOptions () {
return [
{
label: this.$t('pbxConfig.deviceStationName'),
label: this.$t('Station name'),
value: 'station_name',
control: 'input'
},
{
label: this.$t('pbxConfig.deviceIdentifier'),
label: this.$t('MAC address'),
value: 'identifier',
control: 'input'
},
{
label: this.$t('pbxConfig.deviceModel'),
label: this.$t('Phone model'),
value: 'profile_id',
control: 'select'
},
{
label: this.$t('pbxConfig.extension'),
label: this.$t('Extension'),
value: 'pbx_extension',
control: 'input'
},
{
label: this.$t('pbxConfig.queueExtensionName'),
label: this.$t('Group/Seat/Pilot'),
value: 'display_name',
control: 'select'
}

@ -17,7 +17,7 @@
<csc-list-item-subtitle
v-if="!expanded"
>
{{ $t('pbxConfig.extension') }}: {{ group.pbx_extension }}
{{ $t('Extension') }}: {{ group.pbx_extension }}
</csc-list-item-subtitle>
</q-slide-transition>
<q-slide-transition>
@ -27,7 +27,7 @@
<span
v-if="group.pbx_groupmember_ids.length > 0"
>
{{ $t('pbxConfig.seats') }}:
{{ $t('Seats') }}:
<span
v-for="seatId in group.pbx_groupmember_ids"
:key="seatId"
@ -48,7 +48,7 @@
color="info"
size="24px"
/>
{{ $t('pbxConfig.noSeatAssigned') }}
{{ $t('No seats') }}
</span>
</csc-list-item-subtitle>
</q-slide-transition>
@ -61,13 +61,13 @@
icon-color="negative"
@click="deleteSeat"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
<template slot="body">
<q-input
v-model="changes.name"
:label="$t('pbxConfig.name')"
:label="$t('Name')"
@keyup.enter="save"
>
<template
@ -87,7 +87,7 @@
hide-hint
:error="$v.changes.extension.$error"
:error-message="extensionErrorMessage"
:label="$t('pbxConfig.extension')"
:label="$t('Extension')"
:hint="getExtensionHint"
@keyup.enter="save"
@input="$v.changes.extension.$touch"
@ -108,14 +108,14 @@
readonly
disable
:value="getPrimaryNumber"
:label="$t('pbxConfig.primaryNumber')"
:label="$t('Primary Number')"
/>
<q-select
v-model="changes.huntPolicy"
emit-value
map-options
radio
:label="$t('pbxConfig.huntPolicy')"
:label="$t('Hunt Policy')"
:options="huntPolicyOptions"
>
<template
@ -132,7 +132,7 @@
</q-select>
<q-input
v-model="changes.huntTimeout"
:label="$t('pbxConfig.huntTimeout')"
:label="$t('Hunt Timeout')"
@keyup.enter="save"
>
<template
@ -153,7 +153,7 @@
map-options
use-chips
multiple
:label="$t('pbxConfig.aliasNumbers')"
:label="$t('Alias Numbers')"
:options="aliasNumberOptions"
>
<template
@ -174,7 +174,7 @@
map-options
use-chips
multiple
:label="$t('pbxConfig.seats')"
:label="$t('Seats')"
:options="seatOptions"
>
<template
@ -194,7 +194,7 @@
emit-value
map-options
radio
:label="$t('pbxConfig.soundSet')"
:label="$t('Sound Set')"
:options="soundSetOptions"
>
<template
@ -214,7 +214,7 @@
icon="filter_none"
flat
color="primary"
:label="$t('pbxConfig.callQueue')"
:label="$t('Call Queue')"
@click="jumpToCallQueue"
/>
</template>

@ -15,7 +15,7 @@
:error-message="groupNameErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.groupName')"
:label="$t('Group Name')"
data-cy="group-name"
@input="$v.data.name.$touch"
/>
@ -27,7 +27,7 @@
:error-message="extensionErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.extension')"
:label="$t('Extension')"
:hint="getExtensionHint"
data-cy="group-extension"
@input="$v.data.extension.$touch"
@ -40,7 +40,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.huntPolicy')"
:label="$t('Hunt Policy')"
:options="huntPolicyOptions"
data-cy="group-hunt-policy"
/>
@ -52,8 +52,8 @@
:error-message="huntTimeoutErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.huntTimeout')"
:suffix="$t('pbxConfig.seconds')"
:label="$t('Hunt Timeout')"
:suffix="$t('seconds')"
:min="1"
:max="3600"
data-cy="group-hunt-timeout"
@ -73,7 +73,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.aliasNumbers')"
:label="$t('Alias Numbers')"
:options="aliasNumberOptions"
data-cy="group-alias-numbers"
/>
@ -87,7 +87,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.seats')"
:label="$t('Seats')"
:options="seatOptions"
data-cy="group-seats"
/>
@ -99,7 +99,7 @@
hide-bottom-space
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.soundSet')"
:label="$t('Sound Set')"
:options="soundSetOptions"
data-cy="group-sound-set"
/>
@ -114,7 +114,7 @@
data-cy="group-btn-clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -125,7 +125,7 @@
data-cy="group-btn-save"
@click="save()"
>
{{ $t('pbxConfig.createGroup') }}
{{ $t('Create group') }}
</q-btn>
</div>
<csc-object-spinner
@ -209,12 +209,12 @@ export default {
]),
groupNameErrorMessage () {
if (!this.$v.data.name.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.groupName')
return this.$t('{field} is required', {
field: this.$t('Group Name')
})
} else if (!this.$v.data.name.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.groupName'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Group Name'),
maxLength: this.$v.data.name.$params.maxLength.max
})
} else {
@ -223,17 +223,17 @@ export default {
},
extensionErrorMessage () {
if (!this.$v.data.extension.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.extension')
return this.$t('{field} is required', {
field: this.$t('Extension')
})
} else if (!this.$v.data.extension.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.extension'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Extension'),
maxLength: this.$v.data.extension.$params.maxLength.max
})
} else if (!this.$v.data.extension.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.extension')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Extension')
})
} else if (!this.$v.data.extension.isInRange) {
return this.getExtensionHint
@ -243,21 +243,21 @@ export default {
},
huntTimeoutErrorMessage () {
if (!this.$v.data.huntTimeout.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.huntTimeoutSentence')
return this.$t('{field} is required', {
field: this.$t('Hunt timeout')
})
} else if (!this.$v.data.huntTimeout.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.huntTimeoutSentence')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Hunt timeout')
})
} else if (!this.$v.data.huntTimeout.minValue) {
return this.$t('validationErrors.minValueSecond', {
field: this.$t('pbxConfig.huntTimeoutSentence'),
return this.$t('{field} must be at least {minValue} second', {
field: this.$t('Hunt timeout'),
minValue: this.$v.data.huntTimeout.$params.minValue.min
})
} else if (!this.$v.data.huntTimeout.maxValue) {
return this.$t('validationErrors.maxValueSecond', {
field: this.$t('pbxConfig.huntTimeoutSentence'),
return this.$t('{field} must be maximum of {maxValue} seconds', {
field: this.$t('Hunt timeout'),
maxValue: this.$v.data.huntTimeout.$params.maxValue.max
})
} else {

@ -10,7 +10,7 @@
v-model="filterTypeModel"
dense
:options="filterTypeOptions"
:label="$t('pbxConfig.seatsFiltersFilterByLabel')"
:label="$t('Filter by')"
:disable="loading"
data-cy="filter-type"
/>
@ -23,7 +23,7 @@
type="text"
dense
:disable="loading || filterType === null"
:label="(filterType === null) ? $t('pbxConfig.seatsFilterInputLabel') : filterTypeModel.label"
:label="(filterType === null) ? $t('Type something') : filterTypeModel.label"
data-cy="filter-value"
@keypress.enter="triggerFilter"
>
@ -91,19 +91,19 @@ export default {
filterTypeOptions () {
return [
{
label: this.$t('pbxConfig.groupName'),
label: this.$t('Group Name'),
value: 'display_name'
},
{
label: this.$t('pbxConfig.extension'),
label: this.$t('Extension'),
value: 'pbx_extension'
},
{
label: this.$t('pbxConfig.primaryNumber'),
label: this.$t('Primary Number'),
value: 'primary_number'
},
{
label: this.$t('pbxConfig.aliasNumbers'),
label: this.$t('Alias Numbers'),
value: 'alias'
}
]

@ -2,7 +2,7 @@
<q-select
:value="value"
:options="options"
:label="$t('pbxConfig.deviceModel')"
:label="$t('Phone model')"
emit-value
map-options
v-bind="$attrs"

@ -22,7 +22,7 @@
<template
v-if="currentSecretaryNumbers.length > 0"
>
{{ $t('pbxConfig.msConfigNumbersLabel') }}:
{{ $t('Secretary numbers') }}:
<span
v-for="number in currentSecretaryNumbers"
:key="number"
@ -44,7 +44,7 @@
color="info"
size="24px"
/>
{{ $t('pbxConfig.msConfigNoSecretaryNumbers') }}
{{ $t('No numbers assigned') }}
</span>
</template>
</csc-list-item-subtitle>
@ -56,7 +56,7 @@
icon-color="negative"
@click="remove"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
<template
@ -70,7 +70,7 @@
chips
:disable="loading || numberOptionsLoading"
:readonly="loading"
:label="$t('pbxConfig.msConfigNumberSelectionLabel')"
:label="$t('Select secretary numbers')"
:options="numberOptions"
>
<template

@ -6,7 +6,7 @@
map-options
:disable="loading || subscriberOptionsLoading"
:readonly="loading"
:label="$t('pbxConfig.msConfigSubscriberSelectionLabel')"
:label="$t('Select a manager')"
:options="subscriberOptions"
/>
<q-select
@ -18,7 +18,7 @@
map-options
:disable="loading || numberOptionsLoading"
:readonly="loading"
:label="$t('pbxConfig.msConfigNumberSelectionLabel')"
:label="$t('Select secretary numbers')"
:options="numberOptions"
/>
<div
@ -31,7 +31,7 @@
icon="clear"
@click="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -41,7 +41,7 @@
icon="arrow_forward"
@click="save()"
>
{{ $t('pbxConfig.msConfigCreationLabel') }}
{{ $t('Create Config') }}
</q-btn>
</div>
<csc-object-spinner

@ -27,12 +27,12 @@
<q-item-label
caption
>
{{ $t('pbxConfig.webusername') }}: <strong>{{ seat.webusername }}</strong>
{{ $t('Login') }}: <strong>{{ seat.webusername }}</strong>
</q-item-label>
<q-item-label
caption
>
{{ $t('pbxConfig.extension') }}: <strong>{{ seat.pbx_extension }}</strong>
{{ $t('Extension') }}: <strong>{{ seat.pbx_extension }}</strong>
</q-item-label>
<q-item-label
caption
@ -40,7 +40,7 @@
<span
v-if="seat.pbx_group_ids.length > 0"
>
{{ $t('pbxConfig.groups') }}:
{{ $t('Groups') }}:
<span
v-for="groupId in seat.pbx_group_ids"
:key="groupId"
@ -61,7 +61,7 @@
name="group"
size="16px"
/>
{{ $t('pbxConfig.noGroupAssigned') }}
{{ $t('No groups') }}
</span>
</q-item-label>
</q-item-section>
@ -73,7 +73,7 @@
<csc-popup-menu-item
icon="vpn_key"
color="primary"
:label="$t('pbxConfig.editPassword')"
:label="$t('Change Password')"
@click="showPasswordDialog"
/>
<csc-popup-menu-item-delete
@ -87,7 +87,7 @@
<q-toggle
v-model="changes.clirIntrapbx"
class="q-pa-sm"
:label="$t('pbxConfig.toggleIntraPbx')"
:label="$t('Hide number within own PBX')"
:disable="loading"
@input="changeIntraPbx"
/>
@ -106,7 +106,7 @@
/>
<q-input
v-model="changes.name"
:label="$t('pbxConfig.name')"
:label="$t('Name')"
:disable="loading"
@keyup.enter="save"
>
@ -128,7 +128,7 @@
hide-hint
:error="$v.changes.extension.$error"
:error-message="extensionErrorMessage"
:label="$t('pbxConfig.extension')"
:label="$t('Extension')"
:disable="loading"
:hint="getExtensionHint"
@keyup.enter="save"
@ -150,7 +150,7 @@
<q-input
readonly
disable
:label="$t('pbxConfig.primaryNumber')"
:label="$t('Primary Number')"
:value="getPrimaryNumber"
/>
<q-select
@ -160,7 +160,7 @@
emit-value
map-options
:options="aliasNumberOptions"
:label="$t('pbxConfig.aliasNumbers')"
:label="$t('Alias Numbers')"
:disable="loading"
>
<template
@ -183,7 +183,7 @@
emit-value
map-options
:options="groupOptions"
:label="$t('pbxConfig.groups')"
:label="$t('Groups')"
:disable="loading"
>
<template
@ -205,7 +205,7 @@
emit-value
map-options
:options="soundSetOptions"
:label="$t('pbxConfig.soundSet')"
:label="$t('Sound Set')"
:disable="loading"
>
<template
@ -224,7 +224,7 @@
<q-toggle
v-model="changes.clirIntrapbx"
class="q-pa-sm"
:label="$t('pbxConfig.toggleIntraPbx')"
:label="$t('Hide number within own PBX')"
:disable="loading"
@input="changeIntraPbx"
/>
@ -233,7 +233,7 @@
icon="filter_none"
flat
color="primary"
:label="$t('pbxConfig.callQueue')"
:label="$t('Call Queue')"
:disable="loading"
@click="jumpToCallQueue"
/>

@ -16,7 +16,7 @@
:error-message="seatNameErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.name')"
:label="$t('Name')"
@input="$v.data.name.$touch"
>
<template
@ -37,7 +37,7 @@
:error-message="extensionErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.extension')"
:label="$t('Extension')"
:hint="getExtensionHint"
@input="$v.data.extension.$touch"
>
@ -68,7 +68,7 @@
map-options
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.aliasNumbers')"
:label="$t('Alias Numbers')"
:options="aliasNumberOptions"
/>
<q-select
@ -81,7 +81,7 @@
map-options
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.groups')"
:label="$t('Groups')"
:options="groupOptions"
>
<template
@ -100,7 +100,7 @@
map-options
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.soundSet')"
:label="$t('Sound Set')"
:options="soundSetOptions"
>
<template
@ -113,7 +113,7 @@
</q-select>
<q-toggle
v-model="data.clirIntrapbx"
:label="$t('pbxConfig.toggleIntraPbx')"
:label="$t('Hide number within own PBX')"
:disable="loading"
class="q-pa-md"
dense
@ -128,7 +128,7 @@
color="default"
icon="clear"
:disable="loading"
:label="$t('buttons.cancel')"
:label="$t('Cancel')"
@click="cancel()"
/>
<q-btn
@ -137,7 +137,7 @@
icon="person"
:loading="loading"
:disable="$v.data.$invalid || loading"
:label="$t('pbxConfig.createSeat')"
:label="$t('Create seat')"
@click="save()"
/>
</div>
@ -210,12 +210,12 @@ export default {
]),
seatNameErrorMessage () {
if (!this.$v.data.name.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.seatName')
return this.$t('{field} is required', {
field: this.$t('Seat name')
})
} else if (!this.$v.data.name.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.seatName'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Seat name'),
maxLength: this.$v.data.name.$params.maxLength.max
})
} else {
@ -224,17 +224,17 @@ export default {
},
extensionErrorMessage () {
if (!this.$v.data.extension.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.extension')
return this.$t('{field} is required', {
field: this.$t('Extension')
})
} else if (!this.$v.data.extension.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.extension'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Extension'),
maxLength: this.$v.data.extension.$params.maxLength.max
})
} else if (!this.$v.data.extension.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('pbxConfig.extension')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('Extension')
})
} else if (!this.$v.data.extension.isInRange) {
return this.getExtensionHint
@ -244,12 +244,12 @@ export default {
},
webPasswordErrorMessage () {
if (!this.$v.data.webPassword.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.webPassword')
return this.$t('{field} is required', {
field: this.$t('Password')
})
} else if (!this.$v.data.webPassword.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.webPassword'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Password'),
maxLength: this.$v.data.webPassword.$params.maxLength.max
})
} else {

@ -12,7 +12,7 @@
map-options
dense
:options="filterTypeOptions"
:label="$t('pbxConfig.seatsFiltersFilterByLabel')"
:label="$t('Filter by')"
/>
</div>
<div
@ -23,7 +23,7 @@
type="text"
dense
:disable="filterType === null"
:label="$t('pbxConfig.seatsFilterInputLabel')"
:label="$t('Type something')"
@keypress.enter="triggerFilter"
>
<template
@ -49,7 +49,7 @@
<q-chip
v-for="(filterItem, index) in filters"
:key="index"
:label="$t('pbxConfig.seatsFiltersTypes.' + filterItem.name) + ': ' + filterItem.value"
:label="getFilterLabel(filterItem)"
:disable="false"
icon="filter_alt"
removable
@ -78,22 +78,32 @@ export default {
filterTypeOptions () {
return [
{
label: this.$t('pbxConfig.seatsFiltersTypes.display_name'),
label: this.$t('Name'),
value: 'display_name'
},
{
label: this.$t('pbxConfig.seatsFiltersTypes.pbx_extension'),
label: this.$t('Extension'),
value: 'pbx_extension'
},
{
label: this.$t('pbxConfig.seatsFiltersTypes.primary_number'),
label: this.$t('Primary Number'),
value: 'primary_number'
},
{
label: this.$t('pbxConfig.seatsFiltersTypes.alias_number'),
label: this.$t('Alias Number'),
value: 'alias_number'
}
]
},
getFilterLabel (filterItem) {
const filterNameTranslation = {
display_name: this.$t('Name'),
pbx_extension: this.$t('Extension'),
primary_number: this.$t('Primary Number'),
alias_number: this.$t('Alias Number')
}
const filterNameTitle = filterNameTranslation[filterItem.name] || this.$t('Unknown name')
return filterNameTitle + ': ' + filterItem.value
}
},
methods: {

@ -26,7 +26,7 @@
>
<q-checkbox
:value="soundSet.contract_default"
:label="$t('pbxConfig.soundSetContractDefault')"
:label="$t('Default')"
:left-label="true"
@input="saveAsDefault"
/>
@ -39,7 +39,7 @@
<q-input
v-model="changes.name"
:error="$v.changes.name.$error"
:label="$t('pbxConfig.soundSetName')"
:label="$t('Name')"
@input="$v.changes.name.$touch"
@keyup.enter="save"
>
@ -59,7 +59,7 @@
<q-input
v-model="changes.description"
:error="$v.changes.description.$error"
:label="$t('pbxConfig.soundSetDescription')"
:label="$t('Description')"
@input="$v.changes.description.$touch"
@keyup.enter="save"
>
@ -77,7 +77,7 @@
</template>
</q-input>
<q-checkbox
:label="$t('pbxConfig.soundSetDefault')"
:label="$t('Default sound set for all seats and groups')"
:value="soundSet.contract_default"
@input="saveAsDefault"
/>
@ -110,7 +110,7 @@
icon-color="negative"
@click="remove"
>
{{ $t('buttons.remove') }}
{{ $t('Remove') }}
</csc-list-menu-item>
</template>
</csc-list-item>

@ -6,7 +6,7 @@
:error-message="nameErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.name')"
:label="$t('Name')"
hide-bottom-space
@input="$v.data.name.$touch"
/>
@ -16,7 +16,7 @@
:error-message="descriptionErrorMessage"
:disable="loading"
:readonly="loading"
:label="$t('pbxConfig.description')"
:label="$t('Description')"
hide-bottom-space
@input="$v.data.description.$touch"
/>
@ -26,14 +26,14 @@
<q-checkbox
v-model="data.contract_default"
:disable="loading"
:label="$t('pbxConfig.soundSetUseAsDefault')"
:label="$t('Use as default for all seats and groups')"
/>
</div>
<div>
<q-checkbox
v-model="data.copy_from_default"
:disable="loading"
:label="$t('pbxConfig.soundSetUseLanguagePreset')"
:label="$t('Use language specific preset')"
@input="toggleLoadFiles"
/>
</div>
@ -45,7 +45,7 @@
radio
:disable="loading || !data.copy_from_default"
:readonly="loading"
:label="$t('pbxConfig.language')"
:label="$t('Language')"
:options="languageOptions"
/>
<div
@ -56,7 +56,7 @@
v-model="data.loopplay"
class="col-auto"
:disable="loading || !data.copy_from_default"
:label="$t('pbxConfig.soundSetPlayAllLoop')"
:label="$t('Play all files in loop')"
/>
</div>
<div
@ -69,7 +69,7 @@
icon="clear"
@click="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -79,7 +79,7 @@
:disable="$v.data.$invalid || !data.language"
@click="save()"
>
{{ $t('pbxConfig.createSoundSet') }}
{{ $t('Create sound set') }}
</q-btn>
</div>
<csc-object-spinner
@ -153,12 +153,12 @@ export default {
computed: {
nameErrorMessage () {
if (!this.$v.data.name.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.name')
return this.$t('{field} is required', {
field: this.$t('Name')
})
} else if (!this.$v.data.name.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.name'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Name'),
maxLength: this.$v.data.name.$params.maxLength.max
})
} else {
@ -167,12 +167,12 @@ export default {
},
descriptionErrorMessage () {
if (!this.$v.data.description.required) {
return this.$t('validationErrors.fieldRequired', {
field: this.$t('pbxConfig.description')
return this.$t('{field} is required', {
field: this.$t('Description')
})
} else if (!this.$v.data.description.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('pbxConfig.description'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('Description'),
maxLength: this.$v.data.description.$params.maxLength.max
})
} else {

@ -9,12 +9,12 @@
map-options
:disable="loading"
:readonly="loading"
:label="$t('speedDial.slot')"
:label="$t('Slot')"
:options="slotOptions"
/>
<csc-call-input
v-model="destination"
:label="$t('speedDial.destination')"
:label="$t('Destination')"
@submit="save"
@error="error"
/>
@ -28,7 +28,7 @@
icon="clear"
@mousedown.native="cancel()"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
v-if="!loading"
@ -38,7 +38,7 @@
:disable="destinationError"
@click="save()"
>
{{ $t('buttons.save') }}
{{ $t('Save') }}
</q-btn>
</div>
</div>
@ -52,7 +52,7 @@
flat
@click="enableForm()"
>
{{ $t('speedDial.addSpeedDial') }}
{{ $t('Add Speed Dial') }}
</q-btn>
</div>
<q-inner-loading
@ -109,7 +109,7 @@ export default {
enter: 'bounceInRight',
leave: 'bounceOutRight',
position: 'top-center',
html: this.$t('speedDial.addNoSlotsDialogText'),
html: this.$t('All available speed dial slots have already been assigned. Please delete one first.'),
icon: 'warning',
dismissible: true
})
@ -120,7 +120,7 @@ export default {
},
save () {
if (this.destinationError) {
showGlobalError(this.$t('validationErrors.generic'))
showGlobalError(this.$t('You have invalid form input. Please check and try again.'))
} else {
this.$emit('save', {
destination: this.destination,

@ -8,7 +8,7 @@
icon="lock"
flat
color="primary"
:label="$t('userSettings.changePassword')"
:label="$t('Change password')"
@click="enableInput"
/>
</div>
@ -24,7 +24,7 @@
v-model.trim="newPassword"
type="password"
clearable
:label="$t('userSettings.newPasswordLabel')"
:label="$t('New password')"
>
<template
v-slot:prepend
@ -38,7 +38,7 @@
v-model.trim="newPasswordRetyped"
type="password"
clearable
:label="$t('userSettings.newPasswordRetypedLabel')"
:label="$t('New password retyped')"
>
<template
v-slot:prepend
@ -58,7 +58,7 @@
icon="clear"
@click="cancel"
>
{{ $t('buttons.cancel') }}
{{ $t('Cancel') }}
</q-btn>
<q-btn
flat
@ -67,7 +67,7 @@
:disable="!isValid"
@click="openConfirmDialog"
>
{{ $t('userSettings.saveNewPassword') }}
{{ $t('Save new password') }}
</q-btn>
</div>
</div>
@ -131,8 +131,8 @@ export default {
},
openConfirmDialog () {
this.$q.dialog({
title: this.$t('userSettings.changePasswordDialogTitle'),
message: this.$t('userSettings.changePasswordDialogText'),
title: this.$t('Change login password'),
message: this.$t('You are about to change your login password. After the password was changed successfully, you get automatically logged out to authenticate with the new password. '),
color: 'primary',
cancel: true,
persistent: true

@ -7,7 +7,7 @@
v-model="changes.pin"
:loading="pinRequesting"
:disable="pinRequesting"
:label="$t('voicebox.label.changePin')"
:label="$t('Change PIN')"
:error="$v.changes.pin.$error"
:error-message="pinErrorMessage"
@keyup.enter="updatePin"
@ -44,7 +44,7 @@
v-model="changes.email"
:loading="emailRequesting"
:disable="emailRequesting"
:label="$t('voicebox.label.changeEmail')"
:label="$t('Change Email')"
:error="$v.changes.email.$error"
:error-message="emailErrorMessage"
@keyup.enter="updateEmail"
@ -179,20 +179,20 @@ export default {
computed: {
pinErrorMessage () {
if (!this.$v.changes.pin.maxLength) {
return this.$t('validationErrors.maxLength', {
field: this.$t('voicebox.pin'),
return this.$t('{field} must have at most {maxLength} letters', {
field: this.$t('PIN'),
maxLength: this.$v.changes.pin.$params.maxLength.max
})
} else if (!this.$v.changes.pin.numeric) {
return this.$t('validationErrors.numeric', {
field: this.$t('voicebox.pin')
return this.$t('{field} must consist of numeric characters only', {
field: this.$t('PIN')
})
} else {
return ''
}
},
emailErrorMessage () {
return this.$t('validationErrors.email')
return this.$t('Input a valid email address')
},
canToggleDelete () {
return this.attach
@ -324,14 +324,14 @@ export default {
if (this.pinHasChanged && !this.$v.changes.pin.$error) {
this.$store.dispatch('voicebox/updatePin', this.changes.pin)
} else {
showGlobalError(this.$t('validationErrors.pin'))
showGlobalError(this.$t('Input a valid PIN'))
}
},
updateEmail () {
if (this.emailHasChanged && !this.$v.changes.email.$error) {
this.$store.dispatch('voicebox/updateEmail', this.changes.email)
} else {
showGlobalError(this.$t('validationErrors.email'))
showGlobalError(this.$t('Input a valid email address'))
}
}
}

@ -21,27 +21,27 @@ export function smartTime ($date) {
const diffMinutes = Math.floor(diffSeconds / 60)
const momentDate = moment(date)
let seconds = i18n.t('filters.second')
let seconds = i18n.t('second')
if (diffSeconds > 1) {
seconds = i18n.t('filters.seconds')
seconds = i18n.t('seconds')
}
let minutes = 'minute'
if (diffSeconds > 120) {
minutes = i18n.t('filters.minutes')
minutes = i18n.t('minutes')
}
if (diffSeconds < 60) {
const descriptor = i18n.t('filters.ago')
const descriptor = i18n.t('ago')
return `${diffSeconds} ${seconds} ${descriptor}`
} else if (diffSeconds < 3600) {
const descriptor = i18n.t('filters.ago')
const descriptor = i18n.t('ago')
return `${diffMinutes} ${minutes} ${descriptor}`
} else if (isToday(date)) {
const descriptor = i18n.t('filters.today')
const descriptor = i18n.t('Today')
return `${descriptor}, ${momentDate.format('HH:mm')}`
} else if (isYesterday(date)) {
const descriptor = i18n.t('filters.yesterday')
const descriptor = i18n.t('Yesterday')
return `${descriptor}, ${momentDate.format('HH:mm')}`
} else if (isWithinLastWeek(date)) {
return momentDate.format('dddd, HH:mm')
@ -60,11 +60,21 @@ export const WeekdayMap = {
saturday: 7
}
export const WeekdayTranslationMap = {
sunday: i18n.t('Sunday'),
monday: i18n.t('Monday'),
tuesday: i18n.t('Tuesday'),
wednesday: i18n.t('Wednesday'),
thursday: i18n.t('Thursday'),
friday: i18n.t('Friday'),
saturday: i18n.t('Saturday')
}
export function weekday (weekdayNumber) {
let weekdayString = ''
Object.keys(WeekdayMap).forEach((weekday) => {
if (WeekdayMap[weekday] === weekdayNumber) {
weekdayString = i18n.t('pages.callForward.times.' + weekday)
weekdayString = WeekdayTranslationMap[weekday]
}
})
return weekdayString

@ -63,14 +63,14 @@ export function askForNotificationPermission () {
if (_.isObject(Notification)) {
Notification.requestPermission().then((perms) => {
if (perms === 'denied' || perms === 'default') {
showPermanentGlobalWarning(i18n.t('call.notificationBlocked'))
showPermanentGlobalWarning(i18n.t('You have blocked incoming call notifications.'))
}
resolve()
}).catch((err) => {
reject(err)
})
} else {
showPermanentGlobalWarning(i18n.t('call.notificationNotSupported'))
showPermanentGlobalWarning(i18n.t('Incoming call notifications are not supported.'))
resolve()
}
})
@ -83,7 +83,7 @@ export function enableIncomingCallNotifications () {
if (navigator.serviceWorker) {
return navigator.serviceWorker.register(serviceWorkerPath)
} else {
showPermanentGlobalWarning(i18n.t('call.notificationNotSupported'))
showPermanentGlobalWarning(i18n.t('Incoming call notifications are not supported.'))
resolve()
}
}).then(() => {
@ -92,7 +92,7 @@ export function enableIncomingCallNotifications () {
resolve()
}).catch((err) => {
console.debug(err)
showPermanentGlobalWarning(i18n.t('call.notificationFailed'))
showPermanentGlobalWarning(i18n.t('Could not enable incoming call notifications.'))
})
})
}
@ -101,7 +101,7 @@ export function showCallNotification (number) {
if (navigator.serviceWorker) {
navigator.serviceWorker.getRegistration(serviceWorkerPath).then((registration) => {
if (registration && registration.showNotification) {
registration.showNotification(i18n.t('call.notificationTitle', {
registration.showNotification(i18n.t('Incoming call from {number}', {
number: number
}), {
requireInteraction: true,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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

Loading…
Cancel
Save