config: fix translation key usage for API actions and elsewhere (#407)

- Adds API messages
- Fixes English strings to use keys
- Fixes/adds missing keys to en.json
- Fixes locale load/store issue across logout/login

FIxes #410

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Co-authored-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
davidjumani 2020-06-13 11:31:14 +05:30 committed by Rohit Yadav
parent 1edfce8786
commit a9bc272403
108 changed files with 492 additions and 306 deletions

View File

@ -27,9 +27,9 @@
<a-spin :spinning="loading">
<a-list style="min-width: 200px; max-width: 300px">
<a-list-item>
<a-list-item-meta title="Notifications">
<a-list-item-meta :title="$t('label.notifications')">
<a-avatar :style="{backgroundColor: '#6887d0', verticalAlign: 'middle'}" icon="notification" slot="avatar"/>
<a-button size="small" slot="description" @click="clearJobs">Clear All</a-button>
<a-button size="small" slot="description" @click="clearJobs">{{ $t('label.clear.list') }}</a-button>
</a-list-item-meta>
</a-list-item>
<a-list-item v-for="(job, index) in jobs" :key="index">

View File

@ -93,6 +93,10 @@ export default {
hi
}
},
mounted () {
this.language = Vue.ls.get('LOCALE') || 'en'
this.setLocale(this.language)
},
methods: {
moment,
onClick (e) {
@ -107,7 +111,7 @@ export default {
this.$i18n.locale = localeValue
this.language = localeValue
moment.locale(localeValue)
Vue.ls.set('current_locale', localeValue)
Vue.ls.set('LOCALE', localeValue)
}
}
}

View File

@ -29,20 +29,20 @@
<a-menu-item class="user-menu-item" key="0">
<router-link :to="{ path: '/accountuser/' + $store.getters.userInfo.id }">
<a-icon class="user-menu-item-icon" type="user"/>
<span class="user-menu-item-name">Profile</span>
<span class="user-menu-item-name">{{ $t('label.profilename') }}</span>
</router-link>
</a-menu-item>
<a-menu-item class="user-menu-item" key="1" disabled>
<a :href="docBase" target="_blank">
<a-icon class="user-menu-item-icon" type="question-circle-o"></a-icon>
<span class="user-menu-item-name">Help</span>
<span class="user-menu-item-name">{{ $t('label.help') }}</span>
</a>
</a-menu-item>
<a-menu-divider/>
<a-menu-item class="user-menu-item" key="2">
<a href="javascript:;" @click="handleLogout">
<a-icon class="user-menu-item-icon" type="logout"/>
<span class="user-menu-item-name">Logout</span>
<span class="user-menu-item-name">{{ $t('label.logout') }}</span>
</a>
</a-menu-item>
</a-menu>

View File

@ -169,12 +169,12 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.releasededicatedzoneresponse.jobid,
successMessage: `Successfully released dedicated zone`,
successMessage: this.$t('message.dedicated.zone.released'),
successMethod: () => {
this.parentFetchData()
this.dedicatedDomainId = null
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully released dedicated zone',
title: this.$t('message.dedicated.zone.released'),
jobid: response.releasededicatedzoneresponse.jobid,
status: 'progress'
})
@ -183,7 +183,7 @@ export default {
errorMethod: () => {
this.parentFetchData()
},
loadingMessage: `Releasing dedicated zone...`,
loadingMessage: this.$t('message.releasing.dedicated.zone'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -199,12 +199,12 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.releasededicatedpodresponse.jobid,
successMessage: `Successfully released dedicated pod`,
successMessage: this.$t('message.pod.dedication.released'),
successMethod: () => {
this.parentFetchData()
this.dedicatedDomainId = null
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully released dedicated pod',
title: this.$t('message.pod.dedication.released'),
jobid: response.releasededicatedpodresponse.jobid,
status: 'progress'
})
@ -213,7 +213,7 @@ export default {
errorMethod: () => {
this.parentFetchData()
},
loadingMessage: `Releasing dedicated pod...`,
loadingMessage: this.$t('message.releasing.dedicated.pod'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -229,12 +229,12 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.releasededicatedclusterresponse.jobid,
successMessage: `Successfully released dedicated cluster`,
successMessage: this.$t('message.cluster.dedication.released'),
successMethod: () => {
this.parentFetchData()
this.dedicatedDomainId = null
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully released dedicated cluster',
title: this.$t('message.cluster.dedication.released'),
jobid: response.releasededicatedclusterresponse.jobid,
status: 'progress'
})
@ -243,7 +243,7 @@ export default {
errorMethod: () => {
this.parentFetchData()
},
loadingMessage: `Releasing dedicated cluster...`,
loadingMessage: this.$t('message.releasing.dedicated.cluster'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -259,12 +259,12 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.releasededicatedhostresponse.jobid,
successMessage: `Successfully released dedicated host`,
successMessage: this.$t('message.host.dedication.released'),
successMethod: () => {
this.parentFetchData()
this.dedicatedDomainId = null
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully released dedicated host',
title: this.$t('message.host.dedication.released'),
jobid: response.releasededicatedhostresponse.jobid,
status: 'progress'
})
@ -273,7 +273,7 @@ export default {
errorMethod: () => {
this.parentFetchData()
},
loadingMessage: `Releasing dedicated host...`,
loadingMessage: this.$t('message.releasing.dedicated.host'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()

View File

@ -90,14 +90,14 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicatezoneresponse.jobid,
successMessage: `Successfully dedicated zone`,
successMessage: this.$t('label.zone.dedicated'),
successMethod: () => {
this.parentFetchData()
this.fetchParentData()
this.dedicatedDomainId = this.domainId
this.dedicatedDomainModal = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated zone',
title: this.$t('label.zone.dedicated'),
jobid: response.dedicatezoneresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -109,7 +109,7 @@ export default {
this.fetchParentData()
this.dedicatedDomainModal = false
},
loadingMessage: `Dedicating zone...`,
loadingMessage: this.$t('message.dedicating.zone'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -134,14 +134,14 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicatepodresponse.jobid,
successMessage: `Successfully dedicated pod`,
successMessage: this.$t('label.pod.dedicated'),
successMethod: () => {
this.parentFetchData()
this.fetchParentData()
this.dedicatedDomainId = this.domainId
this.dedicatedDomainModal = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated pod',
title: this.$t('label.pod.dedicated'),
jobid: response.dedicatepodresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -153,7 +153,7 @@ export default {
this.fetchParentData()
this.dedicatedDomainModal = false
},
loadingMessage: `Dedicating pod...`,
loadingMessage: this.$t('message.dedicating.pod'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -178,14 +178,14 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicateclusterresponse.jobid,
successMessage: `Successfully dedicated cluster`,
successMessage: this.$t('message.cluster.dedicated'),
successMethod: () => {
this.parentFetchData()
this.fetchParentData()
this.dedicatedDomainId = this.domainId
this.dedicatedDomainModal = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated cluster',
title: this.$t('message.cluster.dedicated'),
jobid: response.dedicateclusterresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -197,7 +197,7 @@ export default {
this.fetchParentData()
this.dedicatedDomainModal = false
},
loadingMessage: `Dedicating cluster...`,
loadingMessage: this.$t('message.dedicating.cluster'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()
@ -222,14 +222,14 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicatehostresponse.jobid,
successMessage: `Successfully dedicated host`,
successMessage: this.$t('message.host.dedicated'),
successMethod: () => {
this.parentFetchData()
this.fetchParentData()
this.dedicatedDomainId = this.domainId
this.dedicatedDomainModal = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated host',
title: this.$t('message.host.dedicated'),
jobid: response.dedicatehostresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -241,7 +241,7 @@ export default {
this.fetchParentData()
this.dedicatedDomainModal = false
},
loadingMessage: `Dedicating host...`,
loadingMessage: this.$t('message.dedicating.host'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.parentFetchData()

View File

@ -20,7 +20,7 @@
<a-alert
v-if="disableSettings"
banner
message="Please stop the virtual machine to access settings" />
:message="$t('message.action.settings.warning.vm.running')" />
<div v-else>
<div v-show="!showAddDetail">
<a-button type="dashed" style="width: 100%" icon="plus" @click="showAddDetail = true">{{ $t('label.add.setting') }}</a-button>
@ -31,14 +31,14 @@
:filterOption="filterOption"
:value="newKey"
:dataSource="Object.keys(detailOptions)"
placeholder="Name"
:placeholder="$t('label.name')"
@change="e => onAddInputChange(e, 'newKey')" />
<a-auto-complete
style="width: 100%"
:filterOption="filterOption"
:value="newValue"
:dataSource="detailOptions[newKey]"
placeholder="Value"
:placeholder="$t('label.value')"
@change="e => onAddInputChange(e, 'newValue')" />
<a-button type="primary" style="width: 25%" icon="plus" @click="addDetail">{{ $t('label.add.setting') }}</a-button>
<a-button type="dashed" style="width: 25%" icon="close" @click="showAddDetail = false">{{ $t('label.cancel') }}</a-button>

View File

@ -21,7 +21,7 @@
:dataSource="$route.meta.details">
<a-list-item slot="renderItem" slot-scope="item" v-if="item in resource">
<div>
<strong>{{ item === 'service' ? $t('label.supportedservices') : $t('label.' + item) }}</strong>
<strong>{{ item === 'service' ? $t('label.supportedservices') : $t('label.' + String(item).toLowerCase()) }}</strong>
<br/>
<div v-if="Array.isArray(resource[item]) && item === 'service'">
<div v-for="(service, idx) in resource[item]" :key="idx">

View File

@ -41,7 +41,7 @@
<span v-if="field.type==='boolean'">
<a-switch
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please provide input' }]
rules: [{ required: field.required, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="field.description"
/>
@ -50,7 +50,7 @@
<a-select
:loading="field.loading"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please select option' }]
rules: [{ required: field.required, message: `${this.$t('message.error.select')}` }]
}]"
:placeholder="field.description"
@ -63,7 +63,7 @@
<span v-else-if="field.type==='long'">
<a-input-number
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter a number' }]
rules: [{ required: field.required, message: `${this.$t('message.validate.number')}` }]
}]"
:placeholder="field.description"
/>
@ -71,15 +71,15 @@
<span v-else-if="field.name==='password'">
<a-input-password
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter input' }]
rules: [{ required: field.required, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="field.description"
/>
</span>
<span v-else">
<span v-else>
<a-input
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter input' }]
rules: [{ required: field.required, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="field.description"
/>

View File

@ -105,6 +105,7 @@
icon="barcode"
type="dashed"
size="small"
@click="$message.success('Copied to clipboard')"
v-clipboard:copy="resource.id" />
</a-tooltip>
<span style="margin-left: 10px;">{{ resource.id }}</span>
@ -498,13 +499,13 @@
<template slot="title">
<span>Copy {{ $t('label.apikey') }}</span>
</template>
<a-button shape="circle" type="dashed" size="small" v-clipboard:copy="resource.apikey">
<a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.apikey">
<a-icon type="copy"/>
</a-button>
</a-tooltip>
</strong>
<div>
{{ resource.apikey }}
{{ resource.apikey.substring(0, 20) }}...
</div>
</div> <br/>
<div class="user-keys">
@ -515,13 +516,13 @@
<template slot="title">
<span>Copy {{ $t('label.secretkey') }}</span>
</template>
<a-button shape="circle" type="dashed" size="small" v-clipboard:copy="resource.secretkey">
<a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.secretkey">
<a-icon type="copy"/>
</a-button>
</a-tooltip>
</strong>
<div>
{{ resource.secretkey }}
{{ resource.secretkey.substring(0, 20) }}...
</div>
</div>
</div>

View File

@ -60,17 +60,21 @@
</div>
-->
<a slot="name" slot-scope="text, record" href="javascript:;">
<span slot="name" slot-scope="text, record">
<div style="min-width: 120px">
<span v-if="$route.path.startsWith('/project')" style="margin-right: 5px">
<a-button type="dashed" size="small" shape="circle" icon="login" @click="changeProject(record)" />
</span>
<os-logo v-if="record.ostypename" :osName="record.ostypename" size="1x" style="margin-right: 5px" />
<console :resource="record" size="small" style="margin-right: 5px" />
<router-link :to="{ path: $route.path + '/' + record.id }" v-if="record.id">{{ text }}</router-link>
<router-link :to="{ path: $route.path + '/' + record.name }" v-else>{{ text }}</router-link>
<span v-if="$route.name === 'globalsetting'">{{ text }}</span>
<span v-else>
<router-link :to="{ path: $route.path + '/' + record.id }" v-if="record.id">{{ text }}</router-link>
<router-link :to="{ path: $route.path + '/' + record.name }" v-else>{{ text }}</router-link>
</span>
</div>
</a>
</span>
<a slot="displayname" slot-scope="text, record" href="javascript:;">
<router-link :to="{ path: $route.path + '/' + record.id }">{{ text }}</router-link>
</a>
@ -93,6 +97,12 @@
<a slot="vmname" slot-scope="text, record" href="javascript:;">
<router-link :to="{ path: '/vm/' + record.virtualmachineid }">{{ text }}</router-link>
</a>
<span slot="hypervisor" slot-scope="text, record">
<span v-if="$route.name === 'hypervisorcapability'">
<router-link :to="{ path: $route.path + '/' + record.id }">{{ text }}</router-link>
</span>
<span v-else>{{ text }}</span>
</span>
<template slot="state" slot-scope="text">
<status :text="text ? text : ''" displayText />
</template>
@ -286,8 +296,8 @@ export default {
!json.updateconfigurationresponse.configuration.isdynamic &&
['Admin'].includes(this.$store.getters.userInfo.roletype)) {
this.$notification.warning({
message: 'Status',
description: 'Please restart your management server(s) for your new settings to take effect.'
message: this.$t('label.status'),
description: this.$t('message.restart.mgmt.server')
})
}
}).catch(error => {

View File

@ -131,7 +131,7 @@ export default {
console.error(error)
this.$message.error('There was an error saving this setting.')
this.$notification.error({
message: 'Error',
message: this.$t('label.error'),
description: 'There was an error saving this setting. Please try again later.'
})
}).finally(() => {

View File

@ -21,7 +21,7 @@
<a-card :bordered="false">
<a-input-search
size="default"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="searchQuery"
@search="onSearch"
>

View File

@ -85,6 +85,7 @@ export default {
api: 'updateResourceCount',
icon: 'sync',
label: 'label.action.update.resource.count',
message: 'message.update.resource.count',
dataView: true,
args: ['account', 'domainid'],
mapping: {
@ -100,6 +101,7 @@ export default {
api: 'enableAccount',
icon: 'play-circle',
label: 'label.action.enable.account',
message: 'message.enable.account',
dataView: true,
show: (record) => { return record.state === 'disabled' || record.state === 'locked' },
params: { lock: 'false' }
@ -108,6 +110,7 @@ export default {
api: 'disableAccount',
icon: 'pause-circle',
label: 'label.action.disable.account',
message: 'message.disable.account',
dataView: true,
show: (record) => { return record.state === 'enabled' },
args: ['lock'],
@ -121,6 +124,7 @@ export default {
api: 'disableAccount',
icon: 'lock',
label: 'label.action.lock.account',
message: 'message.lock.account',
dataView: true,
show: (record) => { return record.state === 'enabled' },
args: ['lock'],
@ -150,6 +154,7 @@ export default {
api: 'deleteAccount',
icon: 'delete',
label: 'label.action.delete.account',
message: 'message.delete.account',
dataView: true,
hidden: (record) => { return record.name === 'admin' }
}

View File

@ -83,6 +83,7 @@ export default {
api: 'startVirtualMachine',
icon: 'caret-right',
label: 'label.action.start.instance',
message: 'message.action.start.instance',
docHelp: 'adminguide/virtual_machines.html#stopping-and-starting-vms',
dataView: true,
groupAction: true,
@ -113,6 +114,7 @@ export default {
api: 'restoreVirtualMachine',
icon: 'sync',
label: 'label.reinstall.vm',
message: 'message.reinstall.vm',
dataView: true,
args: ['virtualmachineid', 'templateid'],
show: (record) => { return ['Running', 'Stopped'].includes(record.state) },
@ -142,6 +144,7 @@ export default {
api: 'assignVirtualMachineToBackupOffering',
icon: 'folder-add',
label: 'label.backup.offering.assign',
message: 'label.backup.offering.assign',
dataView: true,
args: ['virtualmachineid', 'backupofferingid'],
show: (record) => { return !record.backupofferingid },
@ -185,6 +188,7 @@ export default {
api: 'removeVirtualMachineFromBackupOffering',
icon: 'scissor',
label: 'label.backup.offering.remove',
message: 'label.backup.offering.remove',
dataView: true,
args: ['virtualmachineid', 'forced'],
show: (record) => { return record.backupofferingid },
@ -214,6 +218,7 @@ export default {
api: 'detachIso',
icon: 'link',
label: 'label.action.detach.iso',
message: 'message.detach.iso.confirm',
dataView: true,
args: ['virtualmachineid'],
show: (record) => { return ['Running', 'Stopped'].includes(record.state) && 'isoid' in record && record.isoid },
@ -267,6 +272,7 @@ export default {
api: 'migrateVirtualMachine',
icon: 'drag',
label: 'label.migrate.instance.to.ps',
message: 'message.migrate.instance.to.ps',
dataView: true,
show: (record, store) => { return ['Stopped'].includes(record.state) && ['Admin'].includes(store.userInfo.roletype) },
args: ['storageid', 'virtualmachineid'],
@ -283,6 +289,7 @@ export default {
api: 'resetPasswordForVirtualMachine',
icon: 'key',
label: 'label.action.reset.password',
message: 'message.action.instance.reset.password',
dataView: true,
show: (record) => { return ['Running', 'Stopped'].includes(record.state) },
response: (result) => { return result.virtualmachine && result.virtualmachine.password ? `Password of the VM is ${result.virtualmachine.password}` : null }
@ -319,6 +326,7 @@ export default {
api: 'recoverVirtualMachine',
icon: 'medicine-box',
label: 'label.recover.vm',
message: 'message.recover.vm',
dataView: true,
show: (record, store) => { return ['Destroyed'].includes(record.state) && store.features.allowuserexpungerecovervm }
},
@ -334,6 +342,7 @@ export default {
api: 'expungeVirtualMachine',
icon: 'delete',
label: 'label.action.expunge.instance',
message: 'message.action.expunge.instance',
dataView: true,
show: (record, store) => { return ['Destroyed', 'Expunging'].includes(record.state) && store.features.allowuserexpungerecovervm }
},
@ -341,6 +350,7 @@ export default {
api: 'destroyVirtualMachine',
icon: 'delete',
label: 'label.action.destroy.instance',
message: 'message.action.destroy.instance',
args: ['expunge', 'volumeids'],
mapping: {
volumeids: {
@ -523,6 +533,7 @@ export default {
api: 'deleteAffinityGroup',
icon: 'delete',
label: 'label.delete.affinity.group',
message: 'message.delete.affinity.group',
dataView: true
}
]

View File

@ -26,8 +26,7 @@ export default {
title: 'label.global.settings',
icon: 'setting',
permission: ['listConfigurations'],
columns: ['name', 'description', 'category', 'value', 'actions'],
details: ['name', 'category', 'description', 'value']
columns: ['name', 'description', 'category', 'value', 'actions']
},
{
name: 'ldapsetting',
@ -50,6 +49,7 @@ export default {
api: 'deleteLdapConfiguration',
icon: 'delete',
label: 'label.remove.ldap',
message: 'message.remove.ldap',
dataView: true,
args: ['hostname'],
mapping: {
@ -65,16 +65,15 @@ export default {
title: 'label.hypervisor.capabilities',
icon: 'database',
permission: ['listHypervisorCapabilities'],
columns: ['hypervisor', 'hypervisorversion', 'maxguestslimit', 'maxdatavolumeslimit', 'maxhostspercluster'],
columns: ['hypervisor', 'hypervisorversion', 'maxguestslimit', 'maxhostspercluster'],
details: ['hypervisor', 'hypervisorversion', 'maxguestslimit', 'maxdatavolumeslimit', 'maxhostspercluster', 'securitygroupenabled', 'storagemotionenabled'],
actions: [
{
api: 'updateHypervisorCapabilities',
icon: 'edit',
label: 'label.edit',
dataView: true,
args: [
'id', 'maxguestslimit'
]
args: ['maxguestslimit']
}
]
}

View File

@ -76,6 +76,7 @@ export default {
api: 'updateResourceCount',
icon: 'sync',
label: 'label.action.update.resource.count',
message: 'message.update.resource.count',
listView: true,
dataView: true,
args: ['domainid'],

View File

@ -32,6 +32,7 @@ export default {
api: 'archiveEvents',
icon: 'book',
label: 'label.archive.events',
message: 'message.confirm.archive.selected.events',
listView: false,
dataView: true,
args: ['ids'],
@ -45,6 +46,7 @@ export default {
api: 'deleteEvents',
icon: 'delete',
label: 'label.delete.events',
message: 'message.confirm.remove.selected.events',
listView: false,
dataView: true,
args: ['ids'],

View File

@ -75,6 +75,7 @@ export default {
api: 'extractTemplate',
icon: 'cloud-download',
label: 'label.action.download.template',
message: 'message.action.download.template',
dataView: true,
show: (record) => { return record && record.isextractable },
args: ['zoneid', 'mode'],
@ -149,6 +150,7 @@ export default {
api: 'extractIso',
icon: 'cloud-download',
label: 'label.action.download.iso',
message: 'message.action.download.iso',
dataView: true,
show: (record) => { return record && record.isextractable },
args: ['zoneid', 'mode'],

View File

@ -77,6 +77,7 @@ export default {
api: 'archiveAlerts',
icon: 'book',
label: 'label.archive.alerts',
message: 'message.confirm.archive.selected.alerts',
dataView: true,
args: ['ids'],
mapping: {
@ -88,7 +89,8 @@ export default {
{
api: 'deleteAlerts',
icon: 'delete',
label: 'label.delete.events',
label: 'label.delete.alerts',
message: 'message.confirm.remove.selected.alerts',
dataView: true,
args: ['ids'],
mapping: {

View File

@ -47,6 +47,7 @@ export default {
api: 'updateCluster',
icon: 'play-circle',
label: 'label.action.enable.cluster',
message: 'message.action.enable.cluster',
dataView: true,
defaultArgs: { allocationstate: 'Enabled' },
show: (record) => { return record.allocationstate === 'Disabled' }
@ -55,6 +56,7 @@ export default {
api: 'updateCluster',
icon: 'pause-circle',
label: 'label.action.disable.cluster',
message: 'message.action.disable.cluster',
dataView: true,
defaultArgs: { allocationstate: 'Disabled' },
show: (record) => { return record.allocationstate === 'Enabled' }
@ -63,6 +65,7 @@ export default {
api: 'updateCluster',
icon: 'plus-square',
label: 'label.action.manage.cluster',
message: 'message.action.manage.cluster',
dataView: true,
defaultArgs: { managedstate: 'Managed' },
show: (record) => { return record.clustertype === 'CloudManaged' && ['PrepareUnmanaged', 'Unmanaged'].includes(record.state) }
@ -71,6 +74,7 @@ export default {
api: 'updateCluster',
icon: 'minus-square',
label: 'label.action.unmanage.cluster',
message: 'message.action.unmanage.cluster',
dataView: true,
defaultArgs: { managedstate: 'Unmanaged' },
show: (record) => { return record.clustertype === 'CloudManaged' && record.state === 'Enabled' }
@ -79,6 +83,7 @@ export default {
api: 'enableOutOfBandManagementForCluster',
icon: 'plus-circle',
label: 'label.outofbandmanagement.enable',
message: 'label.outofbandmanagement.enable',
dataView: true,
show: (record) => {
return !record.resourcedetails || !record.resourcedetails.outOfBandManagementEnabled ||
@ -95,6 +100,7 @@ export default {
api: 'disableOutOfBandManagementForCluster',
icon: 'minus-circle',
label: 'label.outofbandmanagement.disable',
message: 'label.outofbandmanagement.disable',
dataView: true,
show: (record) => {
return record.resourcedetails && record.resourcedetails.outOfBandManagementEnabled &&
@ -111,6 +117,7 @@ export default {
api: 'enableHAForCluster',
icon: 'eye',
label: 'label.ha.enable',
message: 'label.ha.enable',
dataView: true,
show: (record) => {
return !record.resourcedetails || !record.resourcedetails.resourceHAEnabled ||
@ -127,6 +134,7 @@ export default {
api: 'disableHAForCluster',
icon: 'eye-invisible',
label: 'label.ha.disable',
message: 'label.ha.disable',
dataView: true,
show: (record) => {
return record.resourcedetails && record.resourcedetails.resourceHAEnabled &&
@ -143,6 +151,7 @@ export default {
api: 'deleteCluster',
icon: 'delete',
label: 'label.action.delete.cluster',
message: 'message.action.delete.cluster',
dataView: true
}
]

View File

@ -61,6 +61,7 @@ export default {
api: 'provisionCertificate',
icon: 'safety-certificate',
label: 'label.action.secure.host',
message: 'message.action.secure.host',
dataView: true,
show: (record) => { return record.hypervisor === 'KVM' },
args: ['hostid'],
@ -74,6 +75,7 @@ export default {
api: 'reconnectHost',
icon: 'forward',
label: 'label.action.force.reconnect',
message: 'message.confirm.action.force.reconnect',
dataView: true,
show: (record) => { return ['Disconnected', 'Up'].includes(record.state) }
},
@ -81,6 +83,7 @@ export default {
api: 'updateHost',
icon: 'pause-circle',
label: 'label.disable.host',
message: 'message.confirm.disable.host',
dataView: true,
defaultArgs: { allocationstate: 'Disable' },
show: (record) => { return record.resourcestate === 'Enabled' }
@ -89,6 +92,7 @@ export default {
api: 'updateHost',
icon: 'play-circle',
label: 'label.enable.host',
message: 'message.confirm.enable.host',
dataView: true,
defaultArgs: { allocationstate: 'Enable' },
show: (record) => { return record.resourcestate === 'Disabled' }
@ -97,6 +101,7 @@ export default {
api: 'prepareHostForMaintenance',
icon: 'plus-square',
label: 'label.action.enable.maintenance.mode',
message: 'message.action.host.enable.maintenance.mode',
dataView: true,
show: (record) => { return record.resourcestate === 'Enabled' }
},
@ -104,6 +109,7 @@ export default {
api: 'cancelHostMaintenance',
icon: 'minus-square',
label: 'label.action.cancel.maintenance.mode',
message: 'message.action.cancel.maintenance.mode',
dataView: true,
show: (record) => { return record.resourcestate === 'Maintenance' || record.resourcestate === 'ErrorInMaintenance' || record.resourcestate === 'PrepareForMaintenance' }
},
@ -111,6 +117,7 @@ export default {
api: 'configureOutOfBandManagement',
icon: 'setting',
label: 'label.outofbandmanagement.configure',
message: 'label.outofbandmanagement.configure',
dataView: true,
args: ['hostid', 'address', 'port', 'username', 'password', 'driver'],
mapping: {
@ -126,6 +133,7 @@ export default {
api: 'enableOutOfBandManagementForHost',
icon: 'plus-circle',
label: 'label.outofbandmanagement.enable',
message: 'label.outofbandmanagement.enable',
dataView: true,
show: (record) => {
return !record.outofbandmanagement || !record.outofbandmanagement.enabled ||
@ -142,6 +150,7 @@ export default {
api: 'disableOutOfBandManagementForHost',
icon: 'minus-circle',
label: 'label.outofbandmanagement.disable',
message: 'label.outofbandmanagement.disable',
dataView: true,
show: (record) => {
return record.outofbandmanagement && record.outofbandmanagement.enabled &&
@ -158,6 +167,7 @@ export default {
api: 'issueOutOfBandManagementPowerAction',
icon: 'login',
label: 'label.outofbandmanagement.action.issue',
message: 'label.outofbandmanagement.action.issue',
dataView: true,
show: (record) => {
return record.outofbandmanagement && record.outofbandmanagement.enabled &&
@ -174,6 +184,7 @@ export default {
api: 'changeOutOfBandManagementPassword',
icon: 'key',
label: 'label.outofbandmanagement.changepassword',
message: 'label.outofbandmanagement.changepassword',
dataView: true,
show: (record) => {
return record.outofbandmanagement && record.outofbandmanagement.enabled &&
@ -190,6 +201,7 @@ export default {
api: 'configureHAForHost',
icon: 'tool',
label: 'label.ha.configure',
message: 'label.ha.configure',
dataView: true,
args: ['hostid', 'provider'],
mapping: {
@ -205,6 +217,7 @@ export default {
api: 'enableHAForHost',
icon: 'eye',
label: 'label.ha.enable',
message: 'label.ha.enable',
dataView: true,
show: (record) => {
return !record.hostha || !record.hostha.haenable || record.hostha.haenable === false
@ -220,6 +233,7 @@ export default {
api: 'disableHAForHost',
icon: 'eye-invisible',
label: 'label.ha.disable',
message: 'label.ha.disable',
dataView: true,
show: (record) => {
return record.hostha && record.hostha.haenable &&

View File

@ -28,6 +28,7 @@ export default {
api: 'startInternalLoadBalancerVM',
icon: 'caret-right',
label: 'label.action.start.router',
message: 'message.confirm.start.lb.vm',
dataView: true,
show: (record) => { return record.state === 'Stopped' }
},

View File

@ -32,6 +32,7 @@ export default {
api: 'updateNetworkServiceProvider',
icon: 'stop',
label: 'label.disable.provider',
message: 'message.confirm.disable.provider',
dataView: true,
args: ['state'],
show: (record) => { return record.state === 'Enabled' },
@ -45,6 +46,7 @@ export default {
api: 'updateNetworkServiceProvider',
icon: 'right-circle',
label: 'label.enable.provider',
message: 'message.confirm.enable.provider',
dataView: true,
args: ['state'],
show: (record) => { return record.state === 'Disabled' },

View File

@ -17,7 +17,7 @@
export default {
name: 'physicalnetwork',
title: 'label.physical.networks',
title: 'label.physical.network',
icon: 'api',
hidden: true,
permission: ['listPhysicalNetworks'],
@ -122,6 +122,7 @@ export default {
api: 'deletePhysicalNetwork',
icon: 'delete',
label: 'label.action.delete.physical.network',
message: 'message.action.delete.physical.network',
dataView: true
}
]

View File

@ -51,6 +51,7 @@ export default {
api: 'updatePod',
icon: 'play-circle',
label: 'label.action.enable.pod',
message: 'message.action.enable.pod',
dataView: true,
show: (record) => { return record.allocationstate === 'Disabled' },
args: ['allocationstate'],
@ -64,6 +65,7 @@ export default {
api: 'updatePod',
icon: 'pause-circle',
label: 'label.action.disable.pod',
message: 'message.action.disable.pod',
dataView: true,
show: (record) => { return record.allocationstate === 'Enabled' },
args: ['allocationstate'],
@ -77,6 +79,7 @@ export default {
api: 'deletePod',
icon: 'delete',
label: 'label.action.delete.pod',
message: 'message.action.delete.pod',
dataView: true
}
]

View File

@ -54,6 +54,7 @@ export default {
api: 'enableStorageMaintenance',
icon: 'plus-square',
label: 'label.action.enable.maintenance.mode',
message: 'message.action.primarystorage.enable.maintenance.mode',
dataView: true,
show: (record) => { return ['Up', 'Connecting', 'Down', 'ErrorInMaintenance'].includes(record.state) }
},
@ -61,6 +62,7 @@ export default {
api: 'cancelStorageMaintenance',
icon: 'minus-square',
label: 'label.action.cancel.maintenance.mode',
message: 'message.action.cancel.maintenance.mode',
dataView: true,
show: (record) => { return ['Maintenance', 'PrepareForMaintenance', 'ErrorInMaintenance'].includes(record.state) }
},

View File

@ -28,6 +28,7 @@ export default {
api: 'startRouter',
icon: 'caret-right',
label: 'label.action.start.router',
message: 'message.action.start.router',
dataView: true,
show: (record) => { return record.state === 'Stopped' }
},
@ -44,6 +45,7 @@ export default {
api: 'rebootRouter',
icon: 'sync',
label: 'label.action.reboot.router',
message: 'message.action.reboot.router',
dataView: true,
hidden: (record) => { return record.state === 'Running' }
},
@ -51,6 +53,7 @@ export default {
api: 'scaleSystemVm',
icon: 'arrows-alt',
label: 'label.change.service.offering',
message: 'message.confirm.scale.up.router.vm',
dataView: true,
args: ['serviceofferingid'],
show: (record) => { return record.hypervisor !== 'KVM' }
@ -59,6 +62,7 @@ export default {
api: 'upgradeRouterTemplate',
icon: 'fullscreen',
label: 'label.upgrade.router.newer.template',
message: 'message.confirm.upgrade.router.newer.template',
dataView: true,
groupAction: true,
show: (record) => { return record.requiresupgrade }
@ -111,6 +115,7 @@ export default {
api: 'destroyRouter',
icon: 'delete',
label: 'label.destroy.router',
message: 'message.confirm.destroy.router',
dataView: true,
show: (record) => { return ['Running', 'Error', 'Stopped'].includes(record.state) }
}

View File

@ -42,6 +42,7 @@ export default {
api: 'deleteImageStore',
icon: 'delete',
label: 'label.action.delete.secondary.storage',
message: 'message.action.delete.secondary.storage',
dataView: true
}
]

View File

@ -27,6 +27,7 @@ export default {
api: 'startSystemVm',
icon: 'caret-right',
label: 'label.action.start.systemvm',
message: 'message.action.start.systemvm',
dataView: true,
show: (record) => { return record.state === 'Stopped' }
},
@ -43,6 +44,7 @@ export default {
api: 'rebootSystemVm',
icon: 'sync',
label: 'label.action.reboot.systemvm',
message: 'message.action.reboot.systemvm',
dataView: true,
show: (record) => { return record.state === 'Running' }
},
@ -50,6 +52,7 @@ export default {
api: 'scaleSystemVm',
icon: 'arrows-alt',
label: 'label.change.service.offering',
message: 'message.confirm.scale.up.system.vm',
dataView: true,
show: (record) => { return record.hypervisor !== 'KVM' },
args: ['serviceofferingid']
@ -102,6 +105,7 @@ export default {
api: 'destroySystemVm',
icon: 'delete',
label: 'label.action.destroy.systemvm',
message: 'message.action.destroy.systemvm',
dataView: true,
show: (record) => { return ['Running', 'Error', 'Stopped'].includes(record.state) }
}

View File

@ -88,6 +88,7 @@ export default {
api: 'updateZone',
icon: 'pause-circle',
label: 'label.action.disable.zone',
message: 'message.action.disable.zone',
dataView: true,
defaultArgs: { allocationstate: 'Disabled' },
show: (record) => { return record.allocationstate === 'Enabled' }
@ -96,6 +97,7 @@ export default {
api: 'updateZone',
icon: 'play-circle',
label: 'label.action.enable.zone',
message: 'message.action.enable.zone',
dataView: true,
defaultArgs: { allocationstate: 'Enabled' },
show: (record) => { return record.allocationstate === 'Disabled' }
@ -104,6 +106,7 @@ export default {
api: 'enableOutOfBandManagementForZone',
icon: 'plus-circle',
label: 'label.outofbandmanagement.enable',
message: 'label.outofbandmanagement.enable',
dataView: true,
show: (record) => {
return !record.resourcedetails || !record.resourcedetails.outOfBandManagementEnabled ||
@ -120,6 +123,7 @@ export default {
api: 'disableOutOfBandManagementForZone',
icon: 'minus-circle',
label: 'label.outofbandmanagement.disable',
message: 'label.outofbandmanagement.disable',
dataView: true,
show: (record) => {
return record.resourcedetails && record.resourcedetails.outOfBandManagementEnabled &&
@ -136,6 +140,7 @@ export default {
api: 'enableHAForZone',
icon: 'eye',
label: 'label.ha.enable',
message: 'label.ha.enable',
dataView: true,
show: (record) => {
return !record.resourcedetails || !record.resourcedetails.resourceHAEnabled ||
@ -152,6 +157,7 @@ export default {
api: 'disableHAForZone',
icon: 'eye-invisible',
label: 'label.ha.disable',
message: 'label.ha.disable',
dataView: true,
show: (record) => {
return record.resourcedetails && record.resourcedetails.resourceHAEnabled &&
@ -181,6 +187,7 @@ export default {
api: 'updateVmwareDc',
icon: 'block',
label: 'label.update.vmware.datacenter',
message: 'label.update.vmware.datacenter',
dataView: true,
show: record => record.vmwaredc,
args: ['zoneid', 'name', 'vcenter', 'username', 'password'],
@ -194,6 +201,7 @@ export default {
api: 'removeVmwareDc',
icon: 'minus-square',
label: 'label.remove.vmware.datacenter',
message: 'message.confirm.remove.vmware.datacenter',
dataView: true,
show: record => record.vmwaredc,
args: ['zoneid'],
@ -207,6 +215,7 @@ export default {
api: 'deleteZone',
icon: 'delete',
label: 'label.action.delete.zone',
message: 'message.action.delete.zone',
dataView: true
}
]

View File

@ -78,6 +78,7 @@ export default {
api: 'replaceNetworkACLList',
icon: 'swap',
label: 'label.replace.acl.list',
message: 'message.confirm.replace.acl.new.one',
dataView: true,
show: (record) => { return record.vpcid },
args: ['aclid', 'networkid'],
@ -95,6 +96,7 @@ export default {
api: 'deleteNetwork',
icon: 'delete',
label: 'label.action.delete.network',
message: 'message.action.delete.network',
dataView: true
}
]
@ -143,6 +145,7 @@ export default {
api: 'restartVPC',
icon: 'sync',
label: 'label.restart.vpc',
message: 'message.restart.vpc',
dataView: true,
args: ['makeredundant', 'cleanup']
},
@ -150,6 +153,7 @@ export default {
api: 'deleteVPC',
icon: 'delete',
label: 'label.remove.vpc',
message: 'message.remove.vpc',
dataView: true
}
]
@ -184,6 +188,7 @@ export default {
api: 'deleteSecurityGroup',
icon: 'delete',
label: 'label.action.delete.security.group',
message: 'message.action.delete.security.group',
dataView: true,
show: (record) => { return record.name !== 'default' }
}
@ -238,6 +243,7 @@ export default {
api: 'disableStaticNat',
icon: 'minus-circle',
label: 'label.action.disable.static.nat',
message: 'message.action.disable.static.nat',
dataView: true,
show: (record) => { return record.virtualmachineid },
args: ['ipaddressid'],
@ -251,6 +257,7 @@ export default {
api: 'disassociateIpAddress',
icon: 'delete',
label: 'label.action.release.ip',
message: 'message.action.release.ip',
dataView: true,
show: (record) => { return !record.issourcenat }
}
@ -289,6 +296,7 @@ export default {
api: 'replaceNetworkACLList',
icon: 'swap',
label: 'label.replace.acl.list',
message: 'message.confirm.replace.acl.new.one',
dataView: true,
args: ['aclid', 'gatewayid'],
mapping: {
@ -305,13 +313,14 @@ export default {
api: 'deletePrivateGateway',
icon: 'delete',
label: 'label.delete.gateway',
message: 'message.delete.gateway',
dataView: true
}
]
},
{
name: 's2svpn',
title: 'label.site-to-site.vpns',
title: 'label.site.to.site.vpn',
icon: 'lock',
hidden: true,
permission: ['listVpnGateways'],
@ -329,13 +338,14 @@ export default {
api: 'deleteVpnGateway',
icon: 'delete',
label: 'label.delete.vpn.gateway',
message: 'message.delete.vpn.gateway',
dataView: true
}
]
},
{
name: 's2svpnconn',
title: 'label.site-to-site.vpn.connections',
title: 'label.site.to.site.vpn.connections',
icon: 'sync',
hidden: true,
permission: ['listVpnConnections'],
@ -361,12 +371,14 @@ export default {
api: 'resetVpnConnection',
icon: 'reload',
label: 'label.reset.vpn.connection',
message: 'message.reset.vpn.connection',
dataView: true
},
{
api: 'deleteVpnConnection',
icon: 'delete',
label: 'label.delete.vpn.connection',
message: 'message.delete.vpn.connection',
dataView: true
}
]
@ -406,6 +418,7 @@ export default {
api: 'deleteNetworkACLList',
icon: 'delete',
label: 'label.delete.acl.list',
message: 'message.confirm.delete.acl.list',
dataView: true
}
]
@ -462,6 +475,7 @@ export default {
api: 'deleteLoadBalancer',
icon: 'delete',
label: 'label.delete.internal.lb',
message: 'message.confirm.delete.internal.lb',
dataView: true
}
]
@ -485,6 +499,7 @@ export default {
api: 'removeVpnUser',
icon: 'delete',
label: 'label.delete.vpn.user',
message: 'message.action.delete.vpn.user',
dataView: true,
args: ['username', 'domainid', 'account'],
mapping: {
@ -528,6 +543,7 @@ export default {
api: 'deleteVpnCustomerGateway',
icon: 'delete',
label: 'label.delete.vpn.customer.gateway',
message: 'message.delete.vpn.customer.gateway',
dataView: true
}
]

View File

@ -58,6 +58,7 @@ export default {
api: 'deleteServiceOffering',
icon: 'delete',
label: 'label.action.delete.service.offering',
message: 'message.action.delete.service.offering',
dataView: true
}]
},
@ -88,6 +89,7 @@ export default {
api: 'deleteServiceOffering',
icon: 'delete',
label: 'label.action.delete.system.service.offering',
message: 'message.action.delete.system.service.offering',
dataView: true,
params: { issystem: 'true' }
}]
@ -129,6 +131,7 @@ export default {
api: 'deleteDiskOffering',
icon: 'delete',
label: 'label.action.delete.disk.offering',
message: 'message.action.delete.disk.offering',
dataView: true
}]
},
@ -150,6 +153,7 @@ export default {
api: 'deleteBackupOffering',
icon: 'delete',
label: 'label.action.delete.backup.offering',
message: 'message.action.delete.backup.offering',
dataView: true
}]
},
@ -183,6 +187,7 @@ export default {
api: 'updateNetworkOffering',
icon: 'play-circle',
label: 'label.enable.network.offering',
message: 'message.confirm.enable.network.offering',
dataView: true,
show: (record) => { return record.state === 'Disabled' },
args: ['state'],
@ -195,6 +200,7 @@ export default {
api: 'updateNetworkOffering',
icon: 'pause-circle',
label: 'label.disable.network.offering',
message: 'message.confirm.disable.network.offering',
dataView: true,
show: (record) => { return record.state === 'Enabled' },
args: ['state'],
@ -214,6 +220,7 @@ export default {
api: 'deleteNetworkOffering',
icon: 'delete',
label: 'label.remove.network.offering',
message: 'message.confirm.remove.network.offering',
dataView: true
}]
},
@ -248,6 +255,7 @@ export default {
api: 'updateVPCOffering',
icon: 'play-circle',
label: 'label.enable.vpc.offering',
message: 'message.confirm.enable.vpc.offering',
dataView: true,
show: (record) => { return record.state === 'Disabled' },
args: ['state'],
@ -260,6 +268,7 @@ export default {
api: 'updateVPCOffering',
icon: 'pause-circle',
label: 'label.disable.vpc.offering',
message: 'message.confirm.disable.vpc.offering',
dataView: true,
show: (record) => { return record.state === 'Enabled' },
args: ['state'],
@ -279,6 +288,7 @@ export default {
api: 'deleteVPCOffering',
icon: 'delete',
label: 'label.remove.vpc.offering',
message: 'message.confirm.remove.vpc.offering',
dataView: true
}]
}

View File

@ -79,6 +79,7 @@ export default {
api: 'activateProject',
icon: 'play-circle',
label: 'label.activate.project',
message: 'message.activate.project',
dataView: true,
show: (record) => { return record.state === 'Suspended' }
},
@ -86,6 +87,7 @@ export default {
api: 'suspendProject',
icon: 'pause-circle',
label: 'label.suspend.project',
message: 'message.suspend.project',
dataView: true,
show: (record) => { return record.state !== 'Suspended' }
},
@ -106,6 +108,7 @@ export default {
api: 'deleteProject',
icon: 'delete',
label: 'label.delete.project',
message: 'message.delete.project',
dataView: true
}
]

View File

@ -58,6 +58,7 @@ export default {
api: 'deleteRole',
icon: 'delete',
label: 'label.delete.role',
message: 'label.delete.role',
dataView: true
}
]

View File

@ -66,6 +66,7 @@ export default {
api: 'attachVolume',
icon: 'paper-clip',
label: 'label.action.attach.disk',
message: 'message.confirm.attach.disk',
args: ['virtualmachineid'],
dataView: true,
show: (record) => { return record.type !== 'ROOT' && record.state !== 'Destroy' && !('virtualmachineid' in record) }
@ -74,6 +75,7 @@ export default {
api: 'detachVolume',
icon: 'link',
label: 'label.action.detach.disk',
message: 'message.detach.disk',
dataView: true,
show: (record) => { return record.type !== 'ROOT' && 'virtualmachineid' in record && record.virtualmachineid }
},
@ -134,6 +136,7 @@ export default {
api: 'extractVolume',
icon: 'cloud-download',
label: 'label.action.download.volume',
message: 'message.download.volume.confirm',
dataView: true,
show: (record) => { return record && record.state === 'Ready' && (record.vmstate === 'Stopped' || record.virtualmachineid == null) && record.state !== 'Destroy' },
args: ['zoneid', 'mode'],
@ -164,6 +167,7 @@ export default {
api: 'recoverVolume',
icon: 'medicine-box',
label: 'label.action.recover.volume',
message: 'message.action.recover.volume',
dataView: true,
show: (record, store) => {
return (['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) || store.features.allowuserexpungerecovervolume) && record.state === 'Destroy'
@ -173,6 +177,7 @@ export default {
api: 'deleteVolume',
icon: 'delete',
label: 'label.action.delete.volume',
message: 'message.action.delete.volume',
dataView: true,
groupAction: true,
show: (record, store) => {
@ -184,6 +189,7 @@ export default {
api: 'destroyVolume',
icon: 'delete',
label: 'label.action.destroy.volume',
message: 'message.action.destroy.volume',
dataView: true,
args: (record, store) => {
return (!['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !store.features.allowuserexpungerecovervolumestore) ? [] : ['expunge']
@ -233,6 +239,7 @@ export default {
api: 'revertSnapshot',
icon: 'sync',
label: 'label.action.revert.snapshot',
message: 'message.action.revert.snapshot',
dataView: true,
show: (record) => { return record.revertable }
},
@ -240,6 +247,7 @@ export default {
api: 'deleteSnapshot',
icon: 'delete',
label: 'label.action.delete.snapshot',
message: 'message.action.delete.snapshot',
dataView: true
}
]
@ -257,6 +265,7 @@ export default {
api: 'revertToVMSnapshot',
icon: 'sync',
label: 'label.action.vmsnapshot.revert',
message: 'label.action.vmsnapshot.revert',
dataView: true,
show: (record) => { return record.state === 'Ready' },
args: ['vmsnapshotid'],
@ -270,6 +279,7 @@ export default {
api: 'deleteVMSnapshot',
icon: 'delete',
label: 'label.action.vmsnapshot.delete',
message: 'message.action.vmsnapshot.delete',
dataView: true,
args: ['vmsnapshotid'],
mapping: {
@ -292,12 +302,14 @@ export default {
api: 'restoreBackup',
icon: 'sync',
label: 'label.backup.restore',
message: 'message.backup.restore',
dataView: true
},
{
api: 'restoreVolumeFromBackupAndAttachToVM',
icon: 'paper-clip',
label: 'Restore Volume and Attach',
label: 'label.backup.attach.restore',
message: 'message.backup.attach.restore',
dataView: true,
popup: true,
component: () => import('@/views/storage/RestoreAttachBackupVolume.vue')
@ -306,6 +318,7 @@ export default {
api: 'removeVirtualMachineFromBackupOffering',
icon: 'scissor',
label: 'label.backup.offering.remove',
message: 'message.backup.offering.remove',
dataView: true,
args: ['forced', 'virtualmachineid'],
mapping: {
@ -320,7 +333,8 @@ export default {
{
api: 'deleteBackup',
icon: 'delete',
label: 'Delete Backup',
label: 'label.delete.backup',
message: 'message.delete.backup',
dataView: true
}
]

View File

@ -50,12 +50,14 @@ export default {
api: 'registerUserKeys',
icon: 'file-protect',
label: 'label.action.generate.keys',
message: 'message.generate.keys',
dataView: true
},
{
api: 'enableUser',
icon: 'play-circle',
label: 'label.action.enable.user',
message: 'message.enable.user',
dataView: true,
show: (record) => { return record.state === 'disabled' }
},
@ -63,6 +65,7 @@ export default {
api: 'disableUser',
icon: 'pause-circle',
label: 'label.action.disable.user',
message: 'message.disable.user',
dataView: true,
show: (record) => { return record.state === 'enabled' }
},
@ -70,6 +73,7 @@ export default {
api: 'deleteUser',
icon: 'delete',
label: 'label.action.delete.user',
message: 'message.delete.user',
dataView: true
}
]

View File

@ -861,7 +861,7 @@
"label.instanceport": "Instance Port",
"label.instances": "\u0627\u0644\u062d\u0627\u0644\u0627\u062a",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "Internal DNS 1",
"label.internal.dns.2": "Internal DNS 2",
"label.internal.lb": "Internal LB",

View File

@ -861,7 +861,7 @@
"label.instanceport": "Instance Port",
"label.instances": "Instances",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "Internal DNS 1",
"label.internal.dns.2": "Internal DNS 2",
"label.internal.lb": "Internal LB",

View File

@ -862,7 +862,7 @@
"label.instanceport": "Instanz-Port",
"label.instances": "Instanzen",
"label.instanciate.template.associate.profile.blade": "Vorlage instanzieren und Profil zu Blade assoziieren",
"label.intermediate.certificate": "Intermediate Zertifikat {0}",
"label.intermediate.certificate": "Intermediate Zertifikat",
"label.internal.dns.1": "Interner DNS 1",
"label.internal.dns.2": "Interner DNS 2",
"label.internal.lb": "Interne LB",

View File

@ -430,11 +430,13 @@
"label.available.public.ips": "Available Public IP Addresses",
"label.back": "Back",
"label.backup": "Backups",
"label.backup.attach.restore": "Restore and Attach Backup Volume",
"label.backup.offering.assign": "Assign VM to backup offering",
"label.backup.offering.remove": "Remove VM from backup offering",
"label.backup.offerings": "Backup Offerings",
"label.backup.restore": "Restore VM Backup",
"label.backupofferingid": "Backup Offering",
"label.backupofferingname": "Backup Offering",
"label.balance": "Balance",
"label.bandwidth": "Bandwidth",
"label.baremetal.dhcp.devices": "Baremetal DHCP Devices",
@ -484,6 +486,7 @@
"label.capacity.iops": "Capacity IOPS",
"label.capacitybytes": "Capacity Bytes",
"label.capacityiops": "IOPS Total",
"label.category": "Category",
"label.certchain": "Chain",
"label.certificate": "Certificate",
"label.certificate.details": "Certificate Details",
@ -606,6 +609,7 @@
"label.delete.acl.list": "Delete ACL List",
"label.delete.affinity.group": "Delete Affinity Group",
"label.delete.alerts": "Delete alerts",
"label.delete.backup" : "Delete Backup",
"label.delete.baremetal.rack.configuration": "Delete Baremetal Rack Configuration",
"label.delete.bigswitchbcf": "Remove BigSwitch BCF Controller",
"label.delete.brocadevcs": "Remove Brocade Vcs Switch",
@ -696,6 +700,7 @@
"label.disksizetotal": "Disk Total",
"label.disksizetotalgb": "Total",
"label.disksizeunallocatedgb": "Unallocated",
"label.disksizeused": "Disk Size Used",
"label.disksizeusedgb": "Used",
"label.display.text": "Display Text",
"label.displayname": "Display Name",
@ -955,7 +960,7 @@
"label.instanceport": "Instance Port",
"label.instances": "Instances",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "Internal DNS 1",
"label.internal.dns.2": "Internal DNS 2",
"label.internal.lb": "Internal LB",
@ -1151,8 +1156,10 @@
"label.max.secondary.storage": "Max. secondary (GiB)",
"label.maxcpu": "Max. CPU Cores",
"label.maxcpunumber": "Max CPU Cores",
"label.maxdatavolumeslimit": "Max data volumes limit",
"label.maxerrorretry": "Max Error Retry",
"label.maxguestslimit": "Max guest limit",
"label.maxhostspercluster": "Max hosts per cluster",
"label.maximum": "Maximum",
"label.maxinstance": "Max Instances",
"label.maxiops": "Max IOPS",
@ -1264,6 +1271,7 @@
"label.netscaler.details": "NetScaler details",
"label.network": "Network",
"label.network.acl": "Network ACL",
"label.network.acl.lists": "Network ACL Lists",
"label.network.acls": "Network ACLs",
"label.network.addvm": "Add network to VM",
"label.network.desc": "Network Desc",
@ -1410,6 +1418,7 @@
"label.ping.dir": "PING Directory",
"label.ping.path": "Ping Path",
"label.ping.storage.ip": "PING storage IP",
"label.pkcs.private.certificate": "PKCS#8 Private certificate",
"label.plannermode": "Planner mode",
"label.please.complete.the.following.fields": "Please complete the following fields",
"label.please.specify.netscaler.info": "Please specify Netscaler info",
@ -1463,6 +1472,7 @@
"label.project.invite": "Invite to project",
"label.project.name": "Project name",
"label.project.view": "Project View",
"label.projectaccountname": "Project Account Name",
"label.projectid": "Project ID",
"label.projects": "Projects",
"label.promiscuousmode": "Promiscuous Mode",
@ -1682,7 +1692,9 @@
"label.security.groups": "Security Groups",
"label.security.groups.enabled": "Security Groups Enabled",
"label.securitygroup": "Security Group",
"label.securitygroupenabled": "Security Groups Enabled",
"label.securitygroups": "Security Groups",
"label.securitygroupsenabled": "Security Groups Enabled",
"label.select": "Select",
"label.select-view": "Select view",
"label.select.a.zone": "Select a zone",
@ -1696,12 +1708,14 @@
"label.select.region": "Select region",
"label.select.tier": "Select Tier",
"label.select.vm.for.static.nat": "Select VM for static NAT",
"label.select.zones": "Select zones",
"label.self": "Mine",
"label.selfexecutable": "Self",
"label.semanticversion": "Semantic version",
"label.sent": "Date",
"label.sentbytes": "Bytes Sent",
"label.server": "Server",
"label.server.certificate": "Server certificate",
"label.service.connectivity.distributedroutercapabilitycheckbox": "Distributed Router",
"label.service.connectivity.regionlevelvpccapabilitycheckbox": "Region Level VPC",
"label.service.lb.elasticlbcheckbox": "Elastic LB",
@ -1737,6 +1751,7 @@
"label.shutdown.provider": "Shutdown provider",
"label.simplified.chinese.keyboard": "Simplified Chinese keyboard",
"label.site.to.site.vpn": "Site-to-site VPN",
"label.site.to.site.vpn.connections": "Site-to-site VPN Connections",
"label.size": "Size",
"label.sizegb": "Size",
"label.skip.guide": "I have used CloudStack before, skip this guide",
@ -1759,6 +1774,7 @@
"label.sourcecidr": "Source CIDR",
"label.sourceipaddress": "Source IP Address",
"label.sourcenat": "Source NAT",
"label.sourcenatsupported": "Source NAT Supported",
"label.sourcenattype": "Supported Source NAT type",
"label.sourceport": "Source Port",
"label.specify.vxlan": "Specify VXLAN",
@ -1810,6 +1826,7 @@
"label.sticky.holdtime": "Hold time",
"label.sticky.indirect": "Indirect",
"label.sticky.length": "Length",
"label.sticky.mode": "Mode",
"label.sticky.name": "Sticky Name",
"label.sticky.nocache": "No cache",
"label.sticky.postonly": "Post only",
@ -1823,6 +1840,7 @@
"label.storage.tags": "Storage Tags",
"label.storage.traffic": "Storage Traffic",
"label.storageid": "Primary Storage",
"label.storagemotionenabled": "Storage Motion Enabled",
"label.storagepolicy": "Storage policy",
"label.storagepool": "Storage Pool",
"label.storagetags": "Storage Tags",
@ -1836,6 +1854,7 @@
"label.summary": "Summary",
"label.sunday": "Sunday",
"label.supportedservices": "Supported Services",
"label.supportsha": "Supports HA",
"label.supportspublicaccess": "Supports Public Access",
"label.supportsregionlevelvpc": "Supports Region Level VPC",
"label.supportsstrechedl2subnet": "Supports Streched L2 Subnet",
@ -1988,6 +2007,7 @@
"label.virtual.routers.group.zone": "Virtual Routers group by zone",
"label.virtualmachinedisplayname": "VM name",
"label.virtualmachineid": "VM ID",
"label.virtualmachinename": "VM name",
"label.virtualsize": "Virtual Size",
"label.vlan": "VLAN/VNI",
"label.vlan.range": "VLAN/VNI Range",
@ -2048,6 +2068,7 @@
"label.vpclimit": "VPC limits",
"label.vpcname": "VPC",
"label.vpcoffering": "VPC Offering",
"label.vpctotal": "Total VPCs",
"label.vpn": "VPN",
"label.vpn.connection": "VPN Connection",
"label.vpn.gateway": "VPN Gateway",
@ -2236,6 +2257,9 @@
"message.assign.instance.another": "Please specify the account type, domain, account name and network (optional) of the new account. <br> If the default nic of the vm is on a shared network, CloudStack will check if the network can be used by the new account if you do not specify one network. <br> If the default nic of the vm is on a isolated network, and the new account has more one isolated networks, you should specify one.",
"message.attach.iso.confirm": "Please confirm that you want to attach the ISO to this virtual instance.",
"message.attach.volume": "Please fill in the following data to attach a new volume. If you are attaching a disk volume to a Windows based virtual machine, you will need to reboot the instance to see the attached disk.",
"message.backup.attach.restore": "Please confirm that you want to restore and attach the volume from the backup?",
"message.backup.offering.remove": "Are you sure you want to remove VM from backup offering and delete the backup chain?",
"message.backup.restore": "Please confirm that you want to restore the vm backup?",
"message.basic.mode.desc": "Choose this network model if you do <b>*<u>not</u>*</b> want to enable any VLAN support. All virtual instances created under this network model will be assigned an IP directly from the network and security groups are used to provide security and segregation.",
"message.change.offering.confirm": "Please confirm that you wish to change the service offering of this virtual instance.",
"message.change.password": "Please change your password.",
@ -2278,7 +2302,7 @@
"message.confirm.delete.srx": "Please confirm that you would like to delete SRX",
"message.confirm.delete.ucs.manager": "Please confirm that you want to delete UCS Manager",
"message.confirm.destroy.kubernetes.cluster": "Please confirm that you want to destroy this Kubernetes cluster.",
"message.confirm.destroy.router": "Please confirm that you would like to destroy this router",
"message.confirm.destroy.router": "All services provided by this virtual router will be interrupted. Please confirm that you want to stop this router. Please confirm that you would like to destroy this router",
"message.confirm.disable.host": "Please confirm that you want to disable the host",
"message.confirm.disable.network.offering": "Are you sure you want to disable this network offering?",
"message.confirm.disable.provider": "Please confirm that you would like to disable this provider",
@ -2335,8 +2359,13 @@
"message.creating.zone": "Creating zone",
"message.dedicate.zone": "Dedicating zone",
"message.dedicated.zone.released": "Zone dedication released",
"message.dedicating.cluster": "Dedicating Cluster...",
"message.dedicating.host": "Dedicating Host...",
"message.dedicating.pod": "Dedicating Pod...",
"message.dedicating.zone": "Dedicating Zone...",
"message.delete.account": "Please confirm that you want to delete this account.",
"message.delete.affinity.group": "Please confirm that you would like to remove this affinity group.",
"message.delete.backup": "Are you sure you want to delete the backup?",
"message.delete.gateway": "Please confirm you want to delete the gateway",
"message.delete.project": "Are you sure you want to delete this project?",
"message.delete.sslcertificate": "Please confirm that you would like to delete this certificate.",
@ -2502,6 +2531,10 @@
"message.register.failed": "Registration Failed",
"message.register.succeeded": "Registration Succeeded",
"message.reinstall.vm": "NOTE: Proceed with caution. This will cause the VM to be reinstalled from the template; data on the root disk will be lost. Extra data volumes, if any, will not be touched.",
"message.releasing.dedicated.cluster": "Releasing dedicated cluster...",
"message.releasing.dedicated.host": "Releasing dedicated host...",
"message.releasing.dedicated.pod": "Releasing dedicated pod...",
"message.releasing.dedicated.zone": "Releasing dedicated zone...",
"message.remove.ldap": "Are you sure you want to delete the LDAP configuration?",
"message.remove.region": "Are you sure you want to remove this region from this management server?",
"message.remove.vpc": "Please confirm that you want to remove the VPC",

View File

@ -861,7 +861,7 @@
"label.instanceport": "Puerto de Instancia",
"label.instances": "Instancias",
"label.instanciate.template.associate.profile.blade": "Instanciar Plantilla y asociar al Perfil al Blade",
"label.intermediate.certificate": "Certificado intermedio {0}",
"label.intermediate.certificate": "Certificado intermedio",
"label.internal.dns.1": "DNS interno una",
"label.internal.dns.2": "DNS interno 2",
"label.internal.lb": "LB interno",

View File

@ -861,7 +861,7 @@
"label.instanceport": "Port Instance",
"label.instances": "Instances",
"label.instanciate.template.associate.profile.blade": "Instancier Mod\u00e8le et Profil associ\u00e9 \u00e0 la Lame",
"label.intermediate.certificate": "Certificat interm\u00e9diaire {0}",
"label.intermediate.certificate": "Certificat interm\u00e9diaire",
"label.internal.dns.1": "DNS interne 1",
"label.internal.dns.2": "DNS interne 2",
"label.internal.lb": "R\u00e9partiteur interne",

View File

@ -860,7 +860,7 @@
"label.instanceport": "P\u00e9ld\u00e1ny port",
"label.instances": "P\u00e9ld\u00e1nyok",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "K\u00f6zb\u00fcls\u0151 tan\u00fas\u00edtv\u00e1ny {0}",
"label.intermediate.certificate": "K\u00f6zb\u00fcls\u0151 tan\u00fas\u00edtv\u00e1ny",
"label.internal.dns.1": "1. bels\u0151 DNS",
"label.internal.dns.2": "2. bels\u0151 DNS",
"label.internal.lb": "Bels\u0151 LB",

View File

@ -34,7 +34,7 @@ function loadLocaleMessages () {
Vue.use(VueI18n)
export default new VueI18n({
locale: Vue.ls ? Vue.ls.get('current_locale') || 'en' : 'en',
locale: Vue.ls ? Vue.ls.get('LOCALE') || 'en' : 'en',
fallbackLocale: 'en',
silentTranslationWarn: true,
messages: loadLocaleMessages()

View File

@ -861,7 +861,7 @@
"label.instanceport": "Instance Port",
"label.instances": "Istanze",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "DNS 1 Interno",
"label.internal.dns.2": "DNS2 Interno",
"label.internal.lb": "Internal LB",

View File

@ -860,7 +860,7 @@
"label.instanceport": "\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 \u30dd\u30fc\u30c8",
"label.instances": "\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9",
"label.instanciate.template.associate.profile.blade": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u304a\u3088\u3073\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3068\u30d6\u30ec\u30fc\u30c9\u306e\u95a2\u9023\u4ed8\u3051",
"label.intermediate.certificate": "\u4e2d\u9593\u8a3c\u660e\u66f8 {0}",
"label.intermediate.certificate": "\u4e2d\u9593\u8a3c\u660e\u66f8",
"label.internal.dns.1": "\u5185\u90e8 DNS 1",
"label.internal.dns.2": "\u5185\u90e8 DNS 2",
"label.internal.lb": "\u5185\u90e8 LB",

View File

@ -860,7 +860,7 @@
"label.instanceport": "Instance Port",
"label.instances": "\uc778\uc2a4\ud134\uc2a4",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "\ub0b4\ubd80 DNS 1",
"label.internal.dns.2": "\ub0b4\ubd80 DNS 2",
"label.internal.lb": "Internal LB",

View File

@ -861,7 +861,7 @@
"label.instanceport": "Instansport",
"label.instances": "Instanser",
"label.instanciate.template.associate.profile.blade": "Instansier mal og assosier malen med Blade",
"label.intermediate.certificate": "Intermediate sertifikat {0}",
"label.intermediate.certificate": "Intermediate sertifikat",
"label.internal.dns.1": "Intern DNS 1",
"label.internal.dns.2": "Intern DNS 2",
"label.internal.lb": "Intern LB",

View File

@ -861,7 +861,7 @@
"label.instanceport": "instantie poort",
"label.instances": "Instanties",
"label.instanciate.template.associate.profile.blade": "Initieer Template en verbind Profiel met Blade",
"label.intermediate.certificate": "Intermediair certificaat {0}",
"label.intermediate.certificate": "Intermediair certificaat",
"label.internal.dns.1": "Interne DNS 1",
"label.internal.dns.2": "Interne DNS 2",
"label.internal.lb": "interne LB",

View File

@ -861,7 +861,7 @@
"label.instanceport": "Instance Port",
"label.instances": "Instancje",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "Internal DNS 1",
"label.internal.dns.2": "Internal DNS 2",
"label.internal.lb": "Internal LB",

View File

@ -860,7 +860,7 @@
"label.instanceport": "Instanciar Porta",
"label.instances": "Inst\u00e2ncias",
"label.instanciate.template.associate.profile.blade": "Instancia Template e Associa Perfil \u00e0 L\u00e2mina",
"label.intermediate.certificate": "Certificado intermedi\u00e1rio {0}",
"label.intermediate.certificate": "Certificado intermedi\u00e1rio",
"label.internal.dns.1": "DNS 1 Interno",
"label.internal.dns.2": "DNS 2 Interno",
"label.internal.lb": "LB interno",

View File

@ -860,7 +860,7 @@
"label.instanceport": "Instance Port",
"label.instances": "\u041c\u0430\u0448\u0438\u043d\u044b",
"label.instanciate.template.associate.profile.blade": "Instanciate Template and Associate Profile to Blade",
"label.intermediate.certificate": "Intermediate certificate {0}",
"label.intermediate.certificate": "Intermediate certificate",
"label.internal.dns.1": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DNS 1",
"label.internal.dns.2": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DNS 2",
"label.internal.lb": "Internal LB",

View File

@ -860,7 +860,7 @@
"label.instanceport": "\u5b9e\u4f8b\u7aef\u53e3",
"label.instances": "\u5b9e\u4f8b",
"label.instanciate.template.associate.profile.blade": "\u5c06\u6a21\u677f\u5b9e\u4f8b\u5316\u5e76\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0e\u5200\u7247\u5f0f\u670d\u52a1\u5668\u5173\u8054",
"label.intermediate.certificate": "\u4e2d\u95f4\u8bc1\u4e66 {0}",
"label.intermediate.certificate": "\u4e2d\u95f4\u8bc1\u4e66",
"label.internal.dns.1": "\u5185\u90e8 DNS 1",
"label.internal.dns.2": "\u5185\u90e8 DNS 2",
"label.internal.lb": "\u5185\u90e8\u8d1f\u8f7d\u5747\u8861\u5668",

View File

@ -99,7 +99,7 @@ export const pollJobPlugin = {
}).catch(e => {
console.error(`${catchMessage} - ${e}`)
notification.error({
message: 'Error',
message: this.$t('label.error'),
description: catchMessage,
duration: 0
})
@ -114,6 +114,7 @@ export const notifierPlugin = {
install (Vue) {
Vue.prototype.$notifyError = function (error) {
console.log(error)
var msg = 'Request Failed'
var desc = ''
if (error && error.response) {

View File

@ -51,7 +51,7 @@
@exec-action="execAction"/>
<a-select
v-if="filters && filters.length > 0"
placeholder="Filter By"
:placeholder="$t('label.filterby')"
:value="$t('label.' + selectedFilter)"
style="min-width: 100px; margin-left: 10px"
@change="changeFilter">
@ -62,7 +62,7 @@
</a-select>
<a-input-search
style="width: 20vw; margin-left: 10px"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="searchQuery"
v-if="!dataView && !treeView"
allowClear
@ -118,7 +118,9 @@
</span>
<a-spin :spinning="currentAction.loading">
<span v-if="currentAction.message">
<a-alert :message="$t(currentAction.message)" type="warning" />
<a-alert type="warning">
<span slot="message" v-html="$t(currentAction.message)" />
</a-alert>
<br v-if="currentAction.paramFields.length > 0"/>
</span>
<a-form
@ -141,7 +143,7 @@
<span v-if="field.type==='boolean'">
<a-switch
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please provide input' }]
rules: [{ required: field.required, message: `${$t('message.error.required.input')}` }]
}]"
v-model="formModel[field.name]"
:placeholder="field.description"
@ -151,7 +153,7 @@
<a-select
:loading="field.loading"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please select option' }]
rules: [{ required: field.required, message: `${$t('message.error.select')}` }]
}]"
:placeholder="field.description"
>
@ -167,7 +169,7 @@
showSearch
optionFilterProp="children"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please select option' }]
rules: [{ required: field.required, message: `${$t('message.error.select')}` }]
}]"
:loading="field.loading"
:placeholder="field.description"
@ -186,7 +188,7 @@
showSearch
optionFilterProp="children"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please select option' }]
rules: [{ required: field.required, message: `${$t('message.error.select')}` }]
}]"
:loading="field.loading"
:placeholder="field.description"
@ -204,7 +206,7 @@
:loading="field.loading"
mode="multiple"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please select option' }]
rules: [{ required: field.required, message: `${$t('message.error.select')}` }]
}]"
:placeholder="field.description"
>
@ -216,7 +218,7 @@
<span v-else-if="field.type==='long'">
<a-input-number
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter a number' }]
rules: [{ required: field.required, message: `${$t('message.validate.number')}` }]
}]"
:placeholder="field.description"
/>
@ -224,7 +226,7 @@
<span v-else-if="field.name==='password' || field.name==='currentpassword'">
<a-input-password
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter input' }]
rules: [{ required: field.required, message: `${$t('message.error.required.input')}` }]
}]"
:placeholder="field.description"
/>
@ -233,7 +235,7 @@
<a-textarea
rows="2"
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter input' }]
rules: [{ required: field.required, message: `${$t('message.error.required.input')}` }]
}]"
:placeholder="field.description"
/>
@ -241,7 +243,7 @@
<span v-else>
<a-input
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please enter input' }]
rules: [{ required: field.required, message: `${$t('message.error.required.input')}` }]
}]"
:placeholder="field.description" />
</span>
@ -487,7 +489,7 @@ export default {
customRender[key] = columnKey[key]
}
this.columns.push({
title: this.$t('label.' + key),
title: this.$t('label.' + String(key).toLowerCase()),
dataIndex: key,
scopedSlots: { customRender: key },
sorter: function (a, b) { return genericCompare(a[this.dataIndex] || '', b[this.dataIndex] || '') }

View File

@ -39,7 +39,7 @@
<a-input
size="large"
type="text"
placeholder="Username"
:placeholder="$t('label.username')"
v-decorator="[
'username',
{rules: [{ required: true, message: 'Enter your username' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
@ -54,7 +54,7 @@
size="large"
type="password"
autocomplete="false"
placeholder="Password"
:placeholder="$t('label.password')"
v-decorator="[
'password',
{rules: [{ required: true, message: 'Enter your password' }], validateTrigger: 'blur'}
@ -68,7 +68,7 @@
<a-input
size="large"
type="text"
placeholder="Domain"
:placeholder="$t('label.domain')"
v-decorator="[
'domain',
{rules: [{ required: false, message: 'Enter your domain, leave empty for ROOT domain' }], validateTrigger: 'change'}

View File

@ -210,7 +210,7 @@ export default {
networkids: this.selectedNetwork
}).then(response => {
this.$notification.success({
message: 'Successfully assigned instance'
message: this.$t('label.loadbalancerinstance')
})
this.loading = false
this.$parent.$parent.close()

View File

@ -37,7 +37,7 @@
<a-form-item :label="this.$t('label.zoneid')">
<a-select
v-decorator="['zoneid', {
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, message: `${this.$t('message.error.select')}` }]
}]"
:options="zoneSelectOptions"
@change="onSelectZoneId"
@ -127,7 +127,7 @@
initialValue: hypervisorSelectOptions && hypervisorSelectOptions.length > 0
? hypervisorSelectOptions[0].value
: null,
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, message: `${this.$t('message.error.select')}` }]
}]"
:options="hypervisorSelectOptions"
@change="value => this.hypervisor = value" />

View File

@ -18,7 +18,7 @@
<template>
<div class="form">
<a-input-search
placeholder="Search"
:placeholder="$t('label.search')"
v-model="searchQuery"
style="margin-bottom: 10px;"
@search="fetchData" />

View File

@ -87,7 +87,7 @@
v-decorator="['day-of-week', {
rules: [{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}]
}]" >
<a-select-option v-for="(opt, optIndex) in dayOfWeek" :key="optIndex">
@ -102,7 +102,7 @@
v-decorator="['day-of-month', {
rules: [{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}]
}]">
<a-select-option v-for="opt in dayOfMonth" :key="opt.name">
@ -118,7 +118,7 @@
v-decorator="['timezone', {
rules: [{
required: true,
message: 'Please select option'
messamessage: `${this.$t('message.error.select')}`
}]
}]"
:loading="fetching">

View File

@ -19,7 +19,7 @@
<div>
<a-input-search
style="width: 25vw;float: right;margin-bottom: 10px; z-index: 8"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="handleSearch" />
<a-table

View File

@ -19,7 +19,7 @@
<div>
<a-input-search
style="width: 25vw;float: right;margin-bottom: 10px; z-index: 8"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="handleSearch" />
<a-table

View File

@ -19,7 +19,7 @@
<div>
<a-input-search
style="width: 25vw;float: right;margin-bottom: 10px; z-index: 8"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="handleSearch" />
<a-table

View File

@ -19,7 +19,7 @@
<div>
<a-input-search
style="width: 25vw; float: right; margin-bottom: 10px; z-index: 8"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="handleSearch" />
<a-button type="primary" @click="showCreateForm = true" style="float: right; margin-right: 5px; z-index: 8">

View File

@ -19,7 +19,7 @@
<div>
<a-input-search
style="width: 25vw;float: right;margin-bottom: 10px; z-index: 8"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="handleSearch" />
<a-table

View File

@ -20,7 +20,7 @@
<span class="filter-group">
<a-input-search
class="search-input"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="filter"
@search="filterDataSource">
<a-popover

View File

@ -22,7 +22,7 @@
<a-card :bordered="false">
<a-input-search
style="margin-bottom: 10px"
placeholder="Search"
:placeholder="$t('label.search')"
v-model="searchQuery"
@search="handleSearch" />
<a-table
@ -54,7 +54,7 @@
<a-select
showSearch
v-decorator="['domainid', {
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, memessage: `${this.$t('message.error.select')}` }]
}]"
:placeholder="apiParams.domainid.description"
:loading="domainLoading">
@ -73,7 +73,7 @@
<a-select
showSearch
v-decorator="['roleid', {
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, message: `${this.$t('message.error.select')}` }]
}]"
:placeholder="apiParams.roleid.description"
:loading="roleLoading">

View File

@ -34,7 +34,7 @@
:dataSource="apis"
:value="newRule"
@change="val => newRule = val"
placeholder="Rule"
:placeholder="$t('label.rule')"
:class="{'rule-dropdown-error' : newRuleSelectError}" />
</div>
<div class="rules-table__col rules-table__col--permission">

View File

@ -42,7 +42,7 @@
<a-popconfirm
v-if="'deleteIso' in $store.getters.apis"
placement="topRight"
title="Delete the ISO for this zone?"
:title="$t('message.action.delete.iso')"
:ok-text="$t('label.yes')"
:cancel-text="$t('label.no')"
:loading="deleteLoading"
@ -87,12 +87,12 @@
<a-select
id="zone-selection"
mode="multiple"
placeholder="Select Zones"
:placeholder="$t('label.select.zones')"
v-decorator="['zoneid', {
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -30,7 +30,7 @@
<a-form-item v-if="currentForm === 'Create'" :label="$t('label.url')">
<a-input
v-decorator="['url', {
rules: [{ required: true, message: 'Please upload an ISO' }]
rules: [{ required: true, message: `${this.$t('label.upload.iso.from.local')}` }]
}]"
:placeholder="apiParams.url.description" />
</a-form-item>
@ -41,7 +41,7 @@
:remove="handleRemove"
:beforeUpload="beforeUpload"
v-decorator="['file', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]">
<p class="ant-upload-drag-icon">
<a-icon type="cloud-upload" />
@ -54,7 +54,7 @@
<a-form-item :label="$t('label.name')">
<a-input
v-decorator="['name', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="apiParams.name.description" />
</a-form-item>
@ -62,7 +62,7 @@
<a-form-item :label="$t('label.displaytext')">
<a-input
v-decorator="['displaytext', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="apiParams.displaytext.description" />
</a-form-item>
@ -78,7 +78,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -115,7 +115,7 @@
<a-select
v-decorator="['ostypeid', {
initialValue: defaultOsType,
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, message: `${this.$t('message.error.select')}` }]
}]"
showSearch
optionFilterProp="children"
@ -335,7 +335,7 @@ export default {
api('registerIso', params).then(json => {
this.$emit('refresh-data')
this.$notification.success({
message: 'Register ISO',
message: 'label.action.register.iso',
description: 'Sucessfully registered ISO ' + params.name
})
}).catch(error => {

View File

@ -32,7 +32,7 @@
<a-form-item :label="$t('label.url')">
<a-input
v-decorator="['url', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="apiParams.url.description" />
</a-form-item>
@ -46,7 +46,7 @@
:remove="handleRemove"
:beforeUpload="beforeUpload"
v-decorator="['file', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]">
<p class="ant-upload-drag-icon">
<a-icon type="cloud-upload" />
@ -61,7 +61,7 @@
<a-form-item :label="$t('label.name')">
<a-input
v-decorator="['name', {
rules: [{ required: true, message: 'Please upload a template ' }]
rules: [{ required: true, message: `${this.$t('label.upload.template.from.local')}` }]
}]"
:placeholder="apiParams.name.description" />
</a-form-item>
@ -70,7 +70,7 @@
<a-form-item :label="$t('label.displaytext')">
<a-input
v-decorator="['displaytext', {
rules: [{ required: true, message: 'Please enter input' }]
rules: [{ required: true, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="apiParams.displaytext.description" />
</a-form-item>
@ -87,7 +87,7 @@
rules: [
{
required: true,
message: 'Please select option',
message: `${this.$t('message.error.select')}`,
type: 'array'
}
]
@ -135,7 +135,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -155,7 +155,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -177,7 +177,7 @@
<a-form-item :label="$t('label.checksum')">
<a-input
v-decorator="['checksum', {
rules: [{ required: false, message: 'Please enter input' }]
rules: [{ required: false, message: `${this.$t('message.error.required.input')}` }]
}]"
:placeholder="apiParams.checksum.description" />
</a-form-item>
@ -200,7 +200,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -219,7 +219,7 @@
rules: [
{
required: false,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -238,7 +238,7 @@
rules: [
{
required: false,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -256,7 +256,7 @@
rules: [
{
required: false,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -278,7 +278,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -42,7 +42,7 @@
<a-popconfirm
v-if="'deleteTemplate' in $store.getters.apis"
placement="topRight"
title="Delete the template for this zone?"
:title="$t('message.action.delete.template')"
:ok-text="$t('label.yes')"
:cancel-text="$t('label.no')"
:loading="deleteLoading"
@ -87,12 +87,12 @@
<a-select
id="zone-selection"
mode="multiple"
placeholder="Select Zones"
:placeholder="$t('label.select.zones')"
v-decorator="['zoneid', {
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -38,7 +38,7 @@
</div>
<a-form-item :label="$t('label.zoneid')">
<a-select
v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: 'required'}] }]"
v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => changeZone(val)">
<a-select-option :value="zone.id" v-for="(zone) in zones" :key="zone.id">
{{ zone.name }}
@ -48,7 +48,7 @@
<div v-if="this.scope === 'cluster' || this.scope === 'host'">
<a-form-item :label="$t('label.podid')">
<a-select
v-decorator="['pod', { initialValue: this.podSelected, rules: [{ required: true, message: 'required'}] }]"
v-decorator="['pod', { initialValue: this.podSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => changePod(val)">
<a-select-option :value="pod.id" v-for="(pod) in pods" :key="pod.id">
{{ pod.name }}
@ -57,7 +57,7 @@
</a-form-item>
<a-form-item :label="$t('label.clusterid')">
<a-select
v-decorator="['cluster', { initialValue: this.clusterSelected, rules: [{ required: true, message: 'required'}] }]"
v-decorator="['cluster', { initialValue: this.clusterSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => fetchHypervisor(val)">
<a-select-option :value="cluster.id" v-for="cluster in clusters" :key="cluster.id">
{{ cluster.name }}
@ -68,7 +68,7 @@
<div v-if="this.scope === 'host'">
<a-form-item :label="$t('label.hostid')">
<a-select
v-decorator="['host', { initialValue: this.hostSelected, rules: [{ required: true, message: 'required'}] }]"
v-decorator="['host', { initialValue: this.hostSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => this.hostSelected = val">
<a-select-option :value="host.id" v-for="host in hosts" :key="host.id">
{{ host.name }}
@ -77,11 +77,11 @@
</a-form-item>
</div>
<a-form-item :label="$t('label.name')">
<a-input v-decorator="['name', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['name', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
<a-form-item :label="$t('label.protocol')">
<a-select
v-decorator="['protocol', { initialValue: this.protocols[0], rules: [{ required: true, message: 'required'}] }]"
v-decorator="['protocol', { initialValue: this.protocols[0], rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => this.protocolSelected = val">
<a-select-option :value="protocol" v-for="(protocol,idx) in protocols" :key="idx">
{{ protocol }}
@ -91,44 +91,44 @@
<div
v-if="protocolSelected === 'nfs' || protocolSelected === 'SMB' || protocolSelected === 'iscsi' || protocolSelected === 'vmfs'|| protocolSelected === 'Gluster'">
<a-form-item :label="$t('label.server')">
<a-input v-decorator="['server', { rules: [{ required: true, message: 'required' }] }]" />
<a-input v-decorator="['server', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]" />
</a-form-item>
</div>
<div v-if="protocolSelected === 'nfs' || protocolSelected === 'SMB' || protocolSelected === 'ocfs2' || protocolSelected === 'preSetup'|| protocolSelected === 'SharedMountPoint'">
<a-form-item :label="$t('label.path')">
<a-input v-decorator="['path', { rules: [{ required: true, message: 'required' }] }]" />
<a-input v-decorator="['path', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]" />
</a-form-item>
</div>
<div v-if="protocolSelected === 'SMB'">
<a-form-item :label="$t('label.smbusername')">
<a-input v-decorator="['smbUsername', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['smbUsername', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
<a-form-item :label="$t('label.smbpassword')">
<a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
<a-form-item :label="$t('label.smbdomain')">
<a-input v-decorator="['smbDomain', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['smbDomain', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
</div>
<div v-if="protocolSelected === 'iscsi'">
<a-form-item :label="$t('label.iqn')">
<a-input v-decorator="['iqn', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['iqn', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
<a-form-item :label="$t('label.lun')">
<a-input v-decorator="['lun', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['lun', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
</div>
<div v-if="protocolSelected === 'vmfs'">
<a-form-item :label="$t('label.vcenterdatacenter')">
<a-input v-decorator="['vCenterDataCenter', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['vCenterDataCenter', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
<a-form-item :label="$t('label.vcenterdatastore')">
<a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: 'required' }] }]"/>
<a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
</a-form-item>
</div>
<a-form-item :label="$t('label.providername')">
<a-select
v-decorator="['provider', { initialValue: providerSelected, rules: [{ required: true, message: 'required'}] }]"
v-decorator="['provider', { initialValue: providerSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
@change="val => this.providerSelected = val">
<a-select-option :value="provider" v-for="(provider,idx) in providers" :key="idx">
{{ provider }}
@ -166,7 +166,7 @@
</div>
<div v-if="protocolSelected === 'CLVM'">
<a-form-item :label="$t('label.volumegroup')">
<a-input v-decorator="['volumegroup', { rules: [{ required: true, message: 'required'}] }]" />
<a-input v-decorator="['volumegroup', { rules: [{ required: true, message: `${this.$t('label.required')}`}] }]" />
</a-form-item>
</div>
<div v-if="protocolSelected === 'Gluster'">

View File

@ -45,7 +45,7 @@
'zone',
{
initialValue: this.zoneSelected,
rules: [{ required: true, message: 'required'}]
rules: [{ required: true, message: `${this.$t('label.required')}`}]
}]"
@change="val => { zoneSelected = val }"
>
@ -61,7 +61,7 @@
v-decorator="[
'server',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -70,7 +70,7 @@
v-decorator="[
'path',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -81,7 +81,7 @@
v-decorator="[
'smbUsername',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -90,7 +90,7 @@
v-decorator="[
'smbPassword',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -99,7 +99,7 @@
v-decorator="[
'smbDomain',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -110,7 +110,7 @@
v-decorator="[
'url',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -119,7 +119,7 @@
v-decorator="[
'account',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -128,7 +128,7 @@
v-decorator="[
'username',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -137,7 +137,7 @@
v-decorator="[
'key',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>

View File

@ -262,11 +262,11 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicateclusterresponse.jobid,
successMessage: `Successfully dedicated cluster`,
successMessage: this.$t('message.cluster.dedicated'),
successMethod: () => {
this.loading = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated cluster',
title: this.$t('message.cluster.dedicated'),
jobid: response.dedicateclusterresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -276,7 +276,7 @@ export default {
errorMethod: () => {
this.loading = false
},
loadingMessage: `Dedicating cluster...`,
loadingMessage: this.$t('message.dedicate.zone'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.loading = false

View File

@ -59,6 +59,12 @@ export default {
ListView,
Breadcrumb
},
provide: function () {
return {
parentFetchData: this.fetchData,
parentToggleLoading: () => { this.loading = !this.loading }
}
},
data () {
return {
loading: false,

View File

@ -315,11 +315,11 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicatehostresponse.jobid,
successMessage: `Successfully dedicated host`,
successMessage: this.$t('message.host.dedicated'),
successMethod: () => {
this.loading = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated host',
title: this.$t('message.host.dedicated'),
jobid: response.dedicatehostresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -329,7 +329,7 @@ export default {
errorMethod: () => {
this.loading = false
},
loadingMessage: `Dedicating host...`,
loadingMessage: this.$t('message.dedicate.host'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.loading = false

View File

@ -48,16 +48,16 @@
</p>
<a-form @submit.prevent="handleSslFormSubmit" ref="sslForm" :form="form">
<a-form-item label="Root certificate" :required="true">
<a-form-item :label="$t('label.root.certificate')" :required="true">
<a-textarea
id="rootCert"
rows="2"
placeholder="Root certificate"
:placeholder="$t('label.root.certificate')"
:autoFocus="true"
name="rootCert"
v-decorator="[
'root',
{rules: [{ required: true, message: 'Required' }], validateTrigger:'change'}
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
]"
></a-textarea>
</a-form-item>
@ -67,11 +67,11 @@
v-for="(item, index) in intermediateCertificates"
:key="`key-${index}`"
class="intermediate-certificate"
:label="`Intermediate certificate ${index + 1}`">
:label="$t('label.intermediate.certificate') + ` ${index + 1}`">
<a-textarea
:id="`intermediateCert${index}`"
rows="2"
:placeholder="`Intermediate certificate ${index + 1}`"
:placeholder="$t('label.intermediate.certificate') + ` ${index + 1}`"
:name="`intermediateCert${index}`"
v-decorator="[
`intermediate${index + 1}`,
@ -88,40 +88,40 @@
</a-button>
</a-form-item>
<a-form-item label="Server certificate" :required="true">
<a-form-item :label="$t('label.server.certificate')" :required="true">
<a-textarea
id="serverCert"
rows="2"
placeholder="Server certificate"
:placeholder="$t('label.server.certificate')"
name="serverCert"
v-decorator="[
'server',
{rules: [{ required: true, message: 'Required' }], validateTrigger:'change'}
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
]"
></a-textarea>
</a-form-item>
<a-form-item label="PKCS#8 Private Key" :required="true">
<a-form-item :label="$t('label.pkcs.private.certificate')" :required="true">
<a-textarea
id="pkcsKey"
rows="2"
placeholder="PKCS#8 Private Key"
:placeholder="$t('label.pkcs.private.certificate')"
name="pkcsKey"
v-decorator="[
'pkcs',
{rules: [{ required: true, message: 'Required' }], validateTrigger:'change'}
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
]"
></a-textarea>
</a-form-item>
<a-form-item label="DNS Domain Suffix (i.e., xyz.com)" :required="true">
<a-form-item :label="$t('label.domain.suffix')" :required="true">
<a-input
id="dnsSuffix"
placeholder="DNS Domain Suffix (i.e., xyz.com)"
:placeholder="$t('label.domain.suffix')"
name="dnsSuffix"
v-decorator="[
'dns',
{rules: [{ required: true, message: 'Required' }], validateTrigger:'change'}
{rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
]"
></a-input>
</a-form-item>

View File

@ -23,7 +23,7 @@
<a-select
v-decorator="['zoneid', {
initialValue: this.zoneId,
rules: [{ required: true, message: 'required' }] }
rules: [{ required: true, message: `${this.$t('label.required')}` }] }
]">
<a-select-option
v-for="zone in zonesList"
@ -40,7 +40,7 @@
v-decorator="[
'name',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -51,7 +51,7 @@
v-decorator="[
'gateway',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -62,7 +62,7 @@
v-decorator="[
'netmask',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -73,7 +73,7 @@
v-decorator="[
'startip',
{
rules: [{ required: true, message: 'required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
/>
</a-form-item>
@ -213,11 +213,11 @@ export default {
}).then(response => {
this.$pollJob({
jobId: response.dedicatepodresponse.jobid,
successMessage: `Successfully dedicated pod`,
successMessage: this.$t('message.pod.dedicated'),
successMethod: () => {
this.loading = false
this.$store.dispatch('AddAsyncJob', {
title: 'Successfully dedicated pod',
title: this.$t('message.pod.dedicated'),
jobid: response.dedicatepodresponse.jobid,
description: `Domain ID: ${this.dedicatedDomainId}`,
status: 'progress'
@ -227,7 +227,7 @@ export default {
errorMethod: () => {
this.loading = false
},
loadingMessage: `Dedicating pod...`,
loadingMessage: this.$t('message.dedicate.pod'),
catchMessage: 'Error encountered while fetching async job result',
catchMethod: () => {
this.loading = false

View File

@ -59,7 +59,7 @@
<a-form-item :label="$t('label.vlanrange')">
<a-input
v-decorator="['range', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
></a-input>
</a-form-item>
@ -75,7 +75,7 @@
<a-select
@change="handleDomainChange"
v-decorator="['domain', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
>
<a-select-option v-for="domain in domains" :key="domain.id" :value="domain.id">{{ domain.name }}</a-select-option>
@ -85,7 +85,7 @@
<a-form-item :label="$t('label.account')" v-if="selectedScope === 'account'">
<a-select
v-decorator="['account', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
>
<a-select-option
@ -100,7 +100,7 @@
<a-form-item :label="$t('label.project')" v-if="selectedScope === 'project'">
<a-select
v-decorator="['project', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
>
<a-select-option

View File

@ -72,7 +72,7 @@
<a-form-item :label="$t('label.podid')" class="form__item">
<a-select
v-decorator="['pod', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
>
<a-select-option v-for="item in items" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
@ -80,12 +80,12 @@
</a-form-item>
<a-form-item :label="$t('label.gateway')" class="form__item">
<a-input
v-decorator="['gateway', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.netmask')" class="form__item">
<a-input
v-decorator="['netmask', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.vlan')" class="form__item">
@ -95,12 +95,12 @@
</a-form-item>
<a-form-item :label="$t('label.startip')" class="form__item">
<a-input
v-decorator="['startip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.endip')" class="form__item">
<a-input
v-decorator="['endip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.system.vms')" class="form__item">

View File

@ -120,12 +120,12 @@
>
<a-form-item :label="$t('label.gateway')" class="form__item">
<a-input
v-decorator="['gateway', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.netmask')" class="form__item">
<a-input
v-decorator="['netmask', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.vlan')" class="form__item">
@ -135,12 +135,12 @@
</a-form-item>
<a-form-item :label="$t('label.startip')" class="form__item">
<a-input
v-decorator="['startip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.endip')" class="form__item">
<a-input
v-decorator="['endip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<div class="form__item">

View File

@ -70,7 +70,7 @@
<a-form-item :label="$t('label.podid')" class="form__item">
<a-select
v-decorator="['pod', {
rules: [{ required: true, message: 'Required' }]
rules: [{ required: true, message: `${this.$t('label.required')}` }]
}]"
>
<a-select-option v-for="pod in pods" :key="pod.id" :value="pod.id">{{ pod.name }}</a-select-option>
@ -78,12 +78,12 @@
</a-form-item>
<a-form-item :label="$t('label.gateway')" class="form__item">
<a-input
v-decorator="['gateway', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.netmask')" class="form__item">
<a-input
v-decorator="['netmask', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['netmask', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.vlan')" class="form__item">
@ -93,12 +93,12 @@
</a-form-item>
<a-form-item :label="$t('label.startip')" class="form__item">
<a-input
v-decorator="['startip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
<a-form-item :label="$t('label.endip')" class="form__item">
<a-input
v-decorator="['endip', { rules: [{ required: true, message: 'Required' }] }]">
v-decorator="['endip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
</a-input>
</a-form-item>
</a-form>

View File

@ -284,33 +284,33 @@ export default {
{
title: 'label.pod.name',
key: 'podName',
placeHolder: 'Please enter pod name',
placeHolder: 'message.installwizard.tooltip.addpod.name',
required: true
},
{
title: 'label.reserved.system.gateway',
key: 'podReservedGateway',
placeHolder: 'Please enter system gateway for Pod',
placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemgateway',
required: true
},
{
title: 'label.reserved.system.netmask',
key: 'podReservedNetmask',
placeHolder: 'Please enter system netmask for Pod',
placeHolder: 'message.tooltip.reserved.system.netmask',
required: true
},
{
title: 'label.start.reserved.system.IP',
title: 'label.start.reserved.system.ip',
key: 'podReservedStartIp',
placeHolder: 'Please enter reserved system start ip for Pod',
placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemstartip',
required: true,
ipV4: true,
message: 'Please enter a valid IP v4 address.'
},
{
title: 'label.end.reserved.system.IP',
title: 'label.end.reserved.system.ip',
key: 'podReservedStopIp',
placeHolder: 'Please enter reserved system stop ip for Pod',
placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemendip',
required: false,
ipV4: true,
message: 'Please enter a valid IP v4 address.'
@ -320,19 +320,19 @@ export default {
{
title: 'label.guest.gateway',
key: 'guestGateway',
placeHolder: 'Please enter guest gateway',
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.guestgateway',
required: false
},
{
title: 'label.guest.netmask',
key: 'guestNetmask',
placeHolder: 'Please enter guest netmask',
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.guestnetmask',
required: false
},
{
title: 'label.guest.start.ip',
key: 'guestStartIp',
placeHolder: 'Please enter start ip for guest traffic',
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.gueststartip',
required: false,
ipV4: true,
message: 'Please enter a valid IP v4 address.'
@ -340,7 +340,7 @@ export default {
{
title: 'label.guest.end.ip',
key: 'guestStopIp',
placeHolder: 'Please enter stop ip for guest traffic',
placeHolder: 'message.installwizard.tooltip.configureguesttraffic.guestendip',
required: false,
ipV4: true,
message: 'Please enter a valid IP v4 address.'

View File

@ -60,7 +60,7 @@
</a-tag>
</div>
<a-modal
title="Edit traffic type"
:title="$t('label.edit.traffic.type')"
:visible="showEditTraffic"
:closable="true"
@ok="updateTrafficLabel(trafficInEdit)"
@ -69,7 +69,7 @@
>
<a-form :form="form">
<span class="ant-form-text"> Please specify the traffic label you want associated with this traffic type. </span>
<a-form-item v-bind="formItemLayout" style="margin-top:16px;" label="Traffic Label">
<a-form-item v-bind="formItemLayout" style="margin-top:16px;" :label="$t('label.traffic.label')">
<a-input
v-decorator="['trafficLabel', {
rules: [{

View File

@ -91,7 +91,7 @@
</draggable>
</div>
<a-modal title="Edit Tags" v-model="tagsModalVisible" :footer="null">
<a-modal :title="$t('label.edit.tags')" v-model="tagsModalVisible" :footer="null">
<a-spin v-if="tagsLoading"></a-spin>
<div v-else>
@ -150,15 +150,15 @@
</a-form-item>
<a-form-item v-if="ruleForm.getFieldValue('protocol') === 'protocolnumber'" :label="$t('label.protocolnumber')">
<a-input v-decorator="['protocolnumber' , { rules: [{ required: true, message: 'required' }]}]" />
<a-input v-decorator="['protocolnumber' , { rules: [{ required: true, message: `${this.$t('label.required')}` }]}]" />
</a-form-item>
<div v-if="ruleForm.getFieldValue('protocol') === 'icmp' || ruleForm.getFieldValue('protocol') === 'protocolnumber'">
<a-form-item :label="$t('label.icmptype')">
<a-input v-decorator="['icmptype']" placeholder="Please specify -1 if you want to allow all ICMP types." />
<a-input v-decorator="['icmptype']" :placeholder="$t('icmp.type.desc')" />
</a-form-item>
<a-form-item :label="$t('label.icmpcode')">
<a-input v-decorator="['icmpcode']" placeholder="Please specify -1 if you want to allow all ICMP types." />
<a-input v-decorator="['icmpcode']" :placeholder="$t('icmp.code.desc')" />
</a-form-item>
</div>
@ -181,7 +181,7 @@
<a-textarea
v-decorator="['reason']"
:autosize="{ minRows: 2 }"
placeholder="Enter the reason behind an ACL rule" />
:placeholder="$t('label.acl.reason.description')" />
</a-form-item>
</a-form>
</a-modal>
@ -218,7 +218,7 @@ export default {
ruleForm: this.$form.createForm(this),
tagsLoading: false,
ruleModalVisible: false,
ruleModalTitle: 'Edit rule',
ruleModalTitle: this.$t('label.edit.rule'),
ruleFormMode: 'edit'
}
},
@ -415,7 +415,7 @@ export default {
partialupgrade: false
}).then(response => {
this.$store.dispatch('AddAsyncJob', {
title: `Edit ACL rule`,
title: this.$t('label.edit.acl.rule'),
jobid: response.createnetworkaclresponse.jobid,
status: 'progress'
})

View File

@ -43,7 +43,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -82,7 +82,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -112,7 +112,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -43,7 +43,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -82,7 +82,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -43,7 +43,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -139,7 +139,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -170,7 +170,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"
@ -193,7 +193,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -22,7 +22,7 @@
v-decorator="[
'name',
{
rules: [{ required: true, message: 'required' }],
rules: [{ required: true, message: `${this.$t('label.required')}` }],
}
]"
:placeholder="$t('label.vpncustomergatewayname')" />
@ -32,7 +32,7 @@
v-decorator="[
'gateway',
{
rules: [{ required: true, message: 'required'}],
rules: [{ required: true, message: `${this.$t('label.required')}`}],
}
]"
:placeholder="$t('label.vpncustomergateway')" />
@ -42,7 +42,7 @@
v-decorator="[
'cidrlist',
{
rules: [{ required: true, message: 'required'}],
rules: [{ required: true, message: `${this.$t('label.required')}`}],
}
]"
:placeholder="$t('label.vpncustomergateway.cidrlist')" />
@ -53,7 +53,7 @@
v-decorator="[
'ipsecpsk',
{
rules: [{ required: true, message: 'required'}],
rules: [{ required: true, message: `${this.$t('label.required')}`}],
}
]"
:placeholder="$t('label.vpncustomergateway.secretkey')" />

View File

@ -28,7 +28,7 @@
<div class="list__header__col list__header__col--full">
<a-input-search
placeholder="Search"
:placeholder="$t('label.search')"
v-model="searchQuery"
@search="fetchData" />
</div>

View File

@ -91,7 +91,7 @@
@showSizeChange="handleChangePageSize"
showSizeChanger/>
<a-modal title="Edit Tags" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal">
<a-modal :title="$t('label.edit.tags')" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal">
<div class="add-tags">
<div class="add-tags__input">
<p class="add-tags__label">{{ $t('label.key') }}</p>

View File

@ -97,7 +97,7 @@
</template>
</a-table>
<a-modal title="Edit Tags" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal">
<a-modal :title="$t('label.edit.tags')" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal">
<a-spin v-if="tagsLoading"></a-spin>
<div v-else>

View File

@ -124,7 +124,11 @@ export default {
api('listLoadBalancers', {
id: this.resource.id
}).then(response => {
this.assignedVMs = response.listloadbalancersresponse.loadbalancer[0].loadbalancerinstance || []
const lb = response.listloadbalancersresponse.loadbalancer
this.assignedVMs = []
if (Array.isArray(lb) && lb.length) {
this.assignedVMs = lb[0].loadbalancerinstance || []
}
}).finally(() => {
this.fetchLoading = false
})

View File

@ -131,7 +131,7 @@
@showSizeChange="handleChangePageSize"
showSizeChanger/>
<a-modal title="Edit Tags" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal" class="tags-modal">
<a-modal :title="$t('label.edit.tags')" v-model="tagsModalVisible" :footer="null" :afterClose="closeModal" class="tags-modal">
<span v-show="tagsModalLoading" class="modal-loading">
<a-icon type="loading"></a-icon>
</span>
@ -166,7 +166,7 @@
</a-modal>
<a-modal
title="Configure Sticky Policy"
:title="$t('label.configure.sticky.policy')"
v-model="stickinessModalVisible"
:footer="null"
:afterClose="closeModal"
@ -177,7 +177,7 @@
</span>
<a-form :form="stickinessPolicyForm" @submit="handleSubmitStickinessForm" class="custom-ant-form">
<a-form-item label="Stickiness method">
<a-form-item :label="$t('label.stickiness.method')">
<a-select v-decorator="['methodname']" @change="handleStickinessMethodSelectChange">
<a-select-option value="LbCookie">LbCookie</a-select-option>
<a-select-option value="AppCookie">AppCookie</a-select-option>
@ -186,58 +186,58 @@
</a-select>
</a-form-item>
<a-form-item
label="Sticky Name"
:label="$t('label.sticky.name')"
v-show="stickinessPolicyMethod === 'LbCookie' || stickinessPolicyMethod ===
'AppCookie' || stickinessPolicyMethod === 'SourceBased'">
<a-input v-decorator="['name', { rules: [{ required: true, message: 'Please specify a sticky name'}] }]" />
</a-form-item>
<a-form-item
label="Cookie name"
:label="$t('label.sticky.cookie-name')"
v-show="stickinessPolicyMethod === 'LbCookie' || stickinessPolicyMethod ===
'AppCookie'">
<a-input v-decorator="['cookieName']" />
</a-form-item>
<a-form-item
label="Mode"
:label="$t('label.sticky.mode')"
v-show="stickinessPolicyMethod === 'LbCookie' || stickinessPolicyMethod ===
'AppCookie'">
<a-input v-decorator="['mode']" />
</a-form-item>
<a-form-item label="No cache" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-form-item :label="$t('label.sticky.nocache')" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-checkbox v-decorator="['nocache']" v-model="stickinessNoCache"></a-checkbox>
</a-form-item>
<a-form-item label="Indirect" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-form-item :label="$t('label.sticky.indirect')" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-checkbox v-decorator="['indirect']" v-model="stickinessIndirect"></a-checkbox>
</a-form-item>
<a-form-item label="Post only" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-form-item :label="$t('label.sticky.postonly')" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-checkbox v-decorator="['postonly']" v-model="stickinessPostOnly"></a-checkbox>
</a-form-item>
<a-form-item label="Domain" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-form-item :label="$t('label.domain')" v-show="stickinessPolicyMethod === 'LbCookie'">
<a-input v-decorator="['domain']" />
</a-form-item>
<a-form-item label="Length" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-form-item :label="$t('label.sticky.length')" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-input v-decorator="['length']" type="number" />
</a-form-item>
<a-form-item label="Hold time" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-form-item :label="$t('label.sticky.holdtime')" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-input v-decorator="['holdtime']" type="number" />
</a-form-item>
<a-form-item label="Request learn" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-form-item :label="$t('label.sticky.request-learn')" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-checkbox v-decorator="['requestLearn']" v-model="stickinessRequestLearn"></a-checkbox>
</a-form-item>
<a-form-item label="Prefix" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-form-item :label="$t('label.sticky.prefix')" v-show="stickinessPolicyMethod === 'AppCookie'">
<a-checkbox v-decorator="['prefix']" v-model="stickinessPrefix"></a-checkbox>
</a-form-item>
<a-form-item label="Table size" v-show="stickinessPolicyMethod === 'SourceBased'">
<a-form-item :label="$t('label.sticky.tablesize')" v-show="stickinessPolicyMethod === 'SourceBased'">
<a-input v-decorator="['tablesize']" />
</a-form-item>
<a-form-item label="Expires" v-show="stickinessPolicyMethod === 'SourceBased'">
<a-form-item :label="$t('label.sticky.expire')" v-show="stickinessPolicyMethod === 'SourceBased'">
<a-input v-decorator="['expire']" />
</a-form-item>
<a-button type="primary" html-type="submit">OK</a-button>
</a-form>
</a-modal>
<a-modal title="Edit rule" v-model="editRuleModalVisible" :afterClose="closeModal" @ok="handleSubmitEditForm">
<a-modal :title="$t('label.edit.rule')" v-model="editRuleModalVisible" :afterClose="closeModal" @ok="handleSubmitEditForm">
<span v-show="editRuleModalLoading" class="modal-loading">
<a-icon type="loading"></a-icon>
</span>

View File

@ -28,10 +28,10 @@
<a-tab-pane :tab="$t('label.networks')" key="tier">
<VpcTiersTab :resource="resource" :loading="loading" />
</a-tab-pane>
<a-tab-pane tab="Public IP Addresses" key="ip" v-if="'listPublicIpAddresses' in $store.getters.apis">
<a-tab-pane :tab="$t('label.public.ips')" key="ip" v-if="'listPublicIpAddresses' in $store.getters.apis">
<IpAddressesTab :resource="resource" :loading="loading" />
</a-tab-pane>
<a-tab-pane tab="Network ACL Lists" key="acl" v-if="'listNetworkACLLists' in $store.getters.apis">
<a-tab-pane :tab="$t('label.network.acl.lists')" key="acl" v-if="'listNetworkACLLists' in $store.getters.apis">
<a-button
type="dashed"
icon="plus"
@ -70,15 +70,15 @@
@ok="handleNetworkAclFormSubmit">
<a-form @submit.prevent="handleNetworkAclFormSubmit" :form="networkAclForm">
<a-form-item :label="$t('label.add.list.name')">
<a-input v-decorator="['name', {rules: [{ required: true, message: 'Required' }]}]"></a-input>
<a-input v-decorator="['name', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
</a-form-item>
<a-form-item :label="$t('label.description')">
<a-input v-decorator="['description', {rules: [{ required: true, message: 'Required' }]}]"></a-input>
<a-input v-decorator="['description', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
</a-form-item>
</a-form>
</a-modal>
</a-tab-pane>
<a-tab-pane tab="Private Gateways" key="pgw" v-if="'listPrivateGateways' in $store.getters.apis">
<a-tab-pane :tab="$t('label.private.gateway')" key="pgw" v-if="'listPrivateGateways' in $store.getters.apis">
<a-button
type="dashed"
icon="plus"
@ -125,25 +125,25 @@
<a-form-item :label="$t('label.vlan')" :required="true">
<a-input
:placeholder="placeholders.vlan"
v-decorator="['vlan', {rules: [{ required: true, message: 'Required' }]}]"
v-decorator="['vlan', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
></a-input>
</a-form-item>
<a-form-item :label="$t('label.publicip')" :required="true">
<a-input
:placeholder="placeholders.ipaddress"
v-decorator="['ipaddress', {rules: [{ required: true, message: 'Required' }]}]"
v-decorator="['ipaddress', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
></a-input>
</a-form-item>
<a-form-item :label="$t('label.gateway')" :required="true">
<a-input
:placeholder="placeholders.gateway"
v-decorator="['gateway', {rules: [{ required: true, message: 'Required' }]}]"
v-decorator="['gateway', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
></a-input>
</a-form-item>
<a-form-item :label="$t('label.netmask')" :required="true">
<a-input
:placeholder="placeholders.netmask"
v-decorator="['netmask', {rules: [{ required: true, message: 'Required' }]}]"
v-decorator="['netmask', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
></a-input>
</a-form-item>
<a-form-item :label="$t('label.sourcenat')">
@ -160,7 +160,7 @@
</a-spin>
</a-modal>
</a-tab-pane>
<a-tab-pane tab="VPN Gateway" key="vpngw" v-if="'listVpnGateways' in $store.getters.apis">
<a-tab-pane :tab="$t('label.vpn.gateway')" key="vpngw" v-if="'listVpnGateways' in $store.getters.apis">
<a-button
v-if="vpnGateways.length === 0"
type="dashed"
@ -184,7 +184,7 @@
</a-list-item>
</a-list>
</a-tab-pane>
<a-tab-pane tab="VPN Connections" key="vpnc" v-if="'listVpnConnections' in $store.getters.apis">
<a-tab-pane :tab="$t('label.vpn.connection')" key="vpnc" v-if="'listVpnConnections' in $store.getters.apis">
<a-button
type="dashed"
icon="plus"
@ -236,7 +236,7 @@
</a-spin>
</a-modal>
</a-tab-pane>
<a-tab-pane tab="Virtual Routers" key="vr" v-if="'listRouters' in $store.getters.apis">
<a-tab-pane :tab="$t('label.virtual.routers')" key="vr" v-if="'listRouters' in $store.getters.apis">
<RoutersTab :resource="resource" :loading="loading" />
</a-tab-pane>
</a-tabs>

View File

@ -134,11 +134,11 @@
<a-form-item :label="$t('label.name')">
<a-input
placeholder="A unique name of the tier"
v-decorator="['name',{rules: [{ required: true, message: 'Required' }]}]"></a-input>
v-decorator="['name',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
</a-form-item>
<a-form-item :label="$t('label.networkofferingid')">
<a-select
v-decorator="['networkOffering',{rules: [{ required: true, message: 'Required' }]}]">
v-decorator="['networkOffering',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]">
<a-select-option v-for="item in networkOfferings" :key="item.id" :value="item.id">
{{ item.name }}
</a-select-option>
@ -147,12 +147,12 @@
<a-form-item :label="$t('label.gateway')">
<a-input
placeholder="The gateway of the tier in the super CIDR range and not overlapping the CIDR of any other tier in this VPC."
v-decorator="['gateway',{rules: [{ required: true, message: 'Required' }]}]"></a-input>
v-decorator="['gateway',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
</a-form-item>
<a-form-item :label="$t('label.netmask')">
<a-input
placeholder="Netmask of the tier. For example, with VPC CIDR of 10.0.0.0/16 and network tier CIDR of 10.1.1.0/24, gateway is 10.1.1.1 and netmask is 255.255.255.0"
v-decorator="['netmask',{rules: [{ required: true, message: 'Required' }]}]"></a-input>
v-decorator="['netmask',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
</a-form-item>
<a-form-item :label="$t('label.externalid')">
<a-input
@ -201,7 +201,7 @@
'algorithm',
{
initialValue: 'Source',
rules: [{ required: true, message: 'required'}]
rules: [{ required: true, message: `${this.$t('label.required')}`}]
}]">
<a-select-option v-for="(key, idx) in Object.keys(algorithms)" :key="idx" :value="algorithms[key]">
{{ key }}

View File

@ -170,7 +170,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
],
initialValue: 0
@ -313,7 +313,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -71,7 +71,7 @@
rules: [
{
required: true,
message: 'Please select option'
message: `${this.$t('message.error.select')}`
}
]
}]"

View File

@ -38,7 +38,7 @@
showSearch
allowClear
v-decorator="['zoneid', {
rules: [{ required: true, message: 'Please select option' }]
rules: [{ required: true, message: `${this.$t('message.error.select')}` }]
}]"
:loading="zones.loading"
@change="onChangeZone">

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