You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2020/07/27 07:33:41 UTC

[cloudstack-primate] branch master updated: src: fix doclinks and translation across UI (#481)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-primate.git


The following commit(s) were added to refs/heads/master by this push:
     new fd00c7e  src: fix doclinks and translation across UI (#481)
fd00c7e is described below

commit fd00c7ed1ac762040bf6ed0be5dfba45c6bbc638
Author: Hoang Nguyen <ho...@unitech.vn>
AuthorDate: Mon Jul 27 14:33:31 2020 +0700

    src: fix doclinks and translation across UI (#481)
---
 src/components/header/HeaderNotice.vue             |   2 +-
 src/components/view/DedicateData.vue               |  26 +-
 src/components/view/DedicateDomain.vue             |   2 +-
 src/components/view/DedicateModal.vue              |  24 +-
 src/components/view/DetailSettings.vue             |  12 +-
 src/components/view/DetailsTab.vue                 |   4 +
 src/components/view/InfoCard.vue                   |  48 ++-
 src/components/view/ListResourceTable.vue          |   6 +-
 src/components/view/ListView.vue                   |  22 +-
 src/components/view/ResourceCountUsage.vue         |   4 +-
 src/components/view/ResourceLimitTab.vue           |   4 +-
 src/components/view/SettingsTab.vue                |   9 +-
 src/components/widgets/Breadcrumb.vue              |   8 +-
 src/config/section/compute.js                      |   1 -
 src/config/section/image.js                        |   2 +
 src/config/section/infra/primaryStorages.js        |   1 +
 src/config/section/infra/secondaryStorages.js      |   1 +
 src/config/section/offering.js                     |   2 +
 src/config/section/plugin/quota.js                 |   1 +
 src/config/section/project.js                      |   6 +-
 src/config/section/storage.js                      |  11 +
 src/locales/en.json                                | 460 ++++++++++++++++++++-
 src/permission.js                                  |   4 +-
 src/store/modules/user.js                          |   5 +-
 src/utils/plugins.js                               |  14 +-
 src/utils/request.js                               |  13 +-
 src/views/AutogenView.vue                          |   4 +-
 src/views/auth/Login.vue                           |  11 +-
 src/views/compute/ChangeAffinity.vue               |   2 +-
 src/views/compute/CreateKubernetesCluster.vue      |  26 +-
 src/views/compute/CreateSSHKeyPair.vue             |  12 +-
 src/views/compute/DeployVM.vue                     |  12 +-
 src/views/compute/DestoryVM.vue                    |   6 +-
 src/views/compute/InstanceTab.vue                  |  72 ++--
 src/views/compute/KubernetesServiceTab.vue         |  39 +-
 src/views/compute/MigrateWizard.vue                |  16 +-
 src/views/compute/ScaleKubernetesCluster.vue       |   8 +-
 src/views/compute/ScaleVM.vue                      |   8 +-
 src/views/compute/UpgradeKubernetesCluster.vue     |   7 +-
 src/views/compute/backup/BackupSchedule.vue        |   6 +-
 src/views/compute/backup/FormSchedule.vue          |   6 +-
 .../compute/wizard/AffinityGroupSelection.vue      |   2 +-
 .../compute/wizard/ComputeOfferingSelection.vue    |   2 +-
 src/views/compute/wizard/ComputeSelection.vue      |   2 +-
 src/views/compute/wizard/DiskOfferingSelection.vue |   2 +-
 src/views/compute/wizard/DiskSizeSelection.vue     |   2 +-
 src/views/compute/wizard/NetworkSelection.vue      |   2 +-
 src/views/compute/wizard/SshKeyPairSelection.vue   |   2 +-
 src/views/compute/wizard/TemplateIsoRadioGroup.vue |   2 +-
 src/views/dashboard/CapacityDashboard.vue          |   2 +-
 src/views/dashboard/UsageDashboard.vue             |   4 +-
 src/views/exception/ExceptionPage.vue              |   2 +-
 src/views/iam/AddAccount.vue                       |  16 +-
 src/views/iam/AddLdapAccount.vue                   |   8 +-
 src/views/iam/ChangeUserPassword.vue               |   8 +-
 src/views/iam/ConfigureSamlSsoAuth.vue             |   8 +-
 src/views/iam/DomainActionForm.vue                 |   6 +-
 src/views/iam/DomainView.vue                       |   2 +-
 src/views/iam/PermissionEditable.vue               |   4 +-
 src/views/iam/RolePermissionTab.vue                |   6 +-
 src/views/iam/RuleDelete.vue                       |   4 +-
 src/views/iam/SSLCertificateTab.vue                |  14 +-
 src/views/image/AddKubernetesSupportedVersion.vue  |  20 +-
 src/views/image/IsoZones.vue                       |  12 +-
 src/views/image/RegisterOrUploadIso.vue            |  24 +-
 src/views/image/RegisterOrUploadTemplate.vue       |  22 +-
 src/views/image/TemplateZones.vue                  |  12 +-
 .../image/UpdateKubernetesSupportedVersion.vue     |   2 +-
 src/views/image/UpdateTemplateIsoPermissions.vue   |  35 +-
 src/views/image/UploadLocalIso.vue                 |   2 +-
 src/views/image/UploadLocalTemplate.vue            |   2 +-
 src/views/infra/AddPrimaryStorage.vue              |  34 +-
 src/views/infra/AddSecondaryStorage.vue            |  20 +-
 src/views/infra/ClusterAdd.vue                     |  12 +-
 src/views/infra/HostAdd.vue                        |  20 +-
 src/views/infra/InfraSummary.vue                   |  26 +-
 src/views/infra/PodAdd.vue                         |  22 +-
 src/views/infra/network/DedicatedVLANTab.vue       |  26 +-
 src/views/infra/network/IpRangesTabManagement.vue  |  28 +-
 src/views/infra/network/IpRangesTabPublic.vue      |  17 +-
 src/views/infra/network/IpRangesTabStorage.vue     |  28 +-
 src/views/infra/network/ServiceProvidersTab.vue    |   6 +-
 src/views/infra/network/TrafficTypesTab.vue        |   2 +-
 .../infra/network/providers/AddF5LoadBalancer.vue  |   6 +-
 .../network/providers/AddNetscalerLoadBalancer.vue |   6 +-
 .../infra/network/providers/AddNiciraNvpDevice.vue |   6 +-
 .../network/providers/AddPaloAltoFirewall.vue      |   6 +-
 .../infra/network/providers/AddSrxFirewall.vue     |   6 +-
 src/views/infra/network/providers/ProviderItem.vue |   2 +-
 .../infra/network/providers/ProviderListView.vue   |   6 +-
 src/views/infra/zone/AdvancedGuestTrafficForm.vue  |   6 +-
 src/views/infra/zone/IpAddressRangeForm.vue        |  14 +-
 src/views/infra/zone/StaticInputsForm.vue          |  10 +-
 src/views/infra/zone/SystemVmsTab.vue              |   4 +-
 src/views/infra/zone/ZoneWizard.vue                |  22 +-
 src/views/infra/zone/ZoneWizardAddResources.vue    |  88 ++--
 src/views/infra/zone/ZoneWizardLaunchZone.vue      |  32 +-
 .../infra/zone/ZoneWizardNetworkSetupStep.vue      |  14 +-
 .../zone/ZoneWizardPhysicalNetworkSetupStep.vue    |   8 +-
 src/views/infra/zone/ZoneWizardZoneDetailsStep.vue |  44 +-
 src/views/infra/zone/ZoneWizardZoneTypeStep.vue    |   2 +-
 src/views/network/AclListRulesTab.vue              |  88 ++--
 src/views/network/CreateIsolatedNetworkForm.vue    |  10 +-
 src/views/network/CreateL2NetworkForm.vue          |  10 +-
 src/views/network/CreateSharedNetworkForm.vue      |  14 +-
 src/views/network/CreateVpnCustomerGateway.vue     |  20 +-
 src/views/network/EgressRulesTab.vue               |  32 +-
 src/views/network/EnableStaticNat.vue              |   6 +-
 src/views/network/FirewallRules.vue                |  34 +-
 src/views/network/IngressEgressRuleConfigure.vue   |  60 +--
 src/views/network/InternalLBAssignVmForm.vue       |  14 +-
 src/views/network/InternalLBAssignedVmTab.vue      |  10 +-
 src/views/network/IpAddressesTab.vue               |  22 +-
 src/views/network/LoadBalancing.vue                | 130 +++---
 src/views/network/NicsTable.vue                    |   2 +-
 src/views/network/PortForwarding.vue               |  54 +--
 src/views/network/StaticRoutesTab.vue              |  36 +-
 src/views/network/VpcTab.vue                       |  58 +--
 src/views/network/VpcTiersTab.vue                  |  46 +--
 src/views/network/VpnDetails.vue                   |  48 ++-
 src/views/offering/AddComputeOffering.vue          |  15 +-
 src/views/offering/AddDiskOffering.vue             |   4 +-
 src/views/offering/AddNetworkOffering.vue          |   8 +-
 src/views/offering/AddVpcOffering.vue              |   8 +-
 src/views/offering/ImportBackupOffering.vue        |  10 +-
 src/views/offering/UpdateOfferingAccess.vue        |   2 +-
 src/views/plugins/CloudianPlugin.vue               |   6 +-
 src/views/plugins/quota/EditTariffValueWizard.vue  |   2 +-
 src/views/project/AccountsTab.vue                  |  13 +-
 src/views/project/InvitationTokenTemplate.vue      |   2 +-
 src/views/project/InvitationsTemplate.vue          |  12 +-
 src/views/storage/CreateVolume.vue                 |  18 +-
 src/views/storage/FormSchedule.vue                 |  12 +-
 src/views/storage/MigrateVolume.vue                |  10 +-
 src/views/storage/ResizeVolume.vue                 |  12 +-
 src/views/storage/RestoreAttachBackupVolume.vue    |   6 +-
 src/views/storage/ScheduledSnapshots.vue           |   8 +-
 src/views/storage/TakeSnapshot.vue                 |   8 +-
 src/views/storage/UploadLocalVolume.vue            |  20 +-
 139 files changed, 1524 insertions(+), 1027 deletions(-)

diff --git a/src/components/header/HeaderNotice.vue b/src/components/header/HeaderNotice.vue
index ab9247e..03a5acd 100644
--- a/src/components/header/HeaderNotice.vue
+++ b/src/components/header/HeaderNotice.vue
@@ -110,7 +110,7 @@ export default {
               })
             }
           }).catch(function (e) {
-            console.log('Error encountered while fetching async job result' + e)
+            console.log(this.$t('error.fetching.async.job.result') + e)
           })
         }
       }
diff --git a/src/components/view/DedicateData.vue b/src/components/view/DedicateData.vue
index 5c9bea3..af50eac 100644
--- a/src/components/view/DedicateData.vue
+++ b/src/components/view/DedicateData.vue
@@ -20,7 +20,7 @@
     <div>
       <div style="margin-bottom: 10px;">
         <strong>{{ $t('label.dedicated') }}</strong>
-        <div>Yes</div>
+        <div>{{ $t('label.yes') }}</div>
       </div>
       <p>
         <strong>{{ $t('label.domainid') }}</strong><br/>
@@ -38,7 +38,7 @@
   <a-list-item v-else>
     <div>
       <strong>{{ $t('label.dedicated') }}</strong>
-      <div>No</div>
+      <div>{{ $t('label.no') }}</div>
       <a-button type="primary" style="margin-top: 10px; margin-bottom: 10px;" @click="modalActive = true" :disabled="!dedicateButtonAvailable">
         {{ dedicatedButtonLabel }}
       </a-button>
@@ -71,9 +71,9 @@ export default {
     return {
       modalActive: false,
       dedicateButtonAvailable: true,
-      dedicatedButtonLabel: 'Dedicate',
-      releaseButtonLabel: 'Release',
-      dedicatedModalLabel: 'Dedicate',
+      dedicatedButtonLabel: this.$t('label.dedicate'),
+      releaseButtonLabel: this.$t('label.release'),
+      dedicatedModalLabel: this.$t('label.dedicate'),
       dedicatedDomainId: null,
       dedicatedAccountId: null
     }
@@ -185,12 +185,12 @@ export default {
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to release dedicated zone',
+          errorMessage: this.$t('error.release.dedicate.zone'),
           errorMethod: () => {
             this.parentFetchData()
           },
           loadingMessage: this.$t('message.releasing.dedicated.zone'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
           }
@@ -215,12 +215,12 @@ export default {
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to release dedicated pod',
+          errorMessage: this.$t('error.release.dedicate.pod'),
           errorMethod: () => {
             this.parentFetchData()
           },
           loadingMessage: this.$t('message.releasing.dedicated.pod'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
           }
@@ -245,12 +245,12 @@ export default {
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to release dedicated cluster',
+          errorMessage: this.$t('error.release.dedicate.cluster'),
           errorMethod: () => {
             this.parentFetchData()
           },
           loadingMessage: this.$t('message.releasing.dedicated.cluster'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
           }
@@ -275,12 +275,12 @@ export default {
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to release dedicated host',
+          errorMessage: this.$t('error.release.dedicate.host'),
           errorMethod: () => {
             this.parentFetchData()
           },
           loadingMessage: this.$t('message.releasing.dedicated.host'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
           }
diff --git a/src/components/view/DedicateDomain.vue b/src/components/view/DedicateDomain.vue
index 01d7306..555a55e 100644
--- a/src/components/view/DedicateDomain.vue
+++ b/src/components/view/DedicateDomain.vue
@@ -29,7 +29,7 @@
       </a-spin>
     </div>
     <div class="form__item" v-if="accountsList">
-      <p class="form__label">Account</p>
+      <p class="form__label">{{ $t('label.account') }}</p>
       <a-select style="width: 100%" @change="handleChangeAccount">
         <a-select-option v-for="(account, index) in accountsList" :value="account.name" :key="index">
           {{ account.name }}
diff --git a/src/components/view/DedicateModal.vue b/src/components/view/DedicateModal.vue
index a518520..9cabd23 100644
--- a/src/components/view/DedicateModal.vue
+++ b/src/components/view/DedicateModal.vue
@@ -99,18 +99,18 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('label.zone.dedicated'),
               jobid: response.dedicatezoneresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domain.id')} : ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate zone',
+          errorMessage: this.$t('error.dedicate.zone.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
             this.dedicatedDomainModal = false
           },
           loadingMessage: this.$t('message.dedicating.zone'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
@@ -143,18 +143,18 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('label.pod.dedicated'),
               jobid: response.dedicatepodresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate pod',
+          errorMessage: this.$t('error.dedicate.pod.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
             this.dedicatedDomainModal = false
           },
           loadingMessage: this.$t('message.dedicating.pod'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
@@ -187,18 +187,18 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('message.cluster.dedicated'),
               jobid: response.dedicateclusterresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate cluster',
+          errorMessage: this.$t('error.dedicate.cluster.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
             this.dedicatedDomainModal = false
           },
           loadingMessage: this.$t('message.dedicating.cluster'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
@@ -231,18 +231,18 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('message.host.dedicated'),
               jobid: response.dedicatehostresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')}: ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate host',
+          errorMessage: this.$t('error.dedicate.host.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
             this.dedicatedDomainModal = false
           },
           loadingMessage: this.$t('message.dedicating.host'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.fetchParentData()
diff --git a/src/components/view/DetailSettings.vue b/src/components/view/DetailSettings.vue
index 641f25f..2866d13 100644
--- a/src/components/view/DetailSettings.vue
+++ b/src/components/view/DetailSettings.vue
@@ -85,10 +85,10 @@
         </div>
         <div slot="actions" v-if="!disableSettings && 'updateTemplate' in $store.getters.apis && 'updateVirtualMachine' in $store.getters.apis && isAdminOrOwner()">
           <a-popconfirm
-            title="Delete setting?"
+            :title="`${$t('label.delete.setting')}?`"
             @confirm="deleteDetail(index)"
-            okText="Yes"
-            cancelText="No"
+            :okText="$t('label.yes')"
+            :cancelText="$t('label.no')"
             placement="left"
           >
             <a-button shape="circle" type="danger" icon="delete" />
@@ -185,8 +185,8 @@ export default {
       }
       if (!(apiName in this.$store.getters.apis)) {
         this.$notification.error({
-          message: 'Failed to execute API: ' + apiName,
-          description: 'User is not permitted to use the API'
+          message: this.$t('error.execute.api.failed') + ' ' + apiName,
+          description: this.$t('message.user.not.permitted.api')
         })
         return
       }
@@ -221,7 +221,7 @@ export default {
     },
     addDetail () {
       if (this.newKey === '' || this.newValue === '') {
-        this.error = 'Must provide a valid key and value for setting'
+        this.error = this.$t('message.error.provide.setting')
         return
       }
       this.error = false
diff --git a/src/components/view/DetailsTab.vue b/src/components/view/DetailsTab.vue
index cfa340f..f074118 100644
--- a/src/components/view/DetailsTab.vue
+++ b/src/components/view/DetailsTab.vue
@@ -33,6 +33,10 @@
             <router-link :to="{ path: '/volume/' + volume.uuid }">{{ volume.type }} - {{ volume.path }}</router-link> ({{ parseFloat(volume.size / (1024.0 * 1024.0 * 1024.0)).toFixed(1) }} GB)
           </div>
         </div>
+        <div v-else-if="['name', 'type'].includes(item)">
+          <span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource[item])">{{ $t(resource[item].toLowerCase()) }}</span>
+          <span v-else>{{ resource[item] }}</span>
+        </div>
         <div v-else>
           {{ resource[item] }}
         </div>
diff --git a/src/components/view/InfoCard.vue b/src/components/view/InfoCard.vue
index 4cad5c8..adf936f 100644
--- a/src/components/view/InfoCard.vue
+++ b/src/components/view/InfoCard.vue
@@ -29,10 +29,13 @@
               </slot>
             </div>
             <slot name="name">
-              <h4 class="name">
-                {{ resource.displayname || resource.displaytext || resource.name || resource.hostname || resource.username || resource.ipaddress || resource.virtualmachinename || resource.templatetype }}
-              </h4>
-              <console style="margin-left: 10px" :resource="resource" size="default" v-if="resource.id" />
+              <div v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.name)">{{ $t(resource.name.toLowerCase()) }}</div>
+              <div v-else>
+                <h4 class="name">
+                  {{ resource.displayname || resource.displaytext || resource.name || resource.hostname || resource.username || resource.ipaddress || resource.virtualmachinename || resource.templatetype }}
+                </h4>
+                <console style="margin-left: 10px" :resource="resource" size="default" v-if="resource.id" />
+              </div>
             </slot>
           </div>
           <slot name="actions">
@@ -41,7 +44,10 @@
                 {{ resource.instancename }}
               </a-tag>
               <a-tag v-if="resource.type">
-                {{ resource.type }}
+                <span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.type)">{{ $t(resource.type.toLowerCase()) }}</span>
+                <span v-else>
+                  {{ resource.type }}
+                </span>
               </a-tag>
               <a-tag v-if="resource.issourcenat">
                 {{ $t('label.issourcenat') }}
@@ -94,7 +100,7 @@
           <div class="resource-detail-item__details">
             <a-tooltip placement="right" >
               <template slot="title">
-                <span>Copy ID</span>
+                <span>{{ $t('label.copyid') }}</span>
               </template>
               <a-button
                 style="margin-left: -5px"
@@ -102,7 +108,7 @@
                 icon="barcode"
                 type="dashed"
                 size="small"
-                @click="$message.success('Copied to clipboard')"
+                @click="$message.success($t('label.copied.clipboard'))"
                 v-clipboard:copy="resource.id" />
             </a-tooltip>
             <span style="margin-left: 10px;">{{ resource.id }}</span>
@@ -146,7 +152,7 @@
         <div class="resource-detail-item" v-if="resource.memory">
           <div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
           <div class="resource-detail-item__details">
-            <a-icon type="bulb" />{{ resource.memory }} MB Memory
+            <a-icon type="bulb" />{{ resource.memory + ' ' + $t('label.mb.memory') }}
           </div>
           <div>
             <span v-if="resource.memorykbs && resource.memoryintfreekbs">
@@ -163,7 +169,7 @@
         <div class="resource-detail-item" v-else-if="resource.memorytotalgb">
           <div class="resource-detail-item__label">{{ $t('label.memory') }}</div>
           <div class="resource-detail-item__details">
-            <a-icon type="bulb" />{{ resource.memorytotalgb }} Memory
+            <a-icon type="bulb" />{{ resource.memorytotalgb + ' ' + $t('label.memory') }}
           </div>
           <div>
             <span v-if="resource.memoryusedgb">
@@ -191,7 +197,7 @@
 
             <div style="display: flex; flex-direction: column; width: 100%;">
               <div>
-                <a-icon type="bulb" />{{ resource.memorytotal }} Memory
+                <a-icon type="bulb" />{{ resource.memorytotal + ' ' + $t('label.memory') }}
               </div>
               <div>
                 <span
@@ -224,10 +230,10 @@
             <span style="width: 100%;" v-else-if="resource.sizegb || resource.size">{{ resource.sizegb || (resource.size/1024.0) }}</span>
           </div>
           <div style="margin-left: 25px; margin-top: 5px" v-if="resource.diskkbsread && resource.diskkbswrite && resource.diskioread && resource.diskiowrite">
-            <a-tag style="margin-bottom: 5px;">Read {{ toSize(resource.diskkbsread) }}</a-tag>
-            <a-tag style="margin-bottom: 5px;">Write {{ toSize(resource.diskkbswrite) }}</a-tag><br/>
-            <a-tag style="margin-bottom: 5px;">Read (IO) {{ resource.diskioread }}</a-tag>
-            <a-tag>Write (IO) {{ resource.diskiowrite }}</a-tag>
+            <a-tag style="margin-bottom: 5px;">{{ $t('label.read') + ' ' + toSize(resource.diskkbsread) }}</a-tag>
+            <a-tag style="margin-bottom: 5px;">{{ $t('label.write') + ' ' + toSize(resource.diskkbswrite) }}</a-tag><br/>
+            <a-tag style="margin-bottom: 5px;">{{ $t('label.read.io') + ' ' + resource.diskioread }}</a-tag>
+            <a-tag>{{ $t('label.writeio') + ' ' + resource.diskiowrite }}</a-tag>
           </div>
         </div>
         <div class="resource-detail-item" v-else-if="resource.disksizetotalgb">
@@ -259,8 +265,8 @@
             <a-icon type="wifi" />
             <div>
               <div v-if="'networkkbsread' in resource && 'networkkbswrite' in resource">
-                <a-tag><a-icon type="arrow-down" /> RX {{ toSize(resource.networkkbsread) }}</a-tag>
-                <a-tag><a-icon type="arrow-up" /> TX {{ toSize(resource.networkkbswrite) }}</a-tag>
+                <a-tag><a-icon type="arrow-down" />RX {{ toSize(resource.networkkbsread) }}</a-tag>
+                <a-tag><a-icon type="arrow-up" />TX {{ toSize(resource.networkkbswrite) }}</a-tag>
               </div>
               <div v-else>{{ resource.nic.length }} NIC(s)</div>
               <div
@@ -499,7 +505,7 @@
             v-if="$router.resolve('/' + item.name).route.name !== '404'"
             :to="{ path: '/' + item.name + '?' + item.param + '=' + (item.param === 'account' ? resource.name + '&domainid=' + resource.domainid : resource.id) }">
             <a-button style="margin-right: 10px" :icon="$router.resolve('/' + item.name).route.meta.icon" >
-              View {{ $t(item.title) }}
+              {{ $t('label.view') + ' ' + $t(item.title) }}
             </a-button>
           </router-link>
         </div>
@@ -513,9 +519,9 @@
             {{ $t('label.apikey') }}
             <a-tooltip placement="right" >
               <template slot="title">
-                <span>Copy {{ $t('label.apikey') }}</span>
+                <span>{{ $t('label.copy') + ' ' + $t('label.apikey') }}</span>
               </template>
-              <a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.apikey">
+              <a-button shape="circle" type="dashed" size="small" @click="$message.success($t('label.copied.clipboard'))" v-clipboard:copy="resource.apikey">
                 <a-icon type="copy"/>
               </a-button>
             </a-tooltip>
@@ -530,9 +536,9 @@
             {{ $t('label.secretkey') }}
             <a-tooltip placement="right" >
               <template slot="title">
-                <span>Copy {{ $t('label.secretkey') }}</span>
+                <span>{{ $t('label.copy') + ' ' + $t('label.secretkey') }}</span>
               </template>
-              <a-button shape="circle" type="dashed" size="small" @click="$message.success('Copied to clipboard')" v-clipboard:copy="resource.secretkey">
+              <a-button shape="circle" type="dashed" size="small" @click="$message.success($t('label.copied.clipboard'))" v-clipboard:copy="resource.secretkey">
                 <a-icon type="copy"/>
               </a-button>
             </a-tooltip>
diff --git a/src/components/view/ListResourceTable.vue b/src/components/view/ListResourceTable.vue
index a582c9c..7ac54d8 100644
--- a/src/components/view/ListResourceTable.vue
+++ b/src/components/view/ListResourceTable.vue
@@ -56,8 +56,8 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="total"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
-        :pageSizeOptions="['10', '20', '40']"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
+        :pageSizeOptions="device === 'desktop' ? ['20', '50', '100', '500'] : ['10', '20', '50', '100', '500']"
         @change="handleTableChange"
         @showSizeChange="handlePageSizeChange"
         showSizeChanger>
@@ -72,6 +72,7 @@
 
 <script>
 import { api } from '@/api'
+import { mixinDevice } from '@/utils/mixin.js'
 import Status from '@/components/widgets/Status'
 
 export default {
@@ -79,6 +80,7 @@ export default {
   components: {
     Status
   },
+  mixins: [mixinDevice],
   props: {
     resource: {
       type: Object,
diff --git a/src/components/view/ListView.vue b/src/components/view/ListView.vue
index 9275daf..02048ab 100644
--- a/src/components/view/ListView.vue
+++ b/src/components/view/ListView.vue
@@ -69,6 +69,10 @@
         <console :resource="record" size="small" style="margin-right: 5px" />
 
         <span v-if="$route.path.startsWith('/globalsetting')">{{ text }}</span>
+        <span v-if="$route.path.startsWith('/alert')">
+          <router-link :to="{ path: $route.path + '/' + record.id }" v-if="record.id">{{ $t(text.toLowerCase()) }}</router-link>
+          <router-link :to="{ path: $route.path + '/' + record.name }" v-else>{{ $t(text.toLowerCase()) }}</router-link>
+        </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>
@@ -78,6 +82,10 @@
     <a slot="templatetype" slot-scope="text, record" href="javascript:;">
       <router-link :to="{ path: $route.path + '/' + record.templatetype }">{{ text }}</router-link>
     </a>
+    <template slot="type" slot-scope="text">
+      <span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(text)">{{ $t(text.toLowerCase()) }}</span>
+      <span v-else>{{ text }}</span>
+    </template>
     <a slot="displayname" slot-scope="text, record" href="javascript:;">
       <router-link :to="{ path: $route.path + '/' + record.id }">{{ text }}</router-link>
     </a>
@@ -182,7 +190,7 @@
 
     <div slot="order" slot-scope="text, record" class="shift-btns">
       <a-tooltip placement="top">
-        <template slot="title">Move to top</template>
+        <template slot="title">{{ $t('label.move.to.top') }}</template>
         <a-button
           shape="round"
           @click="moveItemTop(record)"
@@ -191,7 +199,7 @@
         </a-button>
       </a-tooltip>
       <a-tooltip placement="top">
-        <template slot="title">Move to bottom</template>
+        <template slot="title">{{ $t('label.move.to.bottom') }}</template>
         <a-button
           shape="round"
           @click="moveItemBottom(record)"
@@ -200,13 +208,13 @@
         </a-button>
       </a-tooltip>
       <a-tooltip placement="top">
-        <template slot="title">Move up one row</template>
+        <template slot="title">{{ $t('label.move.up.row') }}</template>
         <a-button shape="round" @click="moveItemUp(record)" class="shift-btn">
           <a-icon type="caret-up" class="shift-btn" />
         </a-button>
       </a-tooltip>
       <a-tooltip placement="top">
-        <template slot="title">Move down one row</template>
+        <template slot="title">{{ $t('label.move.down.row') }}</template>
         <a-button shape="round" @click="moveItemDown(record)" class="shift-btn">
           <a-icon type="caret-down" class="shift-btn" />
         </a-button>
@@ -328,7 +336,7 @@ export default {
     changeProject (project) {
       this.$store.dispatch('SetProject', project)
       this.$store.dispatch('ToggleTheme', project.id === undefined ? 'light' : 'dark')
-      this.$message.success(`Switched to "${project.name}"`)
+      this.$message.success(this.$t('message.switch.to') + ' ' + project.name)
       this.$router.push({ name: 'dashboard' })
     },
     saveValue (record) {
@@ -338,7 +346,7 @@ export default {
       }).then(json => {
         this.editableValueKey = null
 
-        this.$message.success('Setting Updated: ' + record.name)
+        this.$message.success(`${this.$t('message.setting.updated')} ${record.name}`)
         if (json.updateconfigurationresponse &&
           json.updateconfigurationresponse.configuration &&
           !json.updateconfigurationresponse.configuration.isdynamic &&
@@ -350,7 +358,7 @@ export default {
         }
       }).catch(error => {
         console.error(error)
-        this.$message.error('There was an error saving this setting.')
+        this.$message.error(this.$t('message.error.save.setting'))
       }).finally(() => {
         this.$emit('refresh')
       })
diff --git a/src/components/view/ResourceCountUsage.vue b/src/components/view/ResourceCountUsage.vue
index b029448..4c63179 100644
--- a/src/components/view/ResourceCountUsage.vue
+++ b/src/components/view/ResourceCountUsage.vue
@@ -25,10 +25,10 @@
         <strong>
           {{ $t('label.' + item + 'limit') }}
         </strong>
-        ({{ resource[item + 'available'] === '-1' ? 'Unlimited' : resource[item + 'available'] }} {{ $t('label.available') }})
+        ({{ resource[item + 'available'] === '-1' ? $t('label.unlimited') : resource[item + 'available'] }} {{ $t('label.available') }})
         <div class="list-item__vals">
           <div class="list-item__data">
-            {{ $t('label.used') }} / {{ $t('label.limit') }} : {{ resource[item + 'total'] }} / {{ resource[item + 'limit'] === '-1' ? 'Unlimited' : resource[item + 'limit'] }}
+            {{ $t('label.used') }} / {{ $t('label.limit') }} : {{ resource[item + 'total'] }} / {{ resource[item + 'limit'] === '-1' ? $t('label.unlimited') : resource[item + 'limit'] }}
           </div>
           <a-progress
             status="normal"
diff --git a/src/components/view/ResourceLimitTab.vue b/src/components/view/ResourceLimitTab.vue
index 494b810..3a9b41a 100644
--- a/src/components/view/ResourceLimitTab.vue
+++ b/src/components/view/ResourceLimitTab.vue
@@ -105,7 +105,7 @@ export default {
         this.formLoading = false
       } catch (e) {
         this.$notification.error({
-          message: 'Request Failed',
+          message: this.$t('message.request.failed'),
           description: e
         })
         this.formLoading = false
@@ -134,7 +134,7 @@ export default {
         this.formLoading = true
 
         Promise.all(arrAsync).then(() => {
-          this.$message.success('Apply Successful')
+          this.$message.success(this.$t('message.apply.success'))
           this.fetchData()
         }).catch(error => {
           this.$notifyError(error)
diff --git a/src/components/view/SettingsTab.vue b/src/components/view/SettingsTab.vue
index 9f33196..3f1901b 100644
--- a/src/components/view/SettingsTab.vue
+++ b/src/components/view/SettingsTab.vue
@@ -126,7 +126,7 @@ export default {
         this.items = response.listconfigurationsresponse.configuration
       }).catch(error => {
         console.error(error)
-        this.$message.error('There was an error loading these settings.')
+        this.$message.error(this.$t('message.error.loading.setting'))
       }).finally(() => {
         this.tabLoading = false
         if (!callback) return
@@ -140,13 +140,14 @@ export default {
         name: item.name,
         value: this.editableValue
       }).then(() => {
-        this.$message.success('Setting ' + item.name + ' updated to ' + this.editableValue)
+        const message = `${this.$t('label.setting')} ${item.name} ${this.$t('label.update.to')} ${this.editableValue}`
+        this.$message.success(message)
       }).catch(error => {
         console.error(error)
-        this.$message.error('There was an error saving this setting.')
+        this.$message.error(this.$t('message.error.save.setting'))
         this.$notification.error({
           message: this.$t('label.error'),
-          description: 'There was an error saving this setting. Please try again later.'
+          description: this.$t('message.error.try.save.setting')
         })
       }).finally(() => {
         this.tabLoading = false
diff --git a/src/components/widgets/Breadcrumb.vue b/src/components/widgets/Breadcrumb.vue
index e6095b9..fdcb304 100644
--- a/src/components/widgets/Breadcrumb.vue
+++ b/src/components/widgets/Breadcrumb.vue
@@ -26,7 +26,13 @@
         {{ $t(item.meta.title) }}
       </router-link>
       <span v-else-if="$route.params.id">
-        {{ resource.name || resource.displayname || resource.displaytext || resource.hostname || resource.username || resource.ipaddress || $route.params.id }}
+        <label v-if="'name' in resource">
+          <span v-if="['USER.LOGIN', 'USER.LOGOUT', 'ROUTER.HEALTH.CHECKS', 'FIREWALL.CLOSE', 'ALERT.SERVICE.DOMAINROUTER'].includes(resource.name)">{{ $t(resource.name.toLowerCase()) }}</span>
+          <span v-else>{{ resource.name }}</span>
+        </label>
+        <label v-else>
+          {{ resource.name || resource.displayname || resource.displaytext || resource.hostname || resource.username || resource.ipaddress || $route.params.id }}
+        </label>
       </span>
       <span v-else>
         {{ $t(item.meta.title) }}
diff --git a/src/config/section/compute.js b/src/config/section/compute.js
index ad18bfc..2e0723e 100644
--- a/src/config/section/compute.js
+++ b/src/config/section/compute.js
@@ -143,7 +143,6 @@ export default {
           icon: 'sync',
           label: 'label.reinstall.vm',
           message: 'message.reinstall.vm',
-          docHelp: 'adminguide/virtual_machines.html#virtual-machine-snapshots',
           dataView: true,
           args: ['virtualmachineid', 'templateid'],
           show: (record) => { return ['Running', 'Stopped'].includes(record.state) },
diff --git a/src/config/section/image.js b/src/config/section/image.js
index 3fb17c7..072121a 100644
--- a/src/config/section/image.js
+++ b/src/config/section/image.js
@@ -28,6 +28,7 @@ export default {
       name: 'template',
       title: 'label.templates',
       icon: 'save',
+      docHelp: 'adminguide/templates.html',
       permission: ['listTemplates'],
       params: { templatefilter: 'self', showunique: 'true' },
       resourceType: 'Template',
@@ -273,6 +274,7 @@ export default {
       name: 'kubernetesiso',
       title: 'label.kubernetes.isos',
       icon: kubernetes,
+      docHelp: 'plugins/cloudstack-kubernetes-service.html#kubernetes-supported-versions',
       permission: ['listKubernetesSupportedVersions'],
       columns: ['name', 'state', 'semanticversion', 'isostate', 'mincpunumber', 'minmemory', 'zonename'],
       details: ['name', 'semanticversion', 'zoneid', 'zonename', 'isoid', 'isoname', 'isostate', 'mincpunumber', 'minmemory', 'supportsha', 'state'],
diff --git a/src/config/section/infra/primaryStorages.js b/src/config/section/infra/primaryStorages.js
index 98afb5b..8754c35 100644
--- a/src/config/section/infra/primaryStorages.js
+++ b/src/config/section/infra/primaryStorages.js
@@ -50,6 +50,7 @@ export default {
     {
       api: 'createStoragePool',
       icon: 'plus',
+      docHelp: 'installguide/configuration.html#add-primary-storage',
       label: 'label.add.primary.storage',
       listView: true,
       popup: true,
diff --git a/src/config/section/infra/secondaryStorages.js b/src/config/section/infra/secondaryStorages.js
index a5e8849..17dc107 100644
--- a/src/config/section/infra/secondaryStorages.js
+++ b/src/config/section/infra/secondaryStorages.js
@@ -34,6 +34,7 @@ export default {
     {
       api: 'addImageStore',
       icon: 'plus',
+      docHelp: 'installguide/configuration.html#add-secondary-storage',
       label: 'label.add.secondary.storage',
       listView: true,
       popup: true,
diff --git a/src/config/section/offering.js b/src/config/section/offering.js
index 70d91e8..155f150 100644
--- a/src/config/section/offering.js
+++ b/src/config/section/offering.js
@@ -250,6 +250,7 @@ export default {
       name: 'vpcoffering',
       title: 'label.vpc.offerings',
       icon: 'deployment-unit',
+      docHelp: 'plugins/nuage-plugin.html?#vpc-offerings',
       permission: ['listVPCOfferings', 'listInfrastructure'],
       params: { isrecursive: 'true' },
       resourceType: 'VpcOffering',
@@ -263,6 +264,7 @@ export default {
       actions: [{
         api: 'createVPCOffering',
         icon: 'plus',
+        docHelp: 'plugins/nuage-plugin.html?#optional-create-and-enable-vpc-offering',
         label: 'label.add.vpc.offering',
         listView: true,
         popup: true,
diff --git a/src/config/section/plugin/quota.js b/src/config/section/plugin/quota.js
index 34deb64..6a99716 100644
--- a/src/config/section/plugin/quota.js
+++ b/src/config/section/plugin/quota.js
@@ -48,6 +48,7 @@ export default {
         {
           api: 'quotaCredits',
           icon: 'plus',
+          docHelp: 'plugins/quota.html#quota-credits',
           label: 'label.quota.add.credits',
           dataView: true,
           args: ['value', 'min_balance', 'quota_enforce'],
diff --git a/src/config/section/project.js b/src/config/section/project.js
index ed9d0cf..5769923 100644
--- a/src/config/section/project.js
+++ b/src/config/section/project.js
@@ -58,7 +58,7 @@ export default {
       api: 'updateProjectInvitation',
       icon: 'key',
       label: 'label.enter.token',
-      docHelp: 'adminguide/projects.html#setting-up-invitations',
+      docHelp: 'adminguide/projects.html#accepting-a-membership-invitation',
       listView: true,
       popup: true,
       component: () => import('@/views/project/InvitationTokenTemplate.vue')
@@ -67,7 +67,7 @@ export default {
       api: 'listProjectInvitations',
       icon: 'team',
       label: 'label.project.invitation',
-      docHelp: 'adminguide/projects.html#setting-up-invitations',
+      docHelp: 'adminguide/projects.html#accepting-a-membership-invitation',
       listView: true,
       popup: true,
       showBadge: true,
@@ -102,7 +102,7 @@ export default {
       icon: 'pause-circle',
       label: 'label.suspend.project',
       message: 'message.suspend.project',
-      docHelp: 'adminguide/projects.html#suspending-or-deleting-a-project',
+      docHelp: 'adminguide/projects.html#sending-project-membership-invitations',
       dataView: true,
       show: (record, store) => {
         return (record.account === store.userInfo.account || ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) && record.state !== 'Suspended'
diff --git a/src/config/section/storage.js b/src/config/section/storage.js
index 7f818e6..b7c2070 100644
--- a/src/config/section/storage.js
+++ b/src/config/section/storage.js
@@ -26,6 +26,7 @@ export default {
       name: 'volume',
       title: 'label.volumes',
       icon: 'hdd',
+      docHelp: 'adminguide/storage.html#working-with-volumes',
       permission: ['listVolumesMetrics'],
       resourceType: 'Volume',
       columns: () => {
@@ -66,6 +67,7 @@ export default {
         {
           api: 'createVolume',
           icon: 'plus',
+          docHelp: 'adminguide/storage.html#creating-a-new-volume',
           label: 'label.action.create.volume',
           listView: true,
           popup: true,
@@ -74,6 +76,7 @@ export default {
         {
           api: 'createVolume',
           icon: 'cloud-upload',
+          docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
           label: 'label.upload.volume.from.local',
           listView: true,
           popup: true,
@@ -82,6 +85,7 @@ export default {
         {
           api: 'uploadVolume',
           icon: 'link',
+          docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
           label: 'label.upload.volume.from.url',
           listView: true,
           args: ['url', 'name', 'zoneid', 'format', 'diskofferingid', 'checksum'],
@@ -111,6 +115,7 @@ export default {
         {
           api: 'createSnapshot',
           icon: 'camera',
+          docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
           label: 'label.action.take.snapshot',
           dataView: true,
           show: (record) => { return record.state === 'Ready' },
@@ -120,6 +125,7 @@ export default {
         {
           api: 'createSnapshotPolicy',
           icon: 'clock-circle',
+          docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
           label: 'label.action.recurring.snapshot',
           dataView: true,
           show: (record) => { return record.state === 'Ready' },
@@ -137,6 +143,7 @@ export default {
         {
           api: 'resizeVolume',
           icon: 'fullscreen',
+          docHelp: 'adminguide/storage.html#resizing-volumes',
           label: 'label.action.resize.volume',
           dataView: true,
           popup: true,
@@ -146,6 +153,7 @@ export default {
         {
           api: 'migrateVolume',
           icon: 'drag',
+          docHelp: 'adminguide/storage.html#id2',
           label: 'label.migrate.volume',
           args: ['volumeid', 'storageid', 'livemigrate'],
           dataView: true,
@@ -225,6 +233,7 @@ export default {
       name: 'snapshot',
       title: 'label.snapshots',
       icon: 'build',
+      docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
       permission: ['listSnapshots'],
       resourceType: 'Snapshot',
       columns: () => {
@@ -284,6 +293,7 @@ export default {
       name: 'vmsnapshot',
       title: 'label.vm.snapshots',
       icon: 'camera',
+      docHelp: 'adminguide/storage.html#working-with-volume-snapshots',
       permission: ['listVMSnapshot'],
       resourceType: 'VMSnapshot',
       columns: () => {
@@ -336,6 +346,7 @@ export default {
         {
           api: 'restoreBackup',
           icon: 'sync',
+          docHelp: 'adminguide/virtual_machines.html#restoring-vm-backups',
           label: 'label.backup.restore',
           message: 'message.backup.restore',
           dataView: true
diff --git a/src/locales/en.json b/src/locales/en.json
index de9c8f2..3277611 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -1,9 +1,16 @@
 {
+"alert.service.domainrouter": "Domain router",
 "changed.item.properties": "Changed item properties",
 "confirm.enable.s3": "Please fill in the following information to enable support for S3-backed Secondary Storage",
 "confirm.enable.swift": "Please fill in the following information to enable support for Swift",
 "error.could.not.change.your.password.because.non.native.user": "Error could not change your password because user is not a native CloudStack user.",
 "error.could.not.enable.zone": "Could not enable zone",
+"error.dedicate.cluster.failed": "Failed to dedicate cluster",
+"error.dedicate.host.failed": "Failed to dedicate host",
+"error.dedicate.pod.failed": "Failed to dedicate pod",
+"error.dedicate.zone.failed": "Failed to dedicate zone",
+"error.execute.api.failed": "Failed to execute API",
+"error.fetching.async.job.result": "Error encountered while fetching async job result",
 "error.installwizard.message": "Something went wrong; you may go back and correct any errors",
 "error.invalid.username.password": "Invalid username or password.<br/><br/>This could also be a restriction on the IP address you are connecting from.",
 "error.login": "Your username/password does not match our records.",
@@ -11,9 +18,14 @@
 "error.mgmt.server.inaccessible": "The Management Server is unaccessible.  Please try again later.",
 "error.password.not.match": "The password fields do not match",
 "error.please.specify.physical.network.tags": "Network offerings is not available until you specify tags for this physical network.",
+"error.release.dedicate.cluster": "Failed to release dedicated cluster",
+"error.release.dedicate.host": "Failed to release dedicated host",
+"error.release.dedicate.pod": "Failed to release dedicated pod",
+"error.release.dedicate.zone": "Failed to release dedicated zone",
 "error.session.expired": "Your session has expired.",
 "error.unable.to.reach.management.server": "Unable to reach Management Server",
 "error.unresolved.internet.name": "Your internet name cannot be resolved.",
+"firewall.close": "Firewall",
 "force.delete.domain.warning": "Warning: Choosing this option will cause the deletion of all child domains and all associated accounts and their resources.",
 "force.remove": "Force Remove",
 "force.remove.host.warning": "Warning: Choosing this option will cause CloudStack to forcefully stop all running virtual machines before removing this host from the cluster.",
@@ -51,6 +63,7 @@
 "label.acltotal": "Network ACL Total",
 "label.acquire.new.ip": "Acquire New IP",
 "label.acquire.new.secondary.ip": "Acquire new secondary IP",
+"label.acquiring.ip": "Acquiring IP",
 "label.action": "Action",
 "label.action.attach.disk": "Attach Disk",
 "label.action.attach.disk.processing": "Attaching Disk....",
@@ -332,6 +345,7 @@
 "label.add.route": "Add Route",
 "label.add.rule": "Add Rule",
 "label.add.rule.desc": "Create a new ACL rule",
+"label.add.secondary.ip": "Add Secondary IP",
 "label.add.secondary.storage": "Add Secondary Storage",
 "label.add.security.group": "Add Security Group",
 "label.add.service.offering": "Add Service Offering",
@@ -411,6 +425,7 @@
 "label.anti.affinity.groups": "Anti-affinity Groups",
 "label.api.version": "API Version",
 "label.apikey": "API Key",
+"label.app.cookie": "AppCookie",
 "label.app.name": "CloudStack",
 "label.apply": "Apply",
 "label.archive": "Archive",
@@ -420,6 +435,7 @@
 "label.assign.instance.another": "Assign Instance to Another Account",
 "label.assign.to.load.balancer": "Assigning instance to load balancer",
 "label.assign.vms": "Assign VMs",
+"label.assigning.vms": "Assigning VMs",
 "label.associatednetwork": "Associated Network",
 "label.associatednetworkid": "Associated Network ID",
 "label.associatednetworkname": "Network Name",
@@ -496,14 +512,19 @@
 "label.certchain": "Chain",
 "label.certificate": "Certificate",
 "label.certificate.details": "Certificate Details",
+"label.certificate.upload": "Certificate Uploaded",
+"label.certificate.upload.failed": "Certificate Upload Failed",
+"label.certificate.upload.failed.description": "Failed to update SSL Certificate. Failed to pass certificate validation check",
 "label.certificateid": "Certificate ID",
 "label.change.affinity": "Change Affinity",
+"label.change.ip.addess": "Change IP Address",
 "label.change.ipaddress": "Change IP address for NIC",
 "label.change.service.offering": "Change service offering",
 "label.change.value": "Change value",
 "label.character": "Character",
 "label.chassis": "Chassis",
 "label.checksum": "Checksum",
+"label.choose.saml.indentity": "Choose SAML identity provider",
 "label.cidr": "CIDR",
 "label.cidr.account": "CIDR or Account/Security Group",
 "label.cidr.destination.network": "Destination Network CIDR",
@@ -531,6 +552,7 @@
 "label.clustertype": "Cluster Type",
 "label.clvm": "CLVM",
 "label.code": "Code",
+"label.comma.separated.list.description": "Enter comma-separated list of commands",
 "label.comments": "Comments",
 "label.community": "Community",
 "label.compute": "Compute",
@@ -541,6 +563,7 @@
 "label.configure": "Configure",
 "label.configure.ldap": "Configure LDAP",
 "label.configure.network.acls": "Configure Network ACLs",
+"label.configure.ovs": "Configure Ovs",
 "label.configure.sticky.policy": "Configure Sticky Policy",
 "label.configure.vpc": "Configure VPC",
 "label.confirmacceptinvitation": "Please confirm you wish to join this project",
@@ -555,7 +578,11 @@
 "label.console.proxy.vm": "Console Proxy VM",
 "label.continue": "Continue",
 "label.continue.basic.install": "Continue with basic installation",
+"label.copied.clipboard": "Copied to clipboard",
+"label.copy": "Copy",
+"label.copy.clipboard": "Copy to clipboard",
 "label.copy.text": "Copy Text",
+"label.copyid": "Copy ID",
 "label.copying.iso": "Copying ISO",
 "label.corrections.saved": "Corrections saved",
 "label.counterid": "Counter",
@@ -573,16 +600,22 @@
 "label.cputotalghz": "Total",
 "label.cpuused": "CPU Utilized",
 "label.cpuusedghz": "Used CPU",
+"label.create.account": "Create Account",
 "label.create.backup": "Start Backup",
+"label.create.network.gateway.description": "The gateway of the tier in the super CIDR range and not overlapping the CIDR of any other tier in this VPC.",
+"label.create.network.netmask.description": "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",
 "label.create.nfs.secondary.staging.storage": "Create NFS Secondary Staging Store",
 "label.create.nfs.secondary.staging.store": "Create NFS secondary staging store",
 "label.create.project": "Create project",
+"label.create.site.vpn.connection": "Create Site-to-Site VPN Connection",
+"label.create.site.vpn.gateway": "Create Site-to-Site VPN Gateway",
 "label.create.ssh.key.pair": "Create a SSH Key Pair",
 "label.create.template": "Create template",
 "label.create.vpn.connection": "Create VPN Connection",
 "label.created": "Created",
 "label.created.by.system": "Created by system",
 "label.createnfscache": "Create NFS secondary staging store",
+"label.creating.iprange": "Creating IP Ranges",
 "label.credit": "Credit",
 "label.crosszones": "Cross Zones",
 "label.currency": "Currency",
@@ -619,13 +652,15 @@
 "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.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",
+"label.delete.certificate": "Delete certificate",
 "label.delete.ciscoasa1000v": "Delete CiscoASA1000v",
 "label.delete.ciscovnmc.resource": "Delete CiscoVNMC resource",
 "label.delete.confirm": "Delete?",
+"label.delete.dedicated.vlan.range": "Deleted dedicated VLAN/VNI range",
 "label.delete.domain": "Delete Domain",
 "label.delete.events": "Delete events",
 "label.delete.f5": "Delete F5",
@@ -639,7 +674,10 @@
 "label.delete.portable.ip.range": "Delete Portable IP Range",
 "label.delete.project": "Delete project",
 "label.delete.role": "Delete Role",
+"label.delete.rule": "Delete rule",
 "label.delete.secondary.staging.store": "Delete Secondary Staging Store",
+"label.delete.setting": "Delete setting",
+"label.delete.snapshot.policy": "Delete Snapshot Policy",
 "label.delete.srx": "Delete SRX",
 "label.delete.sslcertificate": "Delete SSL Certificate",
 "label.delete.ucs.manager": "Delete UCS Manager",
@@ -648,10 +686,13 @@
 "label.delete.vpn.customer.gateway": "Delete VPN Customer Gateway",
 "label.delete.vpn.gateway": "Delete VPN Gateway",
 "label.delete.vpn.user": "Delete VPN user",
-"label.deleteconfirm": "Please confirm that you would like to delete this {name}",
+"label.deleteconfirm": "Please confirm that you would like to delete this",
 "label.deleteprofile": "Delete Profile",
+"label.deleting": "Deleting",
 "label.deleting.failed": "Deleting Failed",
+"label.deleting.iso": "Deleting ISO",
 "label.deleting.processing": "Deleting....",
+"label.deleting.template": "Deleting template",
 "label.deny": "Deny",
 "label.deploymentplanner": "Deployment planner",
 "label.description": "Description",
@@ -724,6 +765,7 @@
 "label.dns2": "DNS 2",
 "label.domain": "Domain",
 "label.domain.details": "Domain details",
+"label.domain.id": "Domain ID",
 "label.domain.name": "Domain Name",
 "label.domain.router": "Domain router",
 "label.domain.suffix": "DNS Domain Suffix (i.e., xyz.com)",
@@ -733,6 +775,9 @@
 "label.domains": "Domains",
 "label.done": "Done",
 "label.double.quotes.are.not.allowed": "Double quotes are not allowed",
+"label.download": "Download",
+"label.download.kubeconfig.cluster": "Download kubeconfig for the cluster <br><br> The <code>kubectl</code> command-line tool uses kubeconfig files to find the information it needs to choose a cluster and communicate with the API server of a cluster.",
+"label.download.kubectl": "Download <code>kubectl</code> tool for cluster's Kubernetes version",
 "label.download.kubernetes.cluster.config": "Download Kubernetes cluster config",
 "label.download.progress": "Download Progress",
 "label.dpd": "Dead Peer Detection",
@@ -753,6 +798,7 @@
 "label.edit.tags": "Edit tags",
 "label.edit.traffic.type": "Edit traffic type",
 "label.edit.vpc": "Edit VPC",
+"label.egress": "Egress",
 "label.egress.default.policy": "Egress Default Policy",
 "label.egress.rule": "Egress rule",
 "label.egress.rules": "Egress rules",
@@ -771,6 +817,7 @@
 "label.enable.vpn": "Enable Remote Access VPN",
 "label.enabling.vpn": "Enabling VPN",
 "label.enabling.vpn.access": "Enabling VPN Access",
+"label.end": "End",
 "label.end.ip": "End IP",
 "label.end.reserved.system.ip": "End Reserved system IP",
 "label.end.vlan": "End VLAN",
@@ -784,14 +831,15 @@
 "label.endport": "End Port",
 "label.enter.token": "Enter token",
 "label.error": "Error",
+"label.error.caught": "Error caught",
 "label.error.code": "Error Code",
 "label.error.file.read": "Cannot read file",
 "label.error.file.upload": "File upload failed",
 "label.error.rules.file.import": "Please choose a valid CSV rules file",
+"label.error.setting": "Error setting",
 "label.error.something.went.wrong.please.correct.the.following": "Something went wrong; please correct the following",
 "label.error.upper": "ERROR",
 "label.error.volume.upload": "Please choose a file",
-"label.error.zone.combined": "All Zones cannot be combined with any other zone",
 "label.espencryption": "ESP Encryption",
 "label.esphash": "ESP Hash",
 "label.esplifetime": "ESP Lifetime (second)",
@@ -826,12 +874,16 @@
 "label.firstname.lower": "firstname",
 "label.fix.errors": "Fix errors",
 "label.fixed": "Fixed Offering",
+"label.for": "for",
+"label.forbidden": "Forbidden",
 "label.forced": "Force",
 "label.forceencap": "Force UDP Encapsulation of ESP Packets",
 "label.forgedtransmits": "Forged Transmits",
 "label.format": "Format",
 "label.french.azerty.keyboard": "French AZERTY keyboard",
 "label.friday": "Friday",
+"label.from": "from",
+"label.from.lb": "from LB",
 "label.full": "Full",
 "label.full.path": "Full path",
 "label.fwdeviceid": "ID",
@@ -845,6 +897,7 @@
 "label.globo.dns": "GloboDNS",
 "label.globo.dns.configuration": "GloboDNS Configuration",
 "label.glustervolume": "Volume",
+"label.go.back": "Go Back",
 "label.go.step.2": "Go to Step 2",
 "label.go.step.3": "Go to Step 3",
 "label.go.step.4": "Go to Step 4",
@@ -940,7 +993,9 @@
 "label.hypervnetworklabel": "HyperV Traffic Label",
 "label.icmp": "ICMP",
 "label.icmpcode": "ICMP Code",
+"label.icmpcode.end.port": "ICMP Code / End Port",
 "label.icmptype": "ICMP Type",
+"label.icmptype.start.port": "ICMP Type / Start Port",
 "label.id": "ID",
 "label.identity.and.access": "Identity and Access",
 "label.ikedh": "IKE DH",
@@ -950,10 +1005,14 @@
 "label.ikepolicy": "IKE policy",
 "label.images": "Images",
 "label.import.backup.offering": "Import Backup Offering",
+"label.import.offering": "Import Offering",
 "label.import.role": "Import Role",
+"label.in.progress": "in progress",
+"label.in.progress.for": "in progress for",
 "label.info": "Info",
 "label.info.upper": "INFO",
 "label.infrastructure": "Infrastructure",
+"label.ingress": "Ingress",
 "label.ingress.rule": "Ingress Rule",
 "label.initiated.by": "Initiated By",
 "label.insideportprofile": "Inside Port Profile",
@@ -987,10 +1046,11 @@
 "label.internal.lb.details": "Internal LB details",
 "label.internaldns1": "Internal DNS 1",
 "label.internaldns2": "Internal DNS 2",
+"label.internallb.description": "Brief description of the Internal LB",
+"label.internallb.name.description": "Unique name for Internal LB",
+"label.internallb.sourceip.description": "Brief description of the Internal LB",
 "label.internallbvm": "InternalLbVm",
 "label.interval": "Polling Interval (in sec)",
-"label.interval.monthly": "Day {number} of month",
-"label.interval.weekly": "Every {number}",
 "label.intervaltype": "Interval Type",
 "label.introduction.to.cloudstack": "Introduction to CloudStack&#8482",
 "label.invalid.integer": "Invalid Integer",
@@ -1026,6 +1086,7 @@
 "label.ipv6.dns1": "IPv6 DNS1",
 "label.ipv6.dns2": "IPv6 DNS2",
 "label.iqn": "Target IQN",
+"label.is.in.progress": "is in progress",
 "label.is.redundant.router": "Redundant",
 "label.is.shared": "Is Shared",
 "label.isadvanced": "Show advanced settings",
@@ -1078,6 +1139,7 @@
 "label.keyboard": "Keyboard language",
 "label.keyboardtype": "Keyboard type",
 "label.keypair": "SSH Key Pair",
+"label.kubeconfig.cluster": "Kubernetes Cluster Config",
 "label.kubernetes": "Kubernetes",
 "label.kubernetes.cluster": "Kubernetes cluster",
 "label.kubernetes.cluster.create": "Create Kubernetes Cluster",
@@ -1087,6 +1149,7 @@
 "label.kubernetes.cluster.start": "Start Kubernetes Cluster",
 "label.kubernetes.cluster.stop": "Stop Kubernetes Cluster",
 "label.kubernetes.cluster.upgrade": "Upgrade Kubernetes Cluster",
+"label.kubernetes.dashboard": "Kubernetes Dashboard UI",
 "label.kubernetes.isos": "Kubernetes ISOs",
 "label.kubernetes.service": "Kubernetes Service",
 "label.kubernetes.version.add": "Add Kubernetes Version",
@@ -1127,6 +1190,7 @@
 "label.lb.algorithm.leastconn": "Least connections",
 "label.lb.algorithm.roundrobin": "Round-robin",
 "label.lb.algorithm.source": "Source",
+"label.lb.cookie": "LbCookie",
 "label.lb.protocol.http": "HTTP",
 "label.lb.protocol.ssl": "SSL",
 "label.lb.protocol.tcp.proxy": "TCP-proxy",
@@ -1144,8 +1208,12 @@
 "label.limits": "Configure Limits",
 "label.link.domain.to.ldap": "Link Domain to LDAP",
 "label.linklocalip": "Link Local IP Address",
+"label.linux": "Linux",
 "label.list.ciscoasa1000v": "ASA 1000v",
 "label.list.ciscovnmc": "Cisco VNMC",
+"label.list.nodes": "List nodes",
+"label.list.pods": "List pods",
+"label.list.services": "List services",
 "label.load.balancer": "Load Balancer",
 "label.load.balancing.policies": "Load balancing policies",
 "label.loadbalancerinstance": "Assigned VMs",
@@ -1166,10 +1234,12 @@
 "label.lxcnetworklabel": "LXC Traffic Label",
 "label.macaddress": "MAC Address",
 "label.macaddresschanges": "MAC Address Changes",
+"label.macos": "MacOS",
 "label.make.project.owner": "Make account project owner",
 "label.makeredundant": "Make redundant",
 "label.manage": "Manage",
 "label.manage.resources": "Manage Resources",
+"label.manage.vpn.user": "Manage VPN Users",
 "label.managedstate": "Managed State",
 "label.management": "Management",
 "label.management.ips": "Management IP Addresses",
@@ -1200,6 +1270,7 @@
 "label.maxvolume": "Max. Volumes",
 "label.maxvpc": "Max. VPCs",
 "label.may.continue": "You may now continue.",
+"label.mb.memory": "MB Memory",
 "label.memallocated": "Mem Allocation",
 "label.memory": "Memory",
 "label.memory.maximum.mb": "Max Memory (in MB)",
@@ -1262,6 +1333,7 @@
 "label.migrate.volume": "Migrate Volume",
 "label.migrate.volume.newdiskoffering.desc": "This option allows administrators to replace the old disk offering, using one that better suits the new placement of the volume.",
 "label.migrate.volume.to.primary.storage": "Migrate volume to another primary storage",
+"label.migrating": "Migrating",
 "label.min.balance": "Min Balance",
 "label.min.past.hour": "min past the hr",
 "label.min_balance": "Min Balance",
@@ -1276,6 +1348,7 @@
 "label.monday": "Monday",
 "label.monitor": "Monitor",
 "label.monthly": "Monthly",
+"label.more.access.dashboard.ui": "More about accessing dashboard UI",
 "label.more.templates": "More Templates",
 "label.move.down.row": "Move down one row",
 "label.move.to.bottom": "Move to bottom",
@@ -1340,6 +1413,7 @@
 "label.new.instance.group": "New Instance Group",
 "label.new.password": "New Password",
 "label.new.project": "New Project",
+"label.new.secondaryip.description": "Enter new secondary IP address",
 "label.new.tag": "New Tag",
 "label.new.vm": "New VM",
 "label.newdiskoffering": "New Offering",
@@ -1372,6 +1446,7 @@
 "label.none": "None",
 "label.noselect": "No thanks",
 "label.not.found": "Not Found",
+"label.not.suitable": "Not Suitable",
 "label.notifications": "Notifications",
 "label.num.cpu.cores": "# of CPU Cores",
 "label.number": "#Rule",
@@ -1391,6 +1466,7 @@
 "label.offeringtype": "Compute Offering Type",
 "label.ok": "OK",
 "label.open.documentation": "Open Documentation",
+"label.open.url": "Open URL in browser",
 "label.opendaylight": "OpenDaylight",
 "label.opendaylight.controller": "OpenDaylight Controller",
 "label.opendaylight.controllerdetail": "OpenDaylight Controller Details",
@@ -1445,9 +1521,10 @@
 "label.per.account": "Per Account",
 "label.per.zone": "Per Zone",
 "label.perfectforwardsecrecy": "Perfect Forward Secrecy",
-"label.perform.fresh.checks":"Perform fresh checks",
+"label.perform.fresh.checks": "Perform fresh checks",
 "label.performfreshchecks": "Perform fresh checks",
 "label.permission": "Permission",
+"label.permissions": "permissions",
 "label.physical.network": "Physical Network",
 "label.physical.network.id": "Physical network ID",
 "label.physical.network.name": "Physical network name",
@@ -1484,6 +1561,7 @@
 "label.presetup": "PreSetup",
 "label.prev": "Prev",
 "label.previous": "Previous",
+"label.primary": "Primary",
 "label.primary.network": "Primary Network",
 "label.primary.storage": "Primary Storage",
 "label.primary.storage.allocated": "Primary Storage Allocated",
@@ -1572,10 +1650,10 @@
 "label.quota.tariff": "Tariff",
 "label.quota.tariff.edit": "Edit Tariff",
 "label.quota.tariff.effectivedate": "Effective Date",
-"label.quota.total":"Total",
+"label.quota.total": "Total",
 "label.quota.totalusage": "Total Usage",
-"label.quota.type.name":"Usage Type",
-"label.quota.type.unit":"Usage Unit",
+"label.quota.type.name": "Usage Type",
+"label.quota.type.unit": "Usage Unit",
 "label.quota.usage": "Quota Consumption",
 "label.quota.value": "Quota Value",
 "label.quota_enforce": "Enforce Quota",
@@ -1589,6 +1667,8 @@
 "label.rbdmonitor": "Ceph monitor",
 "label.rbdpool": "Ceph pool",
 "label.rbdsecret": "Cephx secret",
+"label.read": "Read",
+"label.read.io": "Read (IO)",
 "label.reason": "Reason",
 "label.reboot": "Reboot",
 "label.receivedbytes": "Bytes Received",
@@ -1603,16 +1683,19 @@
 "label.refresh.blades": "Refresh Blades",
 "label.region": "Region",
 "label.region.details": "Region details",
+"label.register.template": "Register Template",
 "label.reinstall.vm": "Reinstall VM",
 "label.reject": "Reject",
 "label.related": "Related",
 "label.relationaloperator": "Operator",
+"label.release": "Release",
 "label.release.account": "Release from Account",
 "label.release.dedicated.cluster": "Release Dedicated Cluster",
 "label.release.dedicated.host": "Release Dedicated Host",
 "label.release.dedicated.pod": "Release Dedicated Pod",
 "label.release.dedicated.vlan.range": "Release dedicated VLAN range",
 "label.release.dedicated.zone": "Release Dedicated Zone",
+"label.releasing.ip": "Releasing IP",
 "label.remind.later": "Remind me later",
 "label.remove": "Remove",
 "label.remove.acl": "Remove ACL",
@@ -1671,6 +1754,7 @@
 "label.restart.vpc": "Restart VPC",
 "label.restartrequired": "Restart required",
 "label.restore": "Restore",
+"label.restore.volume.attach": "Restore Volume and Attach",
 "label.retry.interval": "Retry Interval",
 "label.review": "Review",
 "label.revoke.project.invite": "Revoke invitation",
@@ -1698,6 +1782,7 @@
 "label.rules": "Rules",
 "label.rules.file": "Rules File",
 "label.rules.file.import.description": "Click or drag rule defintions CVS file to import",
+"label.run.proxy.locally": "Run proxy locally",
 "label.running": "Running VMs",
 "label.s3.access.key": "Access Key",
 "label.s3.bucket": "Bucket",
@@ -1717,6 +1802,7 @@
 "label.save": "Save",
 "label.save.and.continue": "Save and continue",
 "label.save.changes": "Save changes",
+"label.save.new.rule": "Save new Rule",
 "label.saving.processing": "Saving....",
 "label.scale.up.policy": "SCALE UP POLICY",
 "label.scaledown.policy": "ScaleDown Policy",
@@ -1756,6 +1842,7 @@
 "label.select.iso.or.template": "Select ISO or template",
 "label.select.offering": "Select offering",
 "label.select.project": "Select Project",
+"label.select.projects": "Select Projects",
 "label.select.region": "Select region",
 "label.select.tier": "Select Tier",
 "label.select.vm.for.static.nat": "Select VM for static NAT",
@@ -1789,6 +1876,7 @@
 "label.set.reservation": "Set Reservation",
 "label.set.reservation.desc": "(optional) Please specify an account to be associated with this IP range.<br/><br/>System VMs: Enable dedication of public IP range for SSVM and CPVM, account field disabled. Reservation strictness defined on 'system.vm.public.ip.reservation.mode.strictness'",
 "label.set.up.zone.type": "Set up zone type",
+"label.setting": "Setting",
 "label.settings": "Settings",
 "label.setup": "Setup",
 "label.setup.network": "Set up Network",
@@ -1822,6 +1910,7 @@
 "label.snmpcommunity": "SNMP Community",
 "label.snmpport": "SNMP Port",
 "label.sockettimeout": "Socket Timeout",
+"label.source.based": "SourceBased",
 "label.source.nat.supported": "SourceNAT Supported",
 "label.sourcecidr": "Source CIDR",
 "label.sourceipaddress": "Source IP Address",
@@ -1904,7 +1993,11 @@
 "label.submit": "Submit",
 "label.submitted.by": "[Submitted by: <span id=\"submitted_by\"></span>]",
 "label.succeeded": "Succeeded",
+"label.success": "Success",
+"label.success.set": "Successfully set",
+"label.success.updated": "Successfully updated",
 "label.suitability": "Suitability",
+"label.suitable": "Suitable",
 "label.summary": "Summary",
 "label.sunday": "Sunday",
 "label.supportedservices": "Supported Services",
@@ -1935,6 +2028,7 @@
 "label.tariffvalue": "Tariff Value",
 "label.task.completed": "Task completed",
 "label.tcp": "TCP",
+"label.tcp.proxy": "TCP Proxy",
 "label.template": "Select a template",
 "label.templatebody": "Body",
 "label.templatedn": "Select Template",
@@ -1963,31 +2057,42 @@
 "label.timeout.in.second ": " Timeout (seconds)",
 "label.timezone": "Timezone",
 "label.timezone.colon": "Timezone:",
+"label.to": "to",
+"label.to.default": "to default",
 "label.token": "Token",
+"label.token.for.dashboard.login": "Token for dashboard login can be retrieved using following command",
+"label.total": "Total",
 "label.total.hosts": "Total Hosts",
 "label.total.memory": "Total Memory",
+"label.total.network": "Total Networks",
 "label.total.storage": "Total Storage",
 "label.total.vms": "Total VMs",
+"label.total.volume": "Total Volumes",
 "label.totalcpu": "Total CPU",
 "label.traffic.label": "Traffic label",
 "label.traffic.types": "Traffic Types",
 "label.traffictype": "Traffic Type",
 "label.transportzoneuuid": "Transport Zone Uuid",
+"label.try.again": "Try Again",
 "label.tuesday": "Tuesday",
 "label.type": "Type",
 "label.type.id": "Type ID",
 "label.ucs": "UCS",
 "label.udp": "UDP",
 "label.uk.keyboard": "UK keyboard",
+"label.unauthorized": "Unauthorized",
 "label.unavailable": "Unavailable",
 "label.unhealthy.threshold": "Unhealthy Threshold",
+"label.unique.name.tier": "A unique name of the tier",
 "label.unit": "Usage Unit",
+"label.unknown": "Unknown",
 "label.unlimited": "Unlimited",
 "label.untagged": "Untagged",
 "label.update.instance.group": "Update Instance Group",
 "label.update.project.resources": "Update project resources",
 "label.update.ssl": " SSL Certificate",
 "label.update.ssl.cert": " SSL Certificate",
+"label.update.to": "updated to",
 "label.update.vmware.datacenter": "Update VMware Datacenter",
 "label.updating": "Updating",
 "label.upgrade.router.newer.template": "Upgrade Router to Use Newer Template",
@@ -2004,6 +2109,7 @@
 "label.usageinterface": "Usage Interface",
 "label.usagename": "Usage Type",
 "label.usageunit": "Unit",
+"label.use.kubectl.access.cluster": "Use <code>kubectl</code> and <code>kubeconfig</code> file to access cluster",
 "label.use.vm.ip": "Use VM IP:",
 "label.use.vm.ips": "Use VM IPs",
 "label.used": "Used",
@@ -2020,6 +2126,7 @@
 "label.users": "Users",
 "label.usersource": "User Type",
 "label.usevpc": "VPC",
+"label.using.cli": "Using CLI",
 "label.utilization": "Utilisation",
 "label.uuid": "ID",
 "label.value": "Value",
@@ -2109,6 +2216,7 @@
 "label.volume.migrated": "Volume migrated",
 "label.volume.volumefileupload.description": "Click or drag file to this area to upload",
 "label.volumechecksum": "MD5 checksum",
+"label.volumechecksum.description": "Use the hash that you created at the start of the volume upload procedure",
 "label.volumefileupload": "Local file",
 "label.volumegroup": "Volume Group",
 "label.volumeids": "Volumes to be deleted",
@@ -2168,8 +2276,11 @@
 "label.welcome": "Welcome",
 "label.welcome.cloud.console": "Welcome to Management Console",
 "label.what.is.cloudstack": "What is CloudStack&#8482?",
+"label.windows": "Windows",
+"label.write": "Write",
 "label.writeback": "Write-back disk caching",
 "label.writecachetype": "Write-cache Type",
+"label.writeio": "Write (IO)",
 "label.writethrough": "Write-through",
 "label.xennetworklabel": "XenServer Traffic Label",
 "label.xenservertoolsversion61plus": "Original XS Version is 6.1+",
@@ -2193,6 +2304,7 @@
 "label.zonewizard.traffictype.management": "Management: Traffic between CloudStack's internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs",
 "label.zonewizard.traffictype.public": "Public: Traffic between the internet and virtual machines in the cloud.",
 "label.zonewizard.traffictype.storage": "Storage: Traffic between primary and secondary storage servers, such as VM templates and snapshots",
+"message.acquire.ip.failed": "Failed to acquire IP",
 "message.acquire.ip.nic": "Please confirm that you would like to acquire a new secondary IP for this NIC.<br/>NOTE: You need to manually configure the newly-acquired secondary IP inside the virtual machine.",
 "message.acquire.new.ip": "Please confirm that you would like to acquire a new IP for this network.",
 "message.acquire.new.ip.vpc": "Please confirm that you would like to acquire a new IP for this VPC.",
@@ -2281,27 +2393,58 @@
 "message.add.cluster.zone": "Add a hypervisor managed cluster for zone <b><span id=\"zone_name\"></span></b>",
 "message.add.disk.offering": "Please specify the following parameters to add a new disk offering",
 "message.add.domain": "Please specify the subdomain you want to create under this domain",
+"message.add.egress.rule.failed": "Adding new Egress rule failed",
+"message.add.egress.rule.processing": "Adding new Egress rule...",
+"message.add.failed": "Adding failed",
 "message.add.firewall": "Add a firewall to zone",
+"message.add.firewall.rule.failed": "Adding new Firewall rule failed",
+"message.add.firewall.rule.processing": "Adding new Firewall rule...",
 "message.add.guest.network": "Please confirm that you would like to add a guest network",
 "message.add.host": "Please specify the following parameters to add a new host",
 "message.add.ip.range": "Add an IP range to public network in zone",
 "message.add.ip.range.direct.network": "Add an IP range to direct network <b><span id=\"directnetwork_name\"></span></b> in zone <b><span id=\"zone_name\"></span></b>",
 "message.add.ip.range.to.pod": "<p>Add an IP range to pod: <b><span id=\"pod_name_label\"></span></b></p>",
+"message.add.iprange.processing": "Adding IP Range...",
 "message.add.load.balancer": "Add a load balancer to zone",
 "message.add.load.balancer.under.ip": "The load balancer rule has been added under IP:",
 "message.add.network": "Add a new network for zone: <b><span id=\"zone_name\"></span></b>",
+"message.add.network.acl.failed": "Adding Network ACL List failed",
+"message.add.network.acl.processing": "Adding Network ACL List...",
+"message.add.network.failed": "Adding network failed",
+"message.add.network.processing": "Adding network...",
 "message.add.new.gateway.to.vpc": "Please specify the information to add a new gateway to this VPC.",
 "message.add.pod": "Add a new pod for zone <b><span id=\"add_pod_zone_name\"></span></b>",
 "message.add.pod.during.zone.creation": "Each zone must contain in one or more pods, and we will add the first pod now. A pod contains hosts and primary storage servers, which you will add in a later step. First, configure a range of reserved IP addresses for CloudStack's internal management traffic. The reserved IP range must be unique for each zone in the cloud.",
+"message.add.port.forward.failed": "Adding new Port Forwarding rule failed",
+"message.add.port.forward.processing": "Adding new Port Forwarding rule...",
 "message.add.primary": "Please specify the following parameters to add a new primary storage",
 "message.add.primary.storage": "Add a new Primary Storage for zone <b><span id=\"zone_name\"></span></b>, pod <b><span id=\"pod_name\"></span></b>",
+"message.add.private.gateway.failed": "Adding Private Gateway failed",
+"message.add.private.gateway.processing": "Adding Private Gateway...",
 "message.add.region": "Please specify the required information to add a new region.",
+"message.add.resource.description": "Add infrastructure resources",
+"message.add.resource.hint": "Add infrastructure resources - pods, clusters, primary/secondary storages.",
+"message.add.rule.failed": "Failed to add new rule",
+"message.add.rule.processing": "Adding new security-group rule...",
+"message.add.secondary.ipaddress.processing": "Add Secondary IP address...",
 "message.add.secondary.storage": "Add a new storage for zone <b><span id=\"zone_name\"></span></b>",
 "message.add.service.offering": "Please fill in the following data to add a new compute offering.",
+"message.add.static.route.failed": "Failed to add static route",
+"message.add.static.route.processing": "Adding static route...",
 "message.add.system.service.offering": "Please fill in the following data to add a new system service offering.",
+"message.add.tag.failed": "Failed to add new tag",
+"message.add.tag.for.networkacl": "Add tag for NetworkACL",
+"message.add.tag.processing": "Adding new tag...",
 "message.add.template": "Please enter the following data to create your new template",
 "message.add.volume": "Please fill in the following data to add a new volume.",
+"message.add.vpn.connection.failed": "Adding VPN Connection failed",
+"message.add.vpn.connection.processing": "Adding VPN Connection...",
+"message.add.vpn.customer.gateway": "Adding VPN customer gateway",
+"message.add.vpn.customer.gateway.failed": "Failed to Add VPN customer gateway",
+"message.add.vpn.customer.gateway.processing": "Creation of VPN customer gateway is in progress",
 "message.add.vpn.gateway": "Please confirm that you want to add a VPN Gateway",
+"message.add.vpn.gateway.failed": "Adding VPN Gateway failed",
+"message.add.vpn.gateway.processing": "Adding VPN Gateway...",
 "message.added.vpc.offering": "Added VPC offering",
 "message.adding.host": "Adding host",
 "message.adding.netscaler.device": "Adding Netscaler device",
@@ -2316,17 +2459,24 @@
 "message.alert.state.detected": "Alert state detected",
 "message.allow.vpn.access": "Please enter a username and password of the user that you want to allow VPN access.",
 "message.apply.snapshot.policy": "You have successfully updated your current snapshot policy.",
+"message.apply.success": "Apply Successfully",
 "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.assign.vm.failed": "Failed to assign VM",
+"message.assign.vm.processing": "Assigning VM...",
 "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.authorization.failed": "Session expired, authorization verification failed",
 "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.certificate.upload.processing": "Certificate upload in progress",
 "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.",
 "message.cluster.dedicated": "Cluster Dedicated",
 "message.cluster.dedication.released": "Cluster dedication released",
+"message.config.sticky.policy.failed": "Failed to configure sticky policy",
+"message.config.sticky.policy.processing": "Updating sticky policy...",
 "message.configure.all.traffic.types": "You have multiple physical networks; please configure labels for each traffic type by clicking on the Edit button.",
 "message.configure.firewall.rules.allow.traffic": "Configure the rules to allow Traffic",
 "message.configure.firewall.rules.block.traffic": "Configure the rules to block Traffic",
@@ -2342,6 +2492,7 @@
 "message.confirm.archive.selected.alerts": "Please confirm you would like to archive the selected alerts",
 "message.confirm.archive.selected.events": "Please confirm you would like to archive the selected events",
 "message.confirm.attach.disk": "Are you sure you want to attach disk?",
+"message.confirm.configure.ovs": "Are you sure you want to configure Ovs?",
 "message.confirm.create.volume": "Are you sure you want to create volume?",
 "message.confirm.current.guest.cidr.unchanged": "Do you want to keep the current guest network CIDR unchanged?",
 "message.confirm.dedicate.cluster.domain.account": "Do you really want to dedicate this cluster to a domain/account? ",
@@ -2359,7 +2510,7 @@
 "message.confirm.delete.internal.lb": "Please confirm you want to delete Internal LB",
 "message.confirm.delete.kubernetes.version": "Please confirm that you want to delete this Kubernetes version.",
 "message.confirm.delete.netscaler": "Please confirm that you would like to delete NetScaler",
-"message.confirm.delete.niciranvp":"Please confirm you want to delete Nicira Nvp Controller",
+"message.confirm.delete.niciranvp": "Please confirm you want to delete Nicira Nvp Controller",
 "message.confirm.delete.pa": "Please confirm that you would like to delete Palo Alto",
 "message.confirm.delete.provider": "Please confirm that you would like to delete this provider?",
 "message.confirm.delete.secondary.staging.store": "Please confirm you want to delete Secondary Staging Store.",
@@ -2410,9 +2561,18 @@
 "message.copy.iso.confirm": "Please confirm that you wish to copy your ISO to",
 "message.copy.template": "Copy template <b id=\"copy_template_name_text\">XXX</b> from zone <b id=\"copy_template_source_zone_text\"></b> to",
 "message.copy.template.confirm": "Are you sure you want to copy template?",
+"message.create.compute.offering": "Compute offering created",
+"message.create.internallb": "Creating Internal LB",
+"message.create.internallb.failed": "Failed to create Internal LB",
+"message.create.internallb.processing": "Creation of Internal LB is in progress",
+"message.create.service.offering": "Service offering created",
 "message.create.template": "Are you sure you want to create template?",
 "message.create.template.vm": "Create VM from template <b id=\"p_name\"></b>",
 "message.create.template.volume": "Please specify the following information before creating a template of your disk volume: <b><span id=\"volume_name\"></span></b>. Creation of the template can range from several minutes to longer depending on the size of the volume.",
+"message.create.volume.failed": "Failed to Create volume",
+"message.create.volume.processing": "Volume creation in progress",
+"message.create.vpc.offering": "VPC offering created",
+"message.create.vpn.customer.gateway.failed": "VPN customer gateway creation failed",
 "message.creating.cluster": "Creating cluster",
 "message.creating.guest.network": "Creating guest network",
 "message.creating.physical.networks": "Creating physical networks",
@@ -2428,15 +2588,27 @@
 "message.dedicating.pod": "Dedicating Pod...",
 "message.dedicating.zone": "Dedicating Zone...",
 "message.delete.account": "Please confirm that you want to delete this account.",
+"message.delete.acl.processing": "Removing ACL rule...",
+"message.delete.acl.rule": "Remove ACL rule",
+"message.delete.acl.rule.failed": "Failed to remove ACL rule",
 "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.failed": "Delete fail",
 "message.delete.gateway": "Please confirm you want to delete the gateway",
+"message.delete.port.forward.processing": "Deleting Port Forwarding rule...",
 "message.delete.project": "Are you sure you want to delete this project?",
+"message.delete.rule.processing": "Deleting rule...",
 "message.delete.sslcertificate": "Please confirm that you would like to delete this certificate.",
+"message.delete.static.route.failed": "Failed to delete static route",
+"message.delete.static.route.processing": "Deleting static route...",
+"message.delete.tag.failed": "Failed to delete tag",
+"message.delete.tag.for.networkacl": "Remove tag for NetworkACL",
+"message.delete.tag.processing": "Deleting tag...",
 "message.delete.user": "Please confirm that you would like to delete this user.",
 "message.delete.vpn.connection": "Please confirm that you want to delete VPN connection",
 "message.delete.vpn.customer.gateway": "Please confirm that you want to delete this VPN Customer Gateway",
 "message.delete.vpn.gateway": "Please confirm that you want to delete this VPN Gateway",
+"message.deleting.vm": "Deleting VM",
 "message.desc.add.new.lb.sticky.rule": "Add new LB sticky rule",
 "message.desc.advanced.zone": "For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support.",
 "message.desc.basic.zone": "Provide a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering).",
@@ -2458,23 +2630,34 @@
 "message.disable.user": "Please confirm that you would like to disable this user.",
 "message.disable.vpn": "Are you sure you want to disable VPN?",
 "message.disable.vpn.access": "Please confirm that you want to disable Remote Access VPN.",
+"message.disable.vpn.failed": "Failed to disable VPN",
+"message.disable.vpn.processing": "Disabling VPN...",
 "message.disabling.network.offering": "Disabling network offering",
 "message.disabling.vpc.offering": "Disabling VPC offering",
 "message.disallowed.characters": "Disallowed characters: <,>",
-"message.disk.offering.created": "Disk offering created: {name}",
+"message.discovering.feature": "Discovering features, please wait...",
+"message.disk.offering.created": "Disk offering created:",
 "message.download.diagnostics": "Please click the link to download the retrieved diagnostics:<p><a href=\"#\">00000</a>",
 "message.download.iso": "Please click the link to download the ISO:<p><a href=\"#\">00000</a>",
 "message.download.template": "Please click the link to download the template:<p><a href=\"#\">00000</a>",
 "message.download.volume": "Please click the link to download the volume:<p><a href=\"#\">00000</a>",
 "message.download.volume.confirm": "Please confirm that you want to download this volume.",
 "message.edit.account": "Edit (\"-1\" indicates no limit to the amount of resources create)",
+"message.edit.acl.failed": "Failed to edit ACL rule",
+"message.edit.acl.processing": "Editing ACL rule...",
 "message.edit.confirm": "Please confirm your changes before clicking \"Save\".",
 "message.edit.limits": "Please specify limits to the following resources.  A \"-1\" indicates no limit to the amount of resources create.",
+"message.edit.rule.failed": "Failed to edit rule",
+"message.edit.rule.processing": "Updating rule...",
 "message.edit.traffic.type": "Please specify the traffic label you want associated with this traffic type.",
 "message.enable.account": "Please confirm that you want to enable this account.",
+"message.enable.netsacler.provider.failed": "failed to enable Netscaler provider",
+"message.enable.securitygroup.provider.failed": "failed to enable security group provider",
 "message.enable.user": "Please confirm that you would like to enable this user.",
 "message.enable.vpn": "Please confirm that you want Remote Access VPN enabled for this IP address.",
 "message.enable.vpn.access": "VPN is currently disabled for this IP Address.  Would you like to enable VPN access?",
+"message.enable.vpn.failed": "Failed to enable VPN",
+"message.enable.vpn.processing": "Enabling VPN...",
 "message.enabled.vpn": "Your Remote Access VPN is currently enabled and can be accessed via the IP",
 "message.enabled.vpn.ip.sec": "Your IPSec pre-shared key is",
 "message.enabled.vpn.note": "Note: VPN users are now accessed by changing views at the networks tab.",
@@ -2485,10 +2668,121 @@
 "message.enabling.zone.dots": "Enabling zone...",
 "message.enter.seperated.list.multiple.cidrs": "Please enter a comma separated list of CIDRs if more than one",
 "message.enter.token": "Please enter the token that you were given in your invite e-mail.",
+"message.error.access.key": "Please enter Access Key",
+"message.error.add.guest.network": "Either IPv4 fields or IPv6 fields need to be filled when adding a guest network",
+"message.error.add.secondary.ipaddress": "There was an error adding the secondary IP Address",
+"message.error.agent.password": "Please enter Agent password",
+"message.error.agent.username": "Please enter Agent username",
+"message.error.binaries.iso.url": "Please enter binaries ISO URL",
+"message.error.bucket": "Please enter Bucket",
+"message.error.cloudian.console": "Single-Sign-On failed for Cloudian Management Console. Please ask your administrator to fix integration issues.",
+"message.error.cluster.description": "Please enter Kubernetes cluster description",
+"message.error.cluster.name": "Please enter cluster name",
+"message.error.confirm.password": "Please confirm new password",
+"message.error.current.password": "Please enter current password",
+"message.error.custom.disk.size": "Please enter custom disk size",
+"message.error.date": "Please select a date",
+"message.error.description": "Please enter description",
+"message.error.discovering.feature": "Exception caught while discoverying features",
+"message.error.display.text": "Please enter display text",
+"message.error.domain": "Enter your domain, leave empty for ROOT domain",
+"message.error.enable.saml": "Unable to find users IDs to enable SAML Single Sign On, kindly enable it manually.",
+"message.error.endip": "Please enter End IP",
+"message.error.gateway": "Please enter Gateway",
+"message.error.host.name": "Please enter host name",
+"message.error.host.password": "Please enter host password",
+"message.error.host.tags": "Please enter host tags",
+"message.error.host.username": "Please enter host username",
+"message.error.hypervisor.type": "Please select hypervisor type",
+"message.error.input.value": "Please enter value",
+"message.error.internal.dns1": "Please enter Internal DNS 1",
+"message.error.internal.dns2": "Please enter Internal DNS 2",
+"message.error.internallb.instance.port": "Please specify a Instance Port",
+"message.error.internallb.name": "Please specify a name for the Internal LB",
+"message.error.internallb.source.port": "Please specify a Source Port",
 "message.error.invalid.range": "Please enter values from {min} to {max}",
+"message.error.ipv4.address": "Please enter a valid IPv4 address",
+"message.error.ipv4.dns1": "Please enter IpV4 DNS 1",
+"message.error.ipv4.dns2": "Please enter IpV4 DNS 2",
+"message.error.ipv6.address": "Please enter a valid IP v6 address.",
+"message.error.ipv6.cidr": "Please enter IpV6 CIDR",
+"message.error.ipv6.dns1": "Please enter IpV6 DNS 1",
+"message.error.ipv6.dns2": "Please enter IpV6 DNS 2",
+"message.error.ipv6.gateway": "Please enter IpV6 Gateway",
+"message.error.ipv6.gateway.format": "Please enter a valid IPv6 Gateway.",
+"message.error.kubecluster.name": "Please enter Kubernetes cluster name",
+"message.error.kuberversion": "Please enter Kubernetes semantic version",
+"message.error.limit.value": "The value must not be less than",
+"message.error.loading.setting": "There was an error loading these settings.",
+"message.error.lun": "Please enter LUN #",
+"message.error.name": "Please enter name",
+"message.error.netmask": "Please enter Netmask",
+"message.error.network.domain": "Please enter Network domain",
+"message.error.network.offering": "Please select network offering",
+"message.error.new.password": "Please enter new password",
+"message.error.nexus1000v.ipaddess": "Please enter Nexus 1000v IP Address",
+"message.error.nexus1000v.password": "Please enter Nexus 1000v Password",
+"message.error.nexus1000v.username": "Please enter Nexus 1000v Username",
 "message.error.number": "Please enter a valid number",
+"message.error.password": "Enter your password",
+"message.error.path": "Please enter Path",
+"message.error.provide.setting": "Must provide a valid key and value for setting",
+"message.error.rados.monitor": "Please enter RADOS Monitor",
+"message.error.rados.pool": "Please enter RADOS Pool",
+"message.error.rados.secret": "Please enter RADOS Secret",
+"message.error.rados.user": "Please enter RADOS User",
+"message.error.remove.nic": "There was an error",
+"message.error.remove.secondary.ipaddress": "There was an error removing the secondary IP Address",
 "message.error.required.input": "Please enter input",
+"message.error.retrieve.kubeconfig": "Unable to retrieve Kubernetes cluster config",
+"message.error.s3nfs.path": "Please enter S3 NFS Path",
+"message.error.s3nfs.server": "Please enter S3 NFS Server",
+"message.error.save.setting": "There was an error saving this setting.",
+"message.error.sbdomain": "Please enter SMB Domain",
+"message.error.sbdomain.password": "Please enter SMB Domain Password",
+"message.error.sbdomain.username": "Please enter SMB Domain Username",
+"message.error.secret.key": "Please enter Secret Key",
 "message.error.select": "Please select option",
+"message.error.select.domain.to.dedicate": "Please select domain to dedicate to",
+"message.error.select.zone.type": "Please select zone type below.",
+"message.error.server": "Please enter server",
+"message.error.serviceoffering.for.cluster": "Please select service offering for Kubernetes cluster",
+"message.error.size": "Please enter size in GB",
+"message.error.size.for.cluster": "Please enter size for Kubernetes cluster",
+"message.error.smb.password": "Please enter SMB Password",
+"message.error.smb.username": "Please enter SMB Username",
+"message.error.specify.sticky.name": "Please specify a sticky name",
+"message.error.sr.namelabel": "Please enter SR Name-Label",
+"message.error.startip": "Please enter Start IP",
+"message.error.storage.tags": "Please enter storage tags",
+"message.error.target.iqn": "Please enter Target IQN",
+"message.error.time": "Please select time",
+"message.error.traffic.label": "Please enter traffic label",
+"message.error.try.save.setting": "There was an error saving this setting. Please try again later.",
+"message.error.upload.iso.description": "Only one ISO can be uploaded at a time",
+"message.error.upload.template": "Template Upload Failed",
+"message.error.upload.template.description": "Only one template can be uploaded at a time",
+"message.error.url": "Please enter URL",
+"message.error.username": "Enter your username",
+"message.error.vcenter.datacenter": "Please enter vCenter Datacenter",
+"message.error.vcenter.datastore": "Please enter vCenter Datastore",
+"message.error.vcenter.host": "Please enter vCenter Host",
+"message.error.vcenter.password": "Please enter vCenter Password",
+"message.error.vcenter.username": "Please enter vCenter Username",
+"message.error.version.for.cluster": "Please select Kubernetes version for Kubernetes cluster",
+"message.error.vlan.range": "Please enter a valid VLAN/VNI range",
+"message.error.volume.name": "Please enter volume name",
+"message.error.volumne": "Please enter Volume",
+"message.error.volumne.group": "Please enter Volume Group",
+"message.error.zone": "Please select a zone",
+"message.error.zone.combined": "All Zones cannot be combined with any other zone",
+"message.error.zone.for.cluster": "Please select zone for Kubernetes cluster",
+"message.error.zone.name": "Please enter zone name",
+"message.error.zone.type": "Please select zone type",
+"message.fail.to.delete": "Failed to delete.",
+"message.failed.to.add": "Failed to add",
+"message.failed.to.assign.vms": "Failed to assign VMs",
+"message.failed.to.remove": "Failed to remove",
 "message.generate.keys": "Please confirm that you would like to generate new keys for this user.",
 "message.gslb.delete.confirm": "Please confirm you want to delete this GSLB",
 "message.gslb.lb.remove.confirm": "Please confirm you want to remove load balancing from GSLB",
@@ -2502,6 +2796,7 @@
 "message.guestnetwork.state.shutdown": "Indicates the network configuration is being destroyed",
 "message.host.dedicated": "Host Dedicated",
 "message.host.dedication.released": "Host dedication released",
+"message.info.cloudian.console": "Cloudian Management Console should open in another window",
 "message.installwizard.click.retry": "Click the button to retry launch.",
 "message.installwizard.copy.whatisacluster": "A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Virtual machine instances (VMs) can be live-migrated from one host to another within the same cluster, without interrupting service to the user. A cluster is the third-largest organizational unit within a CloudStack&#8482; deployment. Clusters are contained within pod [...]
 "message.installwizard.copy.whatisahost": "A host is a single computer. Hosts provide the computing resources that run the guest virtual machines. Each host has hypervisor software installed on it to manage the guest VMs (except for bare metal hosts, which are a special case discussed in the Advanced Installation Guide). For example, a Linux KVM-enabled server, a Citrix XenServer server, and an ESXi server are hosts. In a Basic Installation, we use a single host running XenServer or KVM. [...]
@@ -2538,15 +2833,22 @@
 "message.installwizard.tooltip.configureguesttraffic.name": "A name for your network",
 "message.instance.scaled.up.confirm": "Do you really want to scale Up your instance ?",
 "message.instancewizard.notemplates": "You do not have any templates available; please add a compatible template, and re-launch the instance wizard.",
+"message.interloadbalance.not.return.elementid": "error: listInternalLoadBalancerElements API doesn't return Internal LB Element Id",
 "message.ip.address.changed": "Your IP addresses may have changed; would you like to refresh the listing? Note that in this case the details pane will close.",
 "message.iso.desc": "Disc image containing data or bootable media for OS",
 "message.join.project": "You have now joined a project. Please switch to Project view to see the project.",
+"message.kubeconfig.cluster.not.available": "Kubernetes cluster kubeconfig not available currently",
 "message.launch.vm.on.private.network": "Do you wish to launch your instance on your own private dedicated network?",
 "message.launch.zone": "Zone is ready to launch; please proceed to the next step.",
+"message.launch.zone.description": "Zone is ready to launch; please proceed to the next step.",
+"message.launch.zone.hint": "Configure network components and traffic including IP addresses.",
 "message.ldap.group.import": "All The users from the given group name will be imported",
 "message.link.domain.to.ldap": "Enable autosync for this domain in LDAP",
+"message.listnsp.not.return.providerid": "error: listNetworkServiceProviders API doesn't return VirtualRouter provider ID",
 "message.listview.subselect.multi": "(Ctrl/Cmd-click)",
+"message.load.host.failed": "Failed to load hosts",
 "message.lock.account": "Please confirm that you want to lock this account.  By locking the account, all users for this account will no longer be able to manage their cloud resources.  Existing resources can still be accessed.",
+"message.login.failed": "Login Failed",
 "message.migrate.instance.confirm": "Please confirm the host you wish to migrate the virtual instance to.",
 "message.migrate.instance.select.host": "Please select a host for migration",
 "message.migrate.instance.to.host": "Please confirm that you want to migrate instance to another host.",
@@ -2554,9 +2856,21 @@
 "message.migrate.router.confirm": "Please confirm the host you wish to migrate the router to:",
 "message.migrate.systemvm.confirm": "Please confirm the host you wish to migrate the system VM to:",
 "message.migrate.volume": "Please confirm that you want to migrate volume to another primary storage.",
+"message.migrate.volume.failed": "Migrating volume failed",
+"message.migrate.volume.processing": "Migrating volume...",
+"message.migrating.failed": "Migration failed",
+"message.migrating.processing": "Migration in progress for",
+"message.migrating.vm.to.host.failed": "Failed to migrate VM to host",
+"message.move.acl.order": "Move ACL rule order",
+"message.move.acl.order.failed": "Failed to move ACL rule",
+"message.move.acl.order.processing": "Moving ACL rule...",
 "message.ncc.delete.confirm": "Please confirm you want to delete this NCC",
 "message.network.addvm.desc": "Please specify the network that you would like to add this VM to. A new NIC will be added for this network.",
 "message.network.addvmnic": "Please confirm that you would like to add a new VM NIC for this network.",
+"message.network.description": "Setup network and traffic",
+"message.network.error": "Network Error",
+"message.network.error.description": "Unable to reach the management server or a browser extension may be blocking the network request.",
+"message.network.hint": "Configure network components and public/guest/management traffic including IP addresses.",
 "message.network.remote.access.vpn.configuration": "Remote Access VPN configuration has been generated, but it failed to apply. Please check connectivity of the network element, then re-try.",
 "message.network.removenic": "Please confirm that want to remove this NIC, which will also remove the associated network from the VM.",
 "message.network.secondaryip": "Please confirm that you would like to acquire a new secondary IP for this NIC. \n NOTE: You need to manually configure the newly-acquired secondary IP inside the virtual machine.",
@@ -2564,7 +2878,10 @@
 "message.new.user": "Specify the following to add a new user to the account",
 "message.no.affinity.groups": "You do not have any affinity groups. Please continue to the next step.",
 "message.no.datadisk": "The multidisk template has no data disk, please continue to next step.",
+"message.no.description": "No description entered.",
 "message.no.host.available": "No hosts are available for migration",
+"message.no.label.on.left": "No label on the left",
+"message.no.label.on.right": "No label on the right",
 "message.no.more.hosts.available": "No more hosts are available for migration",
 "message.no.network.support": "Your selected hypervisor, vSphere, does not have any additional network features.  Please continue to step 5.",
 "message.no.network.support.configuration.not.true": "You do not have any zone that has security group enabled. Thus, no additional network features.  Please continue to step 5.",
@@ -2583,14 +2900,17 @@
 "message.pending.projects.2": "To view, please go to the projects section, then select invitations from the drop-down.",
 "message.please.add.at.lease.one.traffic.range": "Please add at least one traffic range.",
 "message.please.confirm.remove.ssh.key.pair": "Please confirm that you want to remove this SSH Key Pair",
+"message.please.enter.value": "Please enter values",
 "message.please.proceed": "Please proceed to the next step.",
 "message.please.select.a.configuration.for.your.zone": "Please select a configuration for your zone.",
 "message.please.select.a.different.public.and.management.network.before.removing": "Please select a different public and management network before removing",
 "message.please.select.networks": "Please select networks for your virtual machine.",
 "message.please.select.ssh.key.pair.use.with.this.vm": "Please select a ssh key pair you want this VM to use:",
 "message.please.wait.while.zone.is.being.created": "Please wait while your zone is being created; this may take a while...",
+"message.pod.dedicated": "Pod Dedicated",
 "message.pod.dedication.released": "Pod dedication released",
 "message.portable.ip.delete.confirm": "Please confirm you want to delete Portable IP Range",
+"message.processing.complete": "Processing complete!",
 "message.project.invite.sent": "Invite sent to user; they will be added to the project once they accept the invitation",
 "message.public.traffic.in.advanced.zone": "Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.<br/><br/>Provide at least one range of IP addresses for internet traffic.",
 "message.public.traffic.in.basic.zone": "Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire ad [...]
@@ -2605,20 +2925,39 @@
 "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.release.ip.failed": "Failed to release IP",
 "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.egress.rule.failed": "Removing Egress rule failed",
+"message.remove.egress.rule.processing": "Deleting Egress rule...",
+"message.remove.failed": "Removing failed",
+"message.remove.firewall.rule.failed": "Removing Firewall rule failed",
+"message.remove.firewall.rule.processing": "Deleting Firewall rule...",
+"message.remove.instance.failed": "Failed to remove instance",
+"message.remove.instance.processing": "Removing...",
+"message.remove.iprange.processing": "Removing IP Range...",
 "message.remove.ldap": "Are you sure you want to delete the LDAP configuration?",
+"message.remove.nic.processing": "Removing NIC...",
+"message.remove.port.forward.failed": "Removing Port Forwarding rule failed",
 "message.remove.region": "Are you sure you want to remove this region from this management server?",
+"message.remove.rule.failed": "Failed to delete rule",
+"message.remove.secondary.ipaddress.processing": "Removing Secondary IP address...",
+"message.remove.securitygroup.rule.processing": "Deleting security-group rule...",
+"message.remove.sticky.policy.failed": "Failed to remove sticky policy",
+"message.remove.sticky.policy.processing": "Removing sticky policy...",
 "message.remove.vpc": "Please confirm that you want to remove the VPC",
 "message.remove.vpn.access": "Please confirm that you want to remove VPN access from the following user.",
 "message.removed.ssh.key.pair": "Removed a SSH Key Pair",
+"message.request.failed": "Request Failed",
 "message.required.add.least.ip": "Please add at least 1 IP Range",
 "message.required.traffic.type": "Error in configuration! All required traffic types should be added and with multiple physical networks each network should have a label.",
 "message.reset.password.warning.notpasswordenabled": "The template of this instance was created without password enabled",
 "message.reset.password.warning.notstopped": "Your instance must be stopped before attempting to change its current password",
 "message.reset.vpn.connection": "Please confirm that you want to reset VPN connection",
+"message.resize.volume.failed": "Failed to resize volume",
+"message.resource.not.found": "Resource not found",
 "message.restart.mgmt.server": "Please restart your management server(s) for your new settings to take effect.",
 "message.restart.mgmt.usage.server": "Please restart your management server(s) and usage server(s) for your new settings to take effect.",
 "message.restart.network": "All services provided by this network will be interrupted. Please confirm that you want to restart this network.",
@@ -2627,6 +2966,7 @@
 "message.restorevm": "Do you want to restore the VM ?",
 "message.role.ordering.fail": "Reordering of rule permissions aborted as the list has changed while you were making changes. Please try again.",
 "message.role.update.fail": "Failed updating rule permission",
+"message.scale.processing": "Scale in progress",
 "message.security.group.usage": "(Use <strong>Ctrl-click</strong> to select all applicable security groups)",
 "message.select.a.zone": "A zone typically corresponds to a single datacenter. Multiple zones help make the cloud more reliable by providing physical isolation and redundancy.",
 "message.select.affinity.groups": "Please select any affinity groups you want this VM to belong to:",
@@ -2636,12 +2976,17 @@
 "message.select.security.groups": "Please select security group(s) for your new VM",
 "message.select.template": "Please select a template for your new virtual instance.",
 "message.select.tier": "Please select a tier",
+"message.select.zone.description": "Select type of zone basic/advanced",
+"message.select.zone.hint": "This is the type of zone deployement that you want to use. Basic zone: provides a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering). Advanced zone: For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall [...]
 "message.set.default.nic": "Please confirm that you would like to make this NIC the default for this VM.",
 "message.set.default.nic.manual": "Please manually update the default NIC on the VM now.",
+"message.setting.updated": "Setting Updated:",
 "message.setup.physical.network.during.zone.creation": "When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined. Add or remove one or more traffic types onto each physical network.",
 "message.setup.physical.network.during.zone.creation.basic": "When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.<br/><br/>You may also <strong>add</strong> other traffic types onto the physical network.",
 "message.setup.successful": "Cloud setup successful!",
+"message.specifiy.tag.key": "Please specify a tag key",
 "message.specifiy.tag.key.value": "Please specify a tag key and value",
+"message.specifiy.tag.value": "Please specify a tag value",
 "message.specify.url": "Please specify URL",
 "message.step.1.desc": "Please select a template for your new virtual instance. You can also choose to select a blank template from which an ISO image can be installed onto.",
 "message.step.2.continue": "Please select a service offering to continue",
@@ -2649,7 +2994,82 @@
 "message.step.4.continue": "Please select at least one network to continue",
 "message.step.4.desc": "Please select the primary network that your virtual instance will be connected to.",
 "message.storage.traffic": "Traffic between CloudStack's internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs. Please configure storage traffic here.",
+"message.success.acquire.ip": "Successfully acquired IP",
+"message.success.add.egress.rule": "Successfully added new Egress rule",
+"message.success.add.firewall.rule": "Successfully added new Firewall rule",
+"message.success.add.guest.network": "Successfully created guest network",
+"message.success.add.iprange": "Successfully added IP Range",
+"message.success.add.kuberversion": "Successfully added Kubernetes version",
+"message.success.add.network": "Successfully added network",
+"message.success.add.network.acl": "Successfully added Network ACL List",
+"message.success.add.port.forward": "Successfully added new Port Forwarding rule",
+"message.success.add.private.gateway": "Successfully added Private Gateway",
+"message.success.add.rule": "Successfully added new rule",
+"message.success.add.secondary.ipaddress": "Successfully added secondary IP Address",
+"message.success.add.static.route": "Successfully added static route",
+"message.success.add.tag": "Successfully added new tag",
+"message.success.add.vpc.network": "Successfully added VPC Network",
+"message.success.add.vpn.customer.gateway": "Successfully added VPN customer gateway",
+"message.success.add.vpn.gateway": "Successfully added VPN Gateway",
+"message.success.asign.vm": "Successfully assigned VM",
+"message.success.assigned.vms": "Successfully assigned VMs",
+"message.success.certificate.upload": "Certificate successfully uploaded",
+"message.success.change.affinity.group": "Successfully changed affinity groups",
+"message.success.change.offering": "Successfully changed offering",
+"message.success.change.password": "Successfully changed password for user",
+"message.success.config.backup.schedule": "Successfully Configure VM backup schedule",
+"message.success.config.sticky.policy": "Successfully configured sticky policy",
+"message.success.copy.clipboard": "Copied Successfully to clipboard",
+"message.success.create.account": "Successfully created account",
+"message.success.create.internallb": "Successfully created Internal LB",
+"message.success.create.isolated.network": "Successfully created isolated network",
+"message.success.create.keypair": "Successfully created SSH key pair",
+"message.success.create.kubernetes.cluter": "Successfully created Kubernetes cluster",
+"message.success.create.l2.network": "Successfully created L2 network",
+"message.success.create.volume": "Successfully created volume",
+"message.success.delete": "Delete success",
+"message.success.delete.acl.rule": "Successfully removed ACL rule",
+"message.success.delete.backup.schedule": "Successfully deleted Configure VM backup schedule",
+"message.success.delete.snapshot.policy": "Successfully deleted snapshot policy",
+"message.success.delete.static.route": "Successfully deleted static route",
+"message.success.delete.tag": "Successfully deleted tag",
+"message.success.delete.vm": "Successfully Deleted VM",
+"message.success.disable.saml.auth": "Successfully disabled SAML Authorization",
+"message.success.disable.vpn": "Successfully disabled VPN",
+"message.success.edit.acl": "Successfully edited ACL rule",
+"message.success.edit.rule": "Successfully edited rule",
+"message.success.enable.saml.auth": "Successfully enabled SAML Authorization",
+"message.success.migrate.volume": "Successfully migrated volume",
+"message.success.migrating": "Migration completed successfully for",
+"message.success.move.acl.order": "Successfully moved ACL rule",
+"message.success.recurring.snapshot": "Successfully recurring snapshots",
+"message.success.register.iso": "Successfully registered ISO",
+"message.success.register.keypair": "Successfully registered SSH key pair",
+"message.success.register.template": "Successfully registered template",
+"message.success.release.ip": "Successfully released IP",
+"message.success.remove.egress.rule": "Successfully removed Egress rule",
+"message.success.remove.firewall.rule": "Successfully removed Firewall rule",
+"message.success.remove.instance.rule": "Successfully removed instance from rule",
+"message.success.remove.ip": "Successfully removed IP",
+"message.success.remove.iprange": "Successfully removed IP Range",
+"message.success.remove.nic": "Successfully removed",
+"message.success.remove.port.forward": "Successfully removed Port Forwarding rule",
+"message.success.remove.rule": "Successfully deleted rule",
+"message.success.remove.secondary.ipaddress": "Successfully removed secondary IP Address",
+"message.success.remove.sticky.policy": "Successfully removed sticky policy",
+"message.success.resize.volume": "Successfully resized volume",
+"message.success.scale.kubernetes": "Successfully scaled Kubernetes cluster",
+"message.success.update.ipaddress": "Successfully updated IP Address",
+"message.success.update.kubeversion": "Successfully updated Kubernetes supported version",
+"message.success.upgrade.kubernetes": "Successfully upgraded Kubernetes cluster",
+"message.success.upload": "Upload Successfully",
+"message.success.upload.description": "This ISO file has been uploaded. Please check its status at Templates menu",
+"message.success.upload.iso.description": "This ISO file has been uploaded. Please check its status in the Images > ISOs menu",
+"message.success.upload.template.description": "This template file has been uploaded. Please check its status at Templates menu",
+"message.success.upload.volume.description": "This Volume has been uploaded. Please check its status in the Volumes menu",
 "message.suspend.project": "Are you sure you want to suspend this project?",
+"message.sussess.discovering.feature": "Discovered all available features!",
+"message.switch.to": "Switched to",
 "message.systems.vms.ready": "System VMs ready.",
 "message.template.copy.select.zone": "Please select a zone to copy template.",
 "message.template.copying": "Template is being copied.",
@@ -2665,11 +3085,21 @@
 "message.tooltip.reserved.system.gateway": "The gateway for the hosts in the pod.",
 "message.tooltip.reserved.system.netmask": "The network prefix that defines the pod subnet. Uses CIDR notation.",
 "message.tooltip.zone.name": "A name for the zone.",
+"message.traffic.type.to.basic.zone": "traffic type to basic zone",
+"message.update.ipaddress.processing": "Updating IP Address...",
 "message.update.os.preference": "Please choose a OS preference for this host.  All virtual instances with similar preferences will be first allocated to this host before choosing another.",
 "message.update.resource.count": "Please confirm that you want to update resource counts for this account.",
 "message.update.ssl": "Please submit a new X.509 compliant SSL certificate chain to be updated to each console proxy and secondary storage virtual instance:",
 "message.update.ssl.failed": "Failed to update SSL Certificate.",
 "message.update.ssl.succeeded": "Update SSL Certificates succeeded",
+"message.upload.failed": "Upload Failed",
+"message.upload.file.limit": "Only one file can be uploaded at a time",
+"message.upload.file.processing": "Do not close this form, file upload is in progress...",
+"message.upload.iso.failed": "ISO Upload Failed",
+"message.upload.iso.failed.description": "Failed to upload ISO",
+"message.upload.template.failed.description": "Failed to upload Template",
+"message.upload.volume.failed": "Volume Upload Failed",
+"message.user.not.permitted.api": "User is not permitted to use the API",
 "message.validate.accept": "Please enter a value with a valid extension.",
 "message.validate.creditcard": "Please enter a valid credit card number.",
 "message.validate.date": "Please enter a valid date.",
@@ -2689,6 +3119,7 @@
 "message.validate.range.length": "Please enter a value between {0} and {1} characters long.",
 "message.validate.url": "Please enter a valid URL.",
 "message.virtual.network.desc": "A dedicated virtualized network for your account.  The broadcast domain is contained within a VLAN and all public network access is routed out by a virtual router.",
+"message.virtual.router.not.return.elementid": "error: listVirtualRouterElements API doesn't return Virtual Router Element Id",
 "message.vm.create.template.confirm": "Create Template will reboot the VM automatically.",
 "message.vm.review.launch": "Please review the following information and confirm that your virtual instance is correct before launch.",
 "message.vm.state.destroyed": "VM is marked for destroy",
@@ -2737,6 +3168,8 @@
 "message.your.cloudstack.is.ready": "Your CloudStack is ready!",
 "message.zone.creation.complete": "Zone creation complete",
 "message.zone.creation.complete.would.you.like.to.enable.this.zone": "Zone creation complete. Would you like to enable this zone?",
+"message.zone.detail.description": "Populate zone details",
+"message.zone.detail.hint": "A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.",
 "message.zone.no.network.selection": "The zone you selected does not have any choices for network selection.",
 "message.zone.step.1.desc": "Please select a network model for your zone.",
 "message.zone.step.2.desc": "Please enter the following info to add a new zone",
@@ -2744,6 +3177,7 @@
 "message.zonewizard.enable.local.storage": "WARNING: If you enable local storage for this zone, you must do the following, depending on where you would like your system VMs to launch:<br/><br/>1. If system VMs need to be launched in shared primary storage, shared primary storage needs to be added to the zone after creation. You must also start the zone in a disabled state.<br/><br/>2. If system VMs need to be launched in local primary storage, system.vm.use.local.storage needs to be set  [...]
 "messgae.validate.min": "Please enter a value greater than or equal to {0}.",
 "network.rate": "Network Rate",
+"router.health.checks": "Health Check",
 "side.by.side": "Side by Side",
 "state.accepted": "Accepted",
 "state.active": "Active",
@@ -2766,5 +3200,7 @@
 "state.stopped": "Stopped",
 "state.stopping": "Stopping",
 "state.suspended": "Suspended",
-"title.upload.volume": "Upload Volume"
+"title.upload.volume": "Upload Volume",
+"user.login": "Login",
+"user.logout": "Logout"
 }
diff --git a/src/permission.js b/src/permission.js
index 9fffb7c..161a1b4 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -48,7 +48,7 @@ router.beforeEach((to, from, next) => {
       if (Object.keys(store.getters.apis).length === 0) {
         const cachedApis = Vue.ls.get(APIS, {})
         if (Object.keys(cachedApis).length > 0) {
-          message.loading('Loading...', 1.5)
+          message.loading(`${i18n.t('label.loading')}...`, 1.5)
         }
         store
           .dispatch('GetInfo')
@@ -66,7 +66,7 @@ router.beforeEach((to, from, next) => {
           .catch(() => {
             notification.error({
               message: 'Error',
-              description: 'Exception caught while discoverying features'
+              description: i18n.t('message.error.discovering.feature')
             })
             store.dispatch('Logout').then(() => {
               next({ path: '/user/login', query: { redirect: to.fullPath } })
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 4172eaf..abb57e5 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -22,6 +22,7 @@ import message from 'ant-design-vue/es/message'
 import router from '@/router'
 import store from '@/store'
 import { login, logout, api } from '@/api'
+import i18n from '@/locales'
 import { ACCESS_TOKEN, CURRENT_PROJECT, DEFAULT_THEME, APIS, ASYNC_JOB_IDS } from '@/store/mutation-types'
 
 const user = {
@@ -124,7 +125,7 @@ const user = {
           commit('SET_APIS', cachedApis)
           resolve(cachedApis)
         } else {
-          const hide = message.loading('Discovering features, please wait...', 0)
+          const hide = message.loading(i18n.t('message.discovering.feature'), 0)
           api('listApis').then(response => {
             const apis = {}
             const apiList = response.listapisresponse.api
@@ -142,7 +143,7 @@ const user = {
               router.addRoutes(store.getters.addRouters)
             })
             hide()
-            message.success('Discovered all available features!')
+            message.success(i18n.t('message.sussess.discovering.feature'))
           }).catch(error => {
             reject(error)
           })
diff --git a/src/utils/plugins.js b/src/utils/plugins.js
index 5b9328d..6eed44a 100644
--- a/src/utils/plugins.js
+++ b/src/utils/plugins.js
@@ -38,12 +38,12 @@ export const pollJobPlugin = {
       const {
         jobId,
         name = '',
-        successMessage = 'Success',
+        successMessage = i18n.t('label.success'),
         successMethod = () => {},
-        errorMessage = 'Error',
+        errorMessage = i18n.t('label.error'),
         errorMethod = () => {},
-        loadingMessage = 'Loading...',
-        catchMessage = 'Error caught',
+        loadingMessage = `${i18n.t('label.loading')}...`,
+        catchMessage = i18n.t('label.error.caught'),
         catchMethod = () => {},
         action = null
       } = options
@@ -98,7 +98,7 @@ export const pollJobPlugin = {
       }).catch(e => {
         console.error(`${catchMessage} - ${e}`)
         notification.error({
-          message: this.$t('label.error'),
+          message: i18n.t('label.error'),
           description: catchMessage,
           duration: 0
         })
@@ -113,11 +113,11 @@ export const notifierPlugin = {
   install (Vue) {
     Vue.prototype.$notifyError = function (error) {
       console.log(error)
-      var msg = 'Request Failed'
+      var msg = i18n.t('message.request.failed')
       var desc = ''
       if (error && error.response) {
         if (error.response.status) {
-          msg = `Request Failed (${error.response.status})`
+          msg = `${i18n.t('message.request.failed')} (${error.response.status})`
         }
         if (error.message) {
           desc = error.message
diff --git a/src/utils/request.js b/src/utils/request.js
index 9dd0217..382dcfd 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -22,6 +22,7 @@ import store from '@/store'
 import { VueAxios } from './axios'
 import notification from 'ant-design-vue/es/notification'
 import { CURRENT_PROJECT } from '@/store/mutation-types'
+import i18n from '@/locales'
 
 const service = axios.create({
   timeout: 600000
@@ -33,15 +34,15 @@ const err = (error) => {
     console.log(response)
     if (response.status === 403) {
       const data = response.data
-      notification.error({ message: 'Forbidden', description: data.message })
+      notification.error({ message: i18n.t('label.forbidden'), description: data.message })
     }
     if (response.status === 401) {
       if (response.config && response.config.params && ['listIdps'].includes(response.config.params.command)) {
         return
       }
       notification.error({
-        message: 'Unauthorized',
-        description: 'Session expired, authorization verification failed',
+        message: i18n.t('label.unauthorized'),
+        description: i18n.t('message.authorization.failed'),
         key: 'http-401'
       })
       store.dispatch('Logout').then(() => {
@@ -51,14 +52,14 @@ const err = (error) => {
       })
     }
     if (response.status === 404) {
-      notification.error({ message: 'Not Found', description: 'Resource not found' })
+      notification.error({ message: i18n.t('label.not.found'), description: i18n.t('message.resource.not.found') })
       router.push({ path: '/exception/404' })
     }
   }
   if (error.isAxiosError && !error.response) {
     notification.warn({
-      message: error.message || 'Network Error',
-      description: 'Unable to reach the management server or a browser extension may be blocking the network request.',
+      message: error.message || i18n.t('message.network.error'),
+      description: i18n.t('message.network.error.description'),
       key: 'network-error'
     })
   }
diff --git a/src/views/AutogenView.vue b/src/views/AutogenView.vue
index 6d738a7..0cdad0f 100644
--- a/src/views/AutogenView.vue
+++ b/src/views/AutogenView.vue
@@ -439,7 +439,7 @@ export default {
         const project = json.listprojectsresponse.project[0]
         this.$store.dispatch('SetProject', project)
         this.$store.dispatch('ToggleTheme', project.id === undefined ? 'light' : 'dark')
-        this.$message.success(`Switched to "${project.name}"`)
+        this.$message.success(`${this.$t('message.switch.to')} "${project.name}"`)
         const query = Object.assign({}, this.$route.query)
         delete query.projectid
         this.$router.replace({ query })
@@ -767,7 +767,7 @@ export default {
         },
         errorMethod: () => this.fetchData(),
         loadingMessage: `${this.$t(action.label)} - ${resourceName}`,
-        catchMessage: 'Error encountered while fetching async job result',
+        catchMessage: this.$t('error.fetching.async.job.result'),
         action
       })
     },
diff --git a/src/views/auth/Login.vue b/src/views/auth/Login.vue
index 0d7af14..aa53f53 100644
--- a/src/views/auth/Login.vue
+++ b/src/views/auth/Login.vue
@@ -42,7 +42,7 @@
             :placeholder="$t('label.username')"
             v-decorator="[
               'username',
-              {rules: [{ required: true, message: 'Enter your username' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
+              {rules: [{ required: true, message: $t('message.error.username') }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
             ]"
           >
             <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -57,7 +57,7 @@
             :placeholder="$t('label.password')"
             v-decorator="[
               'password',
-              {rules: [{ required: true, message: 'Enter your password' }], validateTrigger: 'blur'}
+              {rules: [{ required: true, message: $t('message.error.password') }], validateTrigger: 'blur'}
             ]"
           >
             <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -71,7 +71,7 @@
             :placeholder="$t('label.domain')"
             v-decorator="[
               'domain',
-              {rules: [{ required: false, message: 'Enter your domain, leave empty for ROOT domain' }], validateTrigger: 'change'}
+              {rules: [{ required: false, message: $t('message.error.domain') }], validateTrigger: 'change'}
             ]"
           >
             <a-icon slot="prefix" type="block" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -212,9 +212,10 @@ export default {
     },
     requestFailed (err) {
       if (err && err.response && err.response.data && err.response.data.loginresponse) {
-        this.$message.error('Error ' + err.response.data.loginresponse.errorcode + ': ' + err.response.data.loginresponse.errortext)
+        const error = err.response.data.loginresponse.errorcode + ': ' + err.response.data.loginresponse.errortext
+        this.$message.error(`${this.$t('label.error')} ${error}`)
       } else {
-        this.$message.error('Login Failed')
+        this.$message.error(this.$t('message.login.failed'))
       }
     }
   }
diff --git a/src/views/compute/ChangeAffinity.vue b/src/views/compute/ChangeAffinity.vue
index b16e105..c03a4b5 100644
--- a/src/views/compute/ChangeAffinity.vue
+++ b/src/views/compute/ChangeAffinity.vue
@@ -148,7 +148,7 @@ export default {
         affinitygroupids: this.selectedRowKeys.join(',')
       }).then(response => {
         this.$notification.success({
-          message: 'Successfully changed affinity groups'
+          message: this.$t('message.success.change.affinity.group')
         })
         this.$parent.$parent.close()
         this.parentFetchData()
diff --git a/src/views/compute/CreateKubernetesCluster.vue b/src/views/compute/CreateKubernetesCluster.vue
index 3aefdbb..14b59f7 100644
--- a/src/views/compute/CreateKubernetesCluster.vue
+++ b/src/views/compute/CreateKubernetesCluster.vue
@@ -31,7 +31,7 @@
           </span>
           <a-input
             v-decorator="['name', {
-              rules: [{ required: true, message: 'Please enter Kubernetes cluster name' }]
+              rules: [{ required: true, message: $t('message.error.kubecluster.name') }]
             }]"
             :placeholder="apiParams.name.description"/>
         </a-form-item>
@@ -44,7 +44,7 @@
           </span>
           <a-input
             v-decorator="['description', {
-              rules: [{ required: true, message: 'Please enter Kubernetes cluster description' }]
+              rules: [{ required: true, message: $t('message.error.cluster.description') }]
             }]"
             :placeholder="apiParams.description.description"/>
         </a-form-item>
@@ -58,7 +58,7 @@
           <a-select
             id="zone-selection"
             v-decorator="['zoneid', {
-              rules: [{ required: true, message: 'Please select zone for Kubernetes cluster' }]
+              rules: [{ required: true, message: $t('message.error.zone.for.cluster') }]
             }]"
             showSearch
             optionFilterProp="children"
@@ -83,7 +83,7 @@
           <a-select
             id="version-selection"
             v-decorator="['kubernetesversionid', {
-              rules: [{ required: true, message: 'Please select Kubernetes version for Kubernetes cluster' }]
+              rules: [{ required: true, message: $t('message.error.version.for.cluster') }]
             }]"
             showSearch
             optionFilterProp="children"
@@ -108,7 +108,7 @@
           <a-select
             id="offering-selection"
             v-decorator="['serviceofferingid', {
-              rules: [{ required: true, message: 'Please select service offering for Kubernetes cluster' }]
+              rules: [{ required: true, message: $t('message.error.serviceoffering.for.cluster') }]
             }]"
             showSearch
             optionFilterProp="children"
@@ -134,7 +134,7 @@
               rules: [{
                 validator: (rule, value, callback) => {
                   if (value && (isNaN(value) || value <= 0)) {
-                    callback('Please enter a valid number')
+                    callback(this.$t('message.validate.number'))
                   }
                   callback()
                 }
@@ -177,11 +177,11 @@
           <a-input
             v-decorator="['masternodes', {
               initialValue: '1',
-              rules: [{ required: true, message: 'Please enter value' },
+              rules: [{ required: true, message: $t('message.error.input.value') },
                       {
                         validator: (rule, value, callback) => {
                           if (value && (isNaN(value) || value <= 0)) {
-                            callback('Please enter a valid number')
+                            callback(this.$t('message.validate.number'))
                           }
                           callback()
                         }
@@ -211,11 +211,11 @@
           <a-input
             v-decorator="['size', {
               initialValue: '1',
-              rules: [{ required: true, message: 'Please enter size for Kubernetes cluster' },
+              rules: [{ required: true, message: $t('message.error.size.for.cluster') },
                       {
                         validator: (rule, value, callback) => {
                           if (value && (isNaN(value) || value <= 0)) {
-                            callback('Please enter a valid number')
+                            callback(this.$t('message.validate.number'))
                           }
                           callback()
                         }
@@ -478,9 +478,9 @@ export default {
           })
           this.$pollJob({
             jobId,
-            loadingMessage: `Create Kubernetes cluster ${values.name} in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
-            successMessage: `Successfully created Kubernetes cluster ${values.name}`,
+            loadingMessage: `${this.$t('label.kubernetes.cluster.create')} ${values.name} ${this.$t('label.in.progress')}`,
+            catchMessage: this.$t('error.fetching.async.job.result'),
+            successMessage: this.$t('message.success.create.kubernetes.cluter') + ' ' + values.name,
             successMethod: result => {
               this.$emit('refresh-data')
             }
diff --git a/src/views/compute/CreateSSHKeyPair.vue b/src/views/compute/CreateSSHKeyPair.vue
index a3aa8e2..ba58a0e 100644
--- a/src/views/compute/CreateSSHKeyPair.vue
+++ b/src/views/compute/CreateSSHKeyPair.vue
@@ -26,7 +26,7 @@
         <a-form-item :label="$t('label.name')">
           <a-input
             v-decorator="['name', {
-              rules: [{ required: true, message: 'Please enter name' }]
+              rules: [{ required: true, message: $t('message.error.name') }]
             }]"
             :placeholder="apiParams.name.description"/>
         </a-form-item>
@@ -67,8 +67,8 @@
     <div v-if="isSubmitted">
       <p v-html="$t('message.desc.created.ssh.key.pair')"></p>
       <div :span="24" class="action-button">
-        <a-button @click="notifyCopied" v-clipboard:copy="hiddenElement.innerHTML" type="primary">{{ 'Copy to clipboard' }}</a-button>
-        <a-button @click="downloadKey" type="primary">{{ this.$t('Download') }}</a-button>
+        <a-button @click="notifyCopied" v-clipboard:copy="hiddenElement.innerHTML" type="primary">{{ $t('label.copy.clipboard') }}</a-button>
+        <a-button @click="downloadKey" type="primary">{{ this.$t('label.download') }}</a-button>
         <a-button @click="closeAction">{{ this.$t('label.close') }}</a-button>
       </div>
     </div>
@@ -174,7 +174,7 @@ export default {
         if (this.isValidValueForKey(values, 'publickey') && values.publickey.length > 0) {
           params.publickey = values.publickey
           api('registerSSHKeyPair', params).then(json => {
-            this.$message.success('Successfully registered SSH key pair: ' + values.name)
+            this.$message.success(this.$t('message.success.register.keypair') + ' ' + values.name)
           }).catch(error => {
             this.$notifyError(error)
           }).finally(() => {
@@ -184,7 +184,7 @@ export default {
           })
         } else {
           api('createSSHKeyPair', params).then(json => {
-            this.$message.success('Successfully created SSH key pair: ' + values.name)
+            this.$message.success(this.$t('message.success.create.keypair') + ' ' + values.name)
             if (json.createsshkeypairresponse && json.createsshkeypairresponse.keypair && json.createsshkeypairresponse.keypair.privatekey) {
               this.isSubmitted = true
               const key = json.createsshkeypairresponse.keypair.privatekey
@@ -208,7 +208,7 @@ export default {
     },
     notifyCopied () {
       this.$notification.info({
-        message: this.$t('Copied Successfully to cilpboard')
+        message: this.$t('message.success.copy.clipboard')
       })
     },
     closeAction () {
diff --git a/src/views/compute/DeployVM.vue b/src/views/compute/DeployVM.vue
index 946ae67..152926b 100644
--- a/src/views/compute/DeployVM.vue
+++ b/src/views/compute/DeployVM.vue
@@ -1031,14 +1031,14 @@ export default {
 
         if (!values.templateid && !values.isoid) {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: this.$t('message.template.iso')
           })
           return
         } else if (values.isoid && (!values.diskofferingid || values.diskofferingid === '0')) {
           this.$notification.error({
-            message: 'Request Failed',
-            description: this.$t('Please select a Disk Offering to continue')
+            message: this.$t('message.request.failed'),
+            description: this.$t('message.step.3.continue')
           })
           return
         }
@@ -1148,14 +1148,14 @@ export default {
                 const name = vm.displayname || vm.name || vm.id
                 if (vm.password) {
                   this.$notification.success({
-                    message: password + ' for ' + name,
+                    message: password + ` ${this.$t('label.for')} ` + name,
                     description: vm.password,
                     duration: 0
                   })
                 }
               },
-              loadingMessage: `${title} in progress`,
-              catchMessage: 'Error encountered while fetching async job result'
+              loadingMessage: `${title} ${this.$t('label.in.progress')}`,
+              catchMessage: this.$t('error.fetching.async.job.result')
             })
             this.$store.dispatch('AddAsyncJob', {
               title: title,
diff --git a/src/views/compute/DestoryVM.vue b/src/views/compute/DestoryVM.vue
index 3b30b60..56d2b23 100644
--- a/src/views/compute/DestoryVM.vue
+++ b/src/views/compute/DestoryVM.vue
@@ -132,9 +132,9 @@ export default {
           })
           this.$pollJob({
             jobId,
-            loadingMessage: `Deleting VM ${this.resource.name}`,
-            catchMessage: 'Error encountered while fetching async job result',
-            successMessage: `Successfully Deleted VM ${this.resource.name}`
+            loadingMessage: `${this.$t('message.deleting.vm')} ${this.resource.name}`,
+            catchMessage: this.$t('error.fetching.async.job.result'),
+            successMessage: `${this.$t('message.success.delete.vm')} ${this.resource.name}`
           })
         }).catch(error => {
           this.$notifyError(error)
diff --git a/src/views/compute/InstanceTab.vue b/src/views/compute/InstanceTab.vue
index 8096e91..ff47877 100644
--- a/src/views/compute/InstanceTab.vue
+++ b/src/views/compute/InstanceTab.vue
@@ -70,8 +70,8 @@
             <a-popconfirm
               :title="$t('label.set.default.nic')"
               @confirm="setAsDefault(record.nic)"
-              okText="Yes"
-              cancelText="No"
+              :okText="$t('label.yes')"
+              :cancelText="$t('label.no')"
               v-if="!record.nic.isdefault"
             >
               <a-button
@@ -81,7 +81,7 @@
             </a-popconfirm>
             <a-tooltip placement="bottom" v-if="record.nic.type !== 'L2'">
               <template slot="title">
-                {{ "Change IP Address" }}
+                {{ $t('label.change.ip.addess') }}
               </template>
               <a-button
                 icon="swap"
@@ -91,7 +91,7 @@
             </a-tooltip>
             <a-tooltip placement="bottom" v-if="record.nic.type !== 'L2'">
               <template slot="title">
-                {{ "Manage Secondary IP Addresses" }}
+                {{ $t('label.edit.secondary.ips') }}
               </template>
               <a-button
                 icon="environment"
@@ -102,8 +102,8 @@
             <a-popconfirm
               :title="$t('message.network.removenic')"
               @confirm="removeNIC(record.nic)"
-              okText="Yes"
-              cancelText="No"
+              :okText="$t('label.yes')"
+              :cancelText="$t('label.no')"
               v-if="!record.nic.isdefault"
             >
               <a-button
@@ -183,20 +183,20 @@
         {{ $t('message.network.secondaryip') }}
       </p>
       <a-divider />
-      <a-input placeholder="Enter new secondary IP address" v-model="newSecondaryIp"></a-input>
+      <a-input :placeholder="$t('label.new.secondaryip.description')" v-model="newSecondaryIp"></a-input>
       <div style="margin-top: 10px; display: flex; justify-content:flex-end;">
-        <a-button @click="submitSecondaryIP" type="primary" style="margin-right: 10px;">Add Secondary IP</a-button>
-        <a-button @click="closeModals">Close</a-button>
+        <a-button @click="submitSecondaryIP" type="primary" style="margin-right: 10px;">{{ $t('label.add.secondary.ip') }}</a-button>
+        <a-button @click="closeModals">{{ $t('label.close') }}</a-button>
       </div>
 
       <a-divider />
       <a-list itemLayout="vertical">
         <a-list-item v-for="(ip, index) in secondaryIPs" :key="index">
           <a-popconfirm
-            title="Release IP?"
+            :title="`${$t('label.action.release.ip')}?`"
             @confirm="removeSecondaryIP(ip.id)"
-            okText="Yes"
-            cancelText="No"
+            :okText="$t('label.yes')"
+            :cancelText="$t('label.no')"
           >
             <a-button
               type="danger"
@@ -359,20 +359,20 @@ export default {
       api('addNicToVirtualMachine', params).then(response => {
         this.$pollJob({
           jobId: response.addnictovirtualmachineresponse.jobid,
-          successMessage: `Successfully added network`,
+          successMessage: this.$t('message.success.add.network'),
           successMethod: () => {
             this.loadingNic = false
             this.closeModals()
             this.parentFetchData()
           },
-          errorMessage: 'Adding network failed',
+          errorMessage: this.$t('message.add.network.failed'),
           errorMethod: () => {
             this.loadingNic = false
             this.closeModals()
             this.parentFetchData()
           },
-          loadingMessage: `Adding network...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.network.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.closeModals()
@@ -392,18 +392,18 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.updatedefaultnicforvirtualmachineresponse.jobid,
-          successMessage: `Successfully set ${item.networkname} to default. Please manually update the default NIC on the VM now.`,
+          successMessage: `${this.$t('label.success.set')} ${item.networkname} ${this.$t('label.to.default')}. ${this.$t('message.set.default.nic.manual')}.`,
           successMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
           },
-          errorMessage: `Error setting ${item.networkname} to default`,
+          errorMessage: `${this.$t('label.error.setting')} ${item.networkname} ${this.$t('label.to.default')}`,
           errorMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
           },
-          loadingMessage: `Setting ${item.networkname} to default...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: `${this.$t('label.setting')} ${item.networkname} ${this.$t('label.to.default')}...`,
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
@@ -423,20 +423,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.updatevmnicipresponse.jobid,
-          successMessage: `Successfully updated IP Address`,
+          successMessage: this.$t('message.success.update.ipaddress'),
           successMethod: () => {
             this.loadingNic = false
             this.closeModals()
             this.parentFetchData()
           },
-          errorMessage: `Error`,
+          errorMessage: this.$t('label.error'),
           errorMethod: () => {
             this.loadingNic = false
             this.closeModals()
             this.parentFetchData()
           },
-          loadingMessage: `Updating IP Address...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.update.ipaddress.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.closeModals()
@@ -458,18 +458,18 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.removenicfromvirtualmachineresponse.jobid,
-          successMessage: `Successfully removed`,
+          successMessage: this.$t('message.success.remove.nic'),
           successMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
           },
-          errorMessage: `There was an error`,
+          errorMessage: this.$t('message.error.remove.nic'),
           errorMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
           },
-          loadingMessage: `Removing NIC...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.nic.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.parentFetchData()
@@ -493,20 +493,20 @@ export default {
       api('addIpToNic', params).then(response => {
         this.$pollJob({
           jobId: response.addiptovmnicresponse.jobid,
-          successMessage: `Successfully added secondary IP Address`,
+          successMessage: this.$t('message.success.add.secondary.ipaddress'),
           successMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
             this.parentFetchData()
           },
-          errorMessage: `There was an error adding the secondary IP Address`,
+          errorMessage: this.$t('message.error.add.secondary.ipaddress'),
           errorMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
             this.parentFetchData()
           },
-          loadingMessage: `Add Secondary IP address...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.secondary.ipaddress.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
@@ -524,20 +524,20 @@ export default {
       api('removeIpFromNic', { id }).then(response => {
         this.$pollJob({
           jobId: response.removeipfromnicresponse.jobid,
-          successMessage: `Successfully removed secondary IP Address`,
+          successMessage: this.$t('message.success.remove.secondary.ipaddress'),
           successMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
             this.parentFetchData()
           },
-          errorMessage: `There was an error removing the secondary IP Address`,
+          errorMessage: this.$t('message.error.remove.secondary.ipaddress'),
           errorMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
             this.parentFetchData()
           },
-          loadingMessage: `Removing Secondary IP address...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.secondary.ipaddress.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loadingNic = false
             this.fetchSecondaryIPs(this.selectedNicId)
diff --git a/src/views/compute/KubernetesServiceTab.vue b/src/views/compute/KubernetesServiceTab.vue
index eafd80b..869dc03 100644
--- a/src/views/compute/KubernetesServiceTab.vue
+++ b/src/views/compute/KubernetesServiceTab.vue
@@ -26,7 +26,7 @@
         <DetailsTab :resource="resource" :loading="loading" />
       </a-tab-pane>
       <a-tab-pane :tab="$t('label.access')" key="access">
-        <a-card title="Kubernetes Cluster Config" :loading="this.versionLoading">
+        <a-card :title="$t('label.kubeconfig.cluster')" :loading="this.versionLoading">
           <div v-if="this.clusterConfig !== ''">
             <a-textarea :value="this.clusterConfig" :rows="5" readonly />
             <div :span="24" class="action-button">
@@ -34,62 +34,61 @@
             </div>
           </div>
           <div v-else>
-            <p>Kubernetes cluster kubeconfig not available currently</p>
+            <p>{{ $t('message.kubeconfig.cluster.not.available') }}</p>
           </div>
         </a-card>
-        <a-card title="Using CLI" :loading="this.versionLoading">
+        <a-card :title="$t('label.using.cli')" :loading="this.versionLoading">
           <a-timeline>
             <a-timeline-item>
               <p>
-                Download kubeconfig for the cluster<br><br>
-                The <code>kubectl</code> command-line tool uses kubeconfig files to find the information it needs to choose a cluster and communicate with the API server of a cluster.
+                {{ $t('label.download.kubeconfig.cluster') }}
               </p>
             </a-timeline-item>
             <a-timeline-item>
               <p>
-                Download <code>kubectl</code> tool for cluster's Kubernetes version<br><br>
-                Linux: <a :href="this.kubectlLinuxLink">{{ this.kubectlLinuxLink }}</a><br>
-                MacOS: <a :href="this.kubectlMacLink">{{ this.kubectlMacLink }}</a><br>
-                Windows: <a :href="this.kubectlWindowsLink">{{ this.kubectlWindowsLink }}</a>
+                {{ $t('label.download.kubectl') }} <br><br>
+                {{ $t('label.linux') }}: <a :href="this.kubectlLinuxLink">{{ this.kubectlLinuxLink }}</a><br>
+                {{ $t('label.macos') }}: <a :href="this.kubectlMacLink">{{ this.kubectlMacLink }}</a><br>
+                {{ $t('label.windows') }}: <a :href="this.kubectlWindowsLink">{{ this.kubectlWindowsLink }}</a>
               </p>
             </a-timeline-item>
             <a-timeline-item>
               <p>
-                Use <code>kubectl</code> and <code>kubeconfig</code> file to access cluster<br><br>
+                {{ $t('label.use.kubectl.access.cluster') }}<br><br>
                 <code><b>kubectl --kubeconfig /custom/path/kube.conf {COMMAND}</b></code><br><br>
 
-                <em>List pods</em><br>
+                <em>{{ $t('label.list.pods') }}</em><br>
                 <code>kubectl --kubeconfig /custom/path/kube.conf get pods --all-namespaces</code><br>
-                <em>List nodes</em><br>
+                <em>{{ $t('label.list.nodes') }}</em><br>
                 <code>kubectl --kubeconfig /custom/path/kube.conf get nodes --all-namespaces</code><br>
-                <em>List services</em><br>
+                <em>{{ $t('label.list.services') }}</em><br>
                 <code>kubectl --kubeconfig /custom/path/kube.conf get services --all-namespaces</code>
               </p>
             </a-timeline-item>
           </a-timeline>
         </a-card>
-        <a-card title="Kubernetes Dashboard UI">
+        <a-card :title="$t('label.kubernetes.dashboard')">
           <a-timeline>
             <a-timeline-item>
               <p>
-                Run proxy locally<br><br>
+                {{ $t('label.run.proxy.locally') }}<br><br>
                 <code><b>kubectl --kubeconfig /custom/path/kube.conf proxy</b></code>
               </p>
             </a-timeline-item>
             <a-timeline-item>
               <p>
-                Open URL in browser<br><br>
+                {{ $t('label.open.url') }}<br><br>
                 <a href="http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/"><code>http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/</code></a>
               </p>
             </a-timeline-item>
             <a-timeline-item>
               <p>
-                Token for dashboard login can be retrieved using following command<br><br>
+                {{ $t('label.token.for.dashboard.login') }}<br><br>
                 <code><b>kubectl --kubeconfig /custom/path/kube.conf describe secret $(kubectl --kubeconfig /custom/path/kube.conf get secrets -n kubernetes-dashboard | grep kubernetes-dashboard-token | awk '{print $1}') -n kubernetes-dashboard</b></code>
               </p>
             </a-timeline-item>
           </a-timeline>
-          <p>More about accessing dashboard UI, <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui">https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui</a></p>
+          <p>{{ $t('label.more.access.dashboard.ui') }}, <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui">https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui</a></p>
         </a-card>
       </a-tab-pane>
       <a-tab-pane :tab="$t('label.instances')" key="instances">
@@ -247,8 +246,8 @@ export default {
             this.clusterConfig = config.configdata
           } else {
             this.$notification.error({
-              message: 'Request Failed',
-              description: 'Unable to retrieve Kubernetes cluster config'
+              message: this.$t('message.request.failed'),
+              description: this.$t('message.error.retrieve.kubeconfig')
             })
           }
         }).finally(() => {
diff --git a/src/views/compute/MigrateWizard.vue b/src/views/compute/MigrateWizard.vue
index 97b3268..af305ae 100644
--- a/src/views/compute/MigrateWizard.vue
+++ b/src/views/compute/MigrateWizard.vue
@@ -61,7 +61,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -142,7 +142,7 @@ export default {
           this.totalCount -= 1
         }
       }).catch(error => {
-        this.$message.error('Failed to load hosts: ' + error)
+        this.$message.error(`${this.$t('message.load.host.failed')}: ${error}`)
       }).finally(() => {
         this.loading = false
       })
@@ -154,23 +154,23 @@ export default {
         virtualmachineid: this.resource.id
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Migrating ${this.resource.name}`,
+          title: `${this.$t('label.migrating')} ${this.resource.name}`,
           jobid: response.migratevirtualmachineresponse.jobid,
           description: this.resource.name,
           status: 'progress'
         })
         this.$pollJob({
           jobId: response.migratevirtualmachineresponse.jobid,
-          successMessage: `Migration completed successfully for ${this.resource.name}`,
+          successMessage: `${this.$t('message.success.migrating')} ${this.resource.name}`,
           successMethod: () => {
             this.$parent.$parent.close()
           },
-          errorMessage: 'Migration failed',
+          errorMessage: this.$t('message.migrating.failed'),
           errorMethod: () => {
             this.$parent.$parent.close()
           },
-          loadingMessage: `Migration in progress for ${this.resource.name}`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: `${this.$t('message.migrating.processing')} ${this.resource.name}`,
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.$parent.$parent.close()
           }
@@ -178,7 +178,7 @@ export default {
         this.$parent.$parent.close()
       }).catch(error => {
         console.error(error)
-        this.$message.error(`Failed to migrate VM to host ${this.selectedHost.name}`)
+        this.$message.error(`${this.$t('message.migrating.vm.to.host.failed')} ${this.selectedHost.name}`)
       })
     },
     handleChangePage (page, pageSize) {
diff --git a/src/views/compute/ScaleKubernetesCluster.vue b/src/views/compute/ScaleKubernetesCluster.vue
index 2657e99..fdb747a 100644
--- a/src/views/compute/ScaleKubernetesCluster.vue
+++ b/src/views/compute/ScaleKubernetesCluster.vue
@@ -35,7 +35,7 @@
               rules: [{
                 validator: (rule, value, callback) => {
                   if (value && (isNaN(value) || value <= 0)) {
-                    callback('Please enter a valid number')
+                    callback(this.$t('message.error.number'))
                   }
                   callback()
                 }
@@ -191,9 +191,9 @@ export default {
           })
           this.$pollJob({
             jobId,
-            loadingMessage: `Scale Kubernetes cluster ${this.resource.name} in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
-            successMessage: `Successfully scaled Kubernetes cluster ${this.resource.name}`,
+            loadingMessage: `${this.$t('label.kubernetes.cluster.scale')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+            catchMessage: this.$t('error.fetching.async.job.result'),
+            successMessage: `${this.$t('message.success.scale.kubernetes')} ${this.resource.name}`,
             successMethod: result => {
               this.$emit('refresh-data')
             }
diff --git a/src/views/compute/ScaleVM.vue b/src/views/compute/ScaleVM.vue
index 1bff110..907db61 100644
--- a/src/views/compute/ScaleVM.vue
+++ b/src/views/compute/ScaleVM.vue
@@ -187,16 +187,16 @@ export default {
               jobId,
               successMethod: result => {
                 this.$notification.success({
-                  message: 'Successfully changed offering'
+                  message: this.$t('message.success.change.offering')
                 })
               },
-              loadingMessage: 'Scale in progress',
-              catchMessage: 'Error encountered while fetching async job result'
+              loadingMessage: this.$t('message.scale.processing'),
+              catchMessage: this.$t('error.fetching.async.job.result')
             })
           }
         } else {
           this.$notification.success({
-            message: 'Successfully changed offering'
+            message: this.$t('message.success.change.offering')
           })
         }
         this.$parent.$parent.close()
diff --git a/src/views/compute/UpgradeKubernetesCluster.vue b/src/views/compute/UpgradeKubernetesCluster.vue
index cd0a70b..a297981 100644
--- a/src/views/compute/UpgradeKubernetesCluster.vue
+++ b/src/views/compute/UpgradeKubernetesCluster.vue
@@ -163,12 +163,11 @@ export default {
           })
           this.$pollJob({
             jobId,
-            loadingMessage: `Upgrade Kubernetes cluster ${this.resource.name} in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
-            successMessage: `Successfully upgraded Kubernetes cluster ${this.resource.name}`,
+            loadingMessage: `${this.$t('label.kubernetes.cluster.upgrade')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+            catchMessage: this.$t('error.fetching.async.job.result'),
+            successMessage: `${this.$t('message.success.upgrade.kubernetes')} ${this.resource.name}`,
             successMethod: result => {
               this.$emit('refresh-data')
-              console.log('hello!')
             }
           })
         }).catch(error => {
diff --git a/src/views/compute/backup/BackupSchedule.vue b/src/views/compute/backup/BackupSchedule.vue
index 64ffa61..daf31cc 100644
--- a/src/views/compute/backup/BackupSchedule.vue
+++ b/src/views/compute/backup/BackupSchedule.vue
@@ -48,10 +48,10 @@
       </div>
       <div slot="interval" slot-scope="text, record">
         <span v-if="record.intervaltype==='WEEKLY'">
-          {{ $t('label.interval.weekly').replace('{number}', $t(listDayOfWeek[record.schedule.split(':')[2] - 1])) }}
+          {{ `${$t('label.every')} ${$t(listDayOfWeek[record.schedule.split(':')[2] - 1])}` }}
         </span>
         <span v-else-if="record.intervaltype==='MONTHLY'">
-          {{ $t('label.interval.monthly').replace('{number}', record.schedule.split(':')[2]) }}
+          {{ `${$t('label.day')} ${record.schedule.split(':')[2]} ${$t('label.of.month')}` }}
         </span>
       </div>
       <div slot="timezone" slot-scope="text, record">
@@ -159,7 +159,7 @@ export default {
         if (json.deletebackupscheduleresponse.success) {
           this.$notification.success({
             message: this.$t('label.scheduled.backups'),
-            description: 'Successfully deleted Configure VM backup schedule'
+            description: this.$t('message.success.delete.backup.schedule')
           })
         }
         this.refreshSchedule()
diff --git a/src/views/compute/backup/FormSchedule.vue b/src/views/compute/backup/FormSchedule.vue
index 0a2654c..c30b3e2 100644
--- a/src/views/compute/backup/FormSchedule.vue
+++ b/src/views/compute/backup/FormSchedule.vue
@@ -58,7 +58,7 @@
                   <a-input-number
                     style="width: 100%"
                     v-decorator="['time', {
-                      rules: [{required: true, message: 'Please enter input'}]
+                      rules: [{required: true, message: $t('message.error.required.input')}]
                     }]"
                     :min="1"
                     :max="59"/>
@@ -76,7 +76,7 @@
                     rules: [{
                       type: 'object',
                       required: true,
-                      message: 'Please select time'
+                      message: $t('message.error.time')
                     }]
                   }]" />
               </a-form-item>
@@ -269,7 +269,7 @@ export default {
         api('createBackupSchedule', params).then(json => {
           this.$notification.success({
             message: this.$t('label.scheduled.backups'),
-            description: 'Successfully Configure VM backup schedule'
+            description: this.$t('message.success.config.backup.schedule')
           })
           this.refreshSchedule()
           this.resetForm()
diff --git a/src/views/compute/wizard/AffinityGroupSelection.vue b/src/views/compute/wizard/AffinityGroupSelection.vue
index 23535ad..08567f8 100644
--- a/src/views/compute/wizard/AffinityGroupSelection.vue
+++ b/src/views/compute/wizard/AffinityGroupSelection.vue
@@ -41,7 +41,7 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="rowCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/compute/wizard/ComputeOfferingSelection.vue b/src/views/compute/wizard/ComputeOfferingSelection.vue
index 518b6a6..271d1fb 100644
--- a/src/views/compute/wizard/ComputeOfferingSelection.vue
+++ b/src/views/compute/wizard/ComputeOfferingSelection.vue
@@ -41,7 +41,7 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="rowCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/compute/wizard/ComputeSelection.vue b/src/views/compute/wizard/ComputeSelection.vue
index c70193f..bd5ee02 100644
--- a/src/views/compute/wizard/ComputeSelection.vue
+++ b/src/views/compute/wizard/ComputeSelection.vue
@@ -228,7 +228,7 @@ export default {
 
       if (!this.checkValidRange(value, min, max)) {
         this.errors[input].status = 'error'
-        this.errors[input].message = this.$t('message.error.invalid.range', { min: min, max: max })
+        this.errors[input].message = `${this.$t('message.please.enter.value')} ${this.$t('label.from')} ${min} ${this.$t('label.to')} ${max})`
         return false
       }
 
diff --git a/src/views/compute/wizard/DiskOfferingSelection.vue b/src/views/compute/wizard/DiskOfferingSelection.vue
index e52b09b..5a3023b 100644
--- a/src/views/compute/wizard/DiskOfferingSelection.vue
+++ b/src/views/compute/wizard/DiskOfferingSelection.vue
@@ -52,7 +52,7 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="rowCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/compute/wizard/DiskSizeSelection.vue b/src/views/compute/wizard/DiskSizeSelection.vue
index 319cf6e..dcea640 100644
--- a/src/views/compute/wizard/DiskSizeSelection.vue
+++ b/src/views/compute/wizard/DiskSizeSelection.vue
@@ -81,7 +81,7 @@ export default {
     updateDiskSize (value) {
       if (value < this.minDiskSize) {
         this.inputValue = this.minDiskSize
-        this.error = 'The value must not be less than ' + this.minDiskSize + ' GB'
+        this.error = `${this.$t('message.error.limit.value')} ` + this.minDiskSize + ' GB'
         return
       }
       this.error = false
diff --git a/src/views/compute/wizard/NetworkSelection.vue b/src/views/compute/wizard/NetworkSelection.vue
index ef9aed9..4a011d0 100644
--- a/src/views/compute/wizard/NetworkSelection.vue
+++ b/src/views/compute/wizard/NetworkSelection.vue
@@ -57,7 +57,7 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="rowCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/compute/wizard/SshKeyPairSelection.vue b/src/views/compute/wizard/SshKeyPairSelection.vue
index 9f95a81..cd5e29e 100644
--- a/src/views/compute/wizard/SshKeyPairSelection.vue
+++ b/src/views/compute/wizard/SshKeyPairSelection.vue
@@ -40,7 +40,7 @@
         :current="options.page"
         :pageSize="options.pageSize"
         :total="rowCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/compute/wizard/TemplateIsoRadioGroup.vue b/src/views/compute/wizard/TemplateIsoRadioGroup.vue
index 15f7921..2423c95 100644
--- a/src/views/compute/wizard/TemplateIsoRadioGroup.vue
+++ b/src/views/compute/wizard/TemplateIsoRadioGroup.vue
@@ -48,7 +48,7 @@
         :current="page"
         :pageSize="pageSize"
         :total="itemCount"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100', '500']"
         @change="onChangePage"
         @showSizeChange="onChangePageSize"
diff --git a/src/views/dashboard/CapacityDashboard.vue b/src/views/dashboard/CapacityDashboard.vue
index 7e55992..07bb14e 100644
--- a/src/views/dashboard/CapacityDashboard.vue
+++ b/src/views/dashboard/CapacityDashboard.vue
@@ -109,7 +109,7 @@
                 :key="event.id"
                 :color="getEventColour(event)">
                 <span :style="{ color: '#999' }"><small>{{ event.created }}</small></span><br/>
-                <span :style="{ color: '#666' }"><small>{{ event.type }}</small></span><br/>
+                <span :style="{ color: '#666' }"><small>{{ $t(event.type.toLowerCase()) }}</small></span><br/>
                 <span :style="{ color: '#aaa' }">({{ event.username }}) {{ event.description }}</span>
               </a-timeline-item>
             </a-timeline>
diff --git a/src/views/dashboard/UsageDashboard.vue b/src/views/dashboard/UsageDashboard.vue
index bc2ebcc..a448032 100644
--- a/src/views/dashboard/UsageDashboard.vue
+++ b/src/views/dashboard/UsageDashboard.vue
@@ -187,14 +187,14 @@ export default {
         if (json && json.listvolumesresponse) {
           count = json.listvolumesresponse.count
         }
-        this.stats.splice(3, 1, { name: 'Total Volumes', count: count, icon: 'database', path: '/volume' })
+        this.stats.splice(3, 1, { name: this.$t('label.total.volume'), count: count, icon: 'database', path: '/volume' })
       })
       api('listNetworks', { listall: true }).then(json => {
         var count = 0
         if (json && json.listnetworksresponse) {
           count = json.listnetworksresponse.count
         }
-        this.stats.splice(4, 1, { name: 'Total Networks', count: count, icon: 'apartment', path: '/guestnetwork' })
+        this.stats.splice(4, 1, { name: this.$t('label.total.network'), count: count, icon: 'apartment', path: '/guestnetwork' })
       })
       api('listPublicIpAddresses', { listall: true }).then(json => {
         var count = 0
diff --git a/src/views/exception/ExceptionPage.vue b/src/views/exception/ExceptionPage.vue
index 841d78e..97c22d4 100644
--- a/src/views/exception/ExceptionPage.vue
+++ b/src/views/exception/ExceptionPage.vue
@@ -48,7 +48,7 @@
       <h1>{{ config[type].title }}</h1>
       <div class="desc">{{ config[type].desc }}</div>
       <div class="action">
-        <a-button type="primary" @click="handleToHome">Go Back</a-button>
+        <a-button type="primary" @click="handleToHome">{{ $t('label.go.back') }}</a-button>
       </div>
     </div>
   </div>
diff --git a/src/views/iam/AddAccount.vue b/src/views/iam/AddAccount.vue
index 2c9130d..0809437 100644
--- a/src/views/iam/AddAccount.vue
+++ b/src/views/iam/AddAccount.vue
@@ -207,8 +207,8 @@
           </a-form-item>
         </div>
         <div :span="24" class="action-button">
-          <a-button @click="closeAction">{{ this.$t('Cancel') }}</a-button>
-          <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+          <a-button @click="closeAction">{{ $t('label.cancel') }}</a-button>
+          <a-button :loading="loading" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button>
         </div>
       </a-form>
     </a-spin>
@@ -295,7 +295,7 @@ export default {
         this.selectedDomain = this.domainsList[0].id || ''
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext
         })
       }).finally(() => {
@@ -358,8 +358,8 @@ export default {
         api('createAccount', params).then(response => {
           this.$emit('refresh-data')
           this.$notification.success({
-            message: 'Create Account',
-            description: 'Successfully created account ' + params.username
+            message: this.$t('label.create.account'),
+            description: `${this.$t('message.success.create.account')} ${params.username}`
           })
           const users = response.createaccountresponse.account.user
           if (values.samlenable && users) {
@@ -371,11 +371,11 @@ export default {
               }).then(response => {
                 this.$notification.success({
                   message: this.$t('samlenable'),
-                  description: 'Successfully enabled SAML Authorization'
+                  description: this.$t('message.success.enable.saml.auth')
                 })
               }).catch(error => {
                 this.$notification.error({
-                  message: 'Request Failed',
+                  message: this.$t('message.request.failed'),
                   description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
                   duration: 0
                 })
@@ -387,7 +387,7 @@ export default {
           }
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
             duration: 0
           })
diff --git a/src/views/iam/AddLdapAccount.vue b/src/views/iam/AddLdapAccount.vue
index e41c11a..feb244e 100644
--- a/src/views/iam/AddLdapAccount.vue
+++ b/src/views/iam/AddLdapAccount.vue
@@ -122,7 +122,7 @@
                     initialValue: selectedIdp,
                     rules: [{ required: samlEnable, message: `${this.$t('message.error.select')}` }]
                   }]"
-                  placeholder="Choose SAML identity provider"
+                  :placeholder="$t('label.choose.saml.indentity')"
                   :loading="loading">
                   <a-select-option v-for="(idp, idx) in listIdps" :key="idx">
                     {{ idp.orgName }}
@@ -210,7 +210,7 @@ export default {
         scopedSlots: { customRender: 'email' }
       },
       {
-        title: this.$t('Conflict'),
+        title: this.$t('label.user.conflict'),
         dataIndex: 'conflictingusersource',
         scopedSlots: { customRender: 'conflictingusersource' }
       }
@@ -387,8 +387,8 @@ export default {
               }
             } else if (apiName === 'importLdapUsers' && response.ldapuserresponse && values.samlEnable) {
               this.$notification.error({
-                message: 'Request Failed',
-                description: 'Unable to find users IDs to enable SAML Single Sign On, kindly enable it manually.'
+                message: this.$t('message.request.failed'),
+                description: this.$t('message.error.enable.saml')
               })
             } else {
               if (apiName === 'ldapCreateAccount') {
diff --git a/src/views/iam/ChangeUserPassword.vue b/src/views/iam/ChangeUserPassword.vue
index c98def5..0f7247d 100644
--- a/src/views/iam/ChangeUserPassword.vue
+++ b/src/views/iam/ChangeUserPassword.vue
@@ -31,7 +31,7 @@
           </span>
           <a-input-password
             v-decorator="['currentpassword', {
-              rules: [{ required: true, message: 'Please enter current password' }]
+              rules: [{ required: true, message: $t('message.error.current.password') }]
             }]"
             :placeholder="apiParams.currentpassword.description"/>
         </a-form-item>
@@ -44,7 +44,7 @@
           </span>
           <a-input-password
             v-decorator="['password', {
-              rules: [{ required: true, message: 'Please enter new password' }]
+              rules: [{ required: true, message: $t('message.error.new.password') }]
             }]"
             :placeholder="apiParams.password.description"/>
         </a-form-item>
@@ -60,7 +60,7 @@
               rules: [
                 {
                   required: true,
-                  message: 'Please confirm new password'
+                  message: $t('message.error.confirm.password')
                 },
                 {
                   validator: validateTwoPassword
@@ -143,7 +143,7 @@ export default {
         api('updateUser', params).then(json => {
           this.$notification.success({
             message: this.$t('label.action.change.password'),
-            description: 'Successfully changed password for user "' + this.resource.username + '"'
+            description: `${this.$t('message.success.change.password')} ${this.resource.username}`
           })
         }).catch(error => {
           this.$notifyError(error)
diff --git a/src/views/iam/ConfigureSamlSsoAuth.vue b/src/views/iam/ConfigureSamlSsoAuth.vue
index d8e213a..5775600 100644
--- a/src/views/iam/ConfigureSamlSsoAuth.vue
+++ b/src/views/iam/ConfigureSamlSsoAuth.vue
@@ -38,7 +38,7 @@
         </a-select>
       </a-form-item>
       <div class="card-footer">
-        <a-button @click="handleClose">{{ $t('Close') }}</a-button>
+        <a-button @click="handleClose">{{ $t('label.close') }}</a-button>
         <a-button :loading="loading" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button>
       </div>
     </a-form>
@@ -102,12 +102,12 @@ export default {
         }).then(response => {
           this.$notification.success({
             message: values.samlEnable ? this.$t('label.saml.enable') : this.$t('label.saml.disable'),
-            description: values.samlEnable ? `Successfully enabled SAML Authorization for ${this.resource.username}`
-              : `Successfully disabled SAML Authorization for ${this.resource.username}`
+            description: values.samlEnable ? `${this.$t('message.success.enable.saml.auth')} ${this.$t('label.for')} ${this.resource.username}`
+              : `${this.$t('message.success.disable.saml.auth')} ${this.$t('label.for')} ${this.resource.username}`
           })
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message,
             duration: 0
           })
diff --git a/src/views/iam/DomainActionForm.vue b/src/views/iam/DomainActionForm.vue
index a9f3a5c..e8c225e 100644
--- a/src/views/iam/DomainActionForm.vue
+++ b/src/views/iam/DomainActionForm.vue
@@ -169,8 +169,8 @@ export default {
           }
         },
         errorMethod: () => this.parentFetchData(),
-        loadingMessage: `${this.$t(action.label)} in progress for ${this.resource.name}`,
-        catchMessage: 'Error encountered while fetching async job result',
+        loadingMessage: `${this.$t(action.label)} ${this.$t('label.in.progress')} ${this.$t('label.for')} ${this.resource.name}`,
+        catchMessage: this.$t('error.fetching.async.job.result'),
         action
       })
     },
@@ -255,7 +255,7 @@ export default {
           }
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }).finally(f => {
diff --git a/src/views/iam/DomainView.vue b/src/views/iam/DomainView.vue
index eaa9f3c..b019037 100644
--- a/src/views/iam/DomainView.vue
+++ b/src/views/iam/DomainView.vue
@@ -176,7 +176,7 @@ export default {
         this.treeSelected = domains[0] || {}
       }).catch(error => {
         this.$notification.error({
-          message: 'Request Failed',
+          message: this.$t('message.request.failed'),
           description: error.response.headers['x-description'],
           duration: 0
         })
diff --git a/src/views/iam/PermissionEditable.vue b/src/views/iam/PermissionEditable.vue
index 3fe75e5..df70749 100644
--- a/src/views/iam/PermissionEditable.vue
+++ b/src/views/iam/PermissionEditable.vue
@@ -19,8 +19,8 @@
   <a-select
     :value="defaultValue"
     @change="handleChange">
-    <a-select-option value="allow">Allow</a-select-option>
-    <a-select-option value="deny">Deny</a-select-option>
+    <a-select-option value="allow">{{ $t('label.allow') }}</a-select-option>
+    <a-select-option value="deny">{{ $t('label.deny') }}</a-select-option>
   </a-select>
 </template>
 
diff --git a/src/views/iam/RolePermissionTab.vue b/src/views/iam/RolePermissionTab.vue
index abdf36f..3e63daf 100644
--- a/src/views/iam/RolePermissionTab.vue
+++ b/src/views/iam/RolePermissionTab.vue
@@ -48,13 +48,13 @@
             @change="onPermissionChange(null, $event)" />
         </div>
         <div class="rules-table__col rules-table__col--description">
-          <a-input v-model="newRuleDescription" placeholder="Description"></a-input>
+          <a-input v-model="newRuleDescription" :placeholder="$t('label.description')"></a-input>
         </div>
         <div class="rules-table__col rules-table__col--actions">
           <a-tooltip
             placement="bottom">
             <template slot="title">
-              Save new Rule
+              {{ $t('label.save.new.rule') }}
             </template>
             <a-button
               :disabled="!('createRolePermission' in $store.getters.apis)"
@@ -96,7 +96,7 @@
                 {{ record.description }}
               </template>
               <div v-else class="no-description">
-                No description entered.
+                {{ $t('message.no.description') }}
               </div>
             </div>
             <div class="rules-table__col rules-table__col--actions">
diff --git a/src/views/iam/RuleDelete.vue b/src/views/iam/RuleDelete.vue
index cb10b4b..53c8310 100644
--- a/src/views/iam/RuleDelete.vue
+++ b/src/views/iam/RuleDelete.vue
@@ -18,10 +18,10 @@
 <template>
   <a-tooltip placement="bottom">
     <template slot="title">
-      Delete rule
+      {{ $t('label.delete.rule') }}
     </template>
     <a-popconfirm
-      title="Delete Rule?"
+      :title="`${$t('label.delete.rule')}?`"
       @confirm="handleDelete"
       :disabled="disabled">
       <a-button type="danger" shape="circle" :disabled="disabled">
diff --git a/src/views/iam/SSLCertificateTab.vue b/src/views/iam/SSLCertificateTab.vue
index f853a3d..1524f74 100644
--- a/src/views/iam/SSLCertificateTab.vue
+++ b/src/views/iam/SSLCertificateTab.vue
@@ -182,7 +182,8 @@ export default {
       params.id = row.id
 
       // show loading
-      const loading = this.$message.loading('Delete certificate in progress for ' + row.name, 0)
+      const message = `${this.$t('label.delete.certificate')} ${this.$t('label.in.progress.for')} ${row.name}`
+      const loading = this.$message.loading(message, 0)
 
       api('deleteSslCert', params).then(json => {
         const jsonResponse = json.deletesslcertresponse
@@ -191,10 +192,10 @@ export default {
         setTimeout(loading)
 
         if (jsonResponse.success) {
-          this.$message.success('Delete success', 3)
+          this.$message.success(this.$t('message.success.delete'), 3)
           this.fetchData()
         } else {
-          this.$message.error('Delete fail', 3)
+          this.$message.error(this.$t('message.delete.failed'), 3)
         }
       }).catch(error => {
         // hide loading
@@ -206,14 +207,13 @@ export default {
     },
     onShowConfirm (row) {
       const self = this
-      let title = this.$t('label.deleteconfirm')
-      title = title.replace('{name}', this.$t('label.certificate'))
+      const title = `${this.$t('label.deleteconfirm')} ${this.$t('label.certificate')}`
 
       this.$confirm({
         title: title,
-        okText: 'OK',
+        okText: this.$t('label.ok'),
         okType: 'danger',
-        cancelText: 'Cancel',
+        cancelText: this.$t('label.cancel'),
         onOk () {
           self.onDelete(row)
         }
diff --git a/src/views/image/AddKubernetesSupportedVersion.vue b/src/views/image/AddKubernetesSupportedVersion.vue
index ef97b01..297e899 100644
--- a/src/views/image/AddKubernetesSupportedVersion.vue
+++ b/src/views/image/AddKubernetesSupportedVersion.vue
@@ -31,7 +31,7 @@
           </span>
           <a-input
             v-decorator="['semanticversion', {
-              rules: [{ required: true, message: 'Please enter Kubernetes semantic version' }]
+              rules: [{ required: true, message: $t('message.error.kuberversion') }]
             }]"
             :placeholder="apiParams.semanticversion.description"/>
         </a-form-item>
@@ -44,7 +44,7 @@
           </span>
           <a-input
             v-decorator="['name', {
-              rules: [{ message: 'Please enter name' }]
+              rules: [{ message: $t('message.error.name') }]
             }]"
             :placeholder="$t('label.name')"/>
         </a-form-item>
@@ -62,7 +62,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback('All Zones cannot be combined with any other zone')
+                      callback(this.$t('message.error.zone.combined'))
                     }
                     callback()
                   }
@@ -90,7 +90,7 @@
           </span>
           <a-input
             v-decorator="['url', {
-              rules: [{ required: true, message: 'Please enter binaries ISO URL' }]
+              rules: [{ required: true, message: $t('message.error.binaries.iso.url') }]
             }]"
             :placeholder="apiParams.url.description" />
         </a-form-item>
@@ -103,7 +103,7 @@
           </span>
           <a-input
             v-decorator="['checksum', {
-              rules: [{ required: false, message: 'Please enter input' }]
+              rules: [{ required: false, message: $t('message.error.required.input') }]
             }]"
             :placeholder="apiParams.checksum.description" />
         </a-form-item>
@@ -116,11 +116,11 @@
           </span>
           <a-input
             v-decorator="['mincpunumber', {
-              rules: [{ required: true, message: 'Please enter value' },
+              rules: [{ required: true, message: $t('message.please.enter.value') },
                       {
                         validator: (rule, value, callback) => {
                           if (value && (isNaN(value) || value <= 0)) {
-                            callback('Please enter a valid number')
+                            callback(this.$t('message.validate.number'))
                           }
                           callback()
                         }
@@ -138,11 +138,11 @@
           </span>
           <a-input
             v-decorator="['minmemory', {
-              rules: [{ required: true, message: 'Please enter value' },
+              rules: [{ required: true, message: $t('message.please.enter.value') },
                       {
                         validator: (rule, value, callback) => {
                           if (value && (isNaN(value) || value <= 0)) {
-                            callback('Please enter a valid number')
+                            callback(this.$t('message.validate.number'))
                           }
                           callback()
                         }
@@ -246,7 +246,7 @@ export default {
           params.minmemory = values.minmemory
         }
         api('addKubernetesSupportedVersion', params).then(json => {
-          this.$message.success('Successfully added Kubernetes version: ' + values.semanticversion)
+          this.$message.success(`${this.$t('message.success.add.kuberversion')}: ${values.semanticversion}`)
         }).catch(error => {
           this.$notifyError(error)
         }).finally(() => {
diff --git a/src/views/image/IsoZones.vue b/src/views/image/IsoZones.vue
index 4145ef9..91db6c5 100644
--- a/src/views/image/IsoZones.vue
+++ b/src/views/image/IsoZones.vue
@@ -62,7 +62,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="itemCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -259,8 +259,8 @@ export default {
             }
           },
           errorMethod: () => this.fetchData(),
-          loadingMessage: `Deleting ISO ${this.resource.name} in progress`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.deleting.iso')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       }).catch(error => {
         this.$notifyError(error)
@@ -317,12 +317,12 @@ export default {
               this.fetchData()
             },
             errorMethod: () => this.fetchData(),
-            loadingMessage: `Copy ISO ${this.resource.name} in progress`,
-            catchMessage: 'Error encountered while fetching async job result'
+            loadingMessage: `${this.$t('label.action.copy.iso')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+            catchMessage: this.$t('error.fetching.async.job.result')
           })
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }).finally(() => {
diff --git a/src/views/image/RegisterOrUploadIso.vue b/src/views/image/RegisterOrUploadIso.vue
index 1af1120..96fe426 100644
--- a/src/views/image/RegisterOrUploadIso.vue
+++ b/src/views/image/RegisterOrUploadIso.vue
@@ -19,7 +19,7 @@
   <div class="form-layout">
     <span v-if="uploadPercentage > 0">
       <a-icon type="loading" />
-      Do not close this form, file upload is in progress...
+      {{ $t('message.upload.file.processing') }}
       <a-progress :percent="uploadPercentage" />
     </span>
     <a-spin :spinning="loading" v-else>
@@ -47,7 +47,7 @@
               <a-icon type="cloud-upload" />
             </p>
             <p class="ant-upload-text" v-if="fileList.length === 0">
-              Click or drag file to this area to upload
+              {{ $t('label.volume.volumefileupload.description') }}
             </p>
           </a-upload-dragger>
         </a-form-item>
@@ -265,8 +265,8 @@ export default {
       const { fileList } = this
       if (this.fileList.length > 1) {
         this.$notification.error({
-          message: 'ISO Upload Failed',
-          description: 'Only one ISO can be uploaded at a time',
+          message: this.$t('message.upload.iso.failed'),
+          description: this.$t('message.error.upload.iso.description'),
           duration: 0
         })
       }
@@ -290,14 +290,14 @@ export default {
           timeout: 86400000
         }).then((json) => {
         this.$notification.success({
-          message: 'Upload Successful',
-          description: 'This ISO file has been uploaded. Please check its status at Templates menu'
+          message: this.$t('message.success.upload'),
+          description: this.$t('message.success.upload.description')
         })
         this.closeAction()
       }).catch(e => {
         this.$notification.error({
-          message: 'Upload Failed',
-          description: `Failed to upload ISO -  ${e}`,
+          message: this.$t('message.upload.failed'),
+          description: `${this.$t('message.upload.iso.failed.description')} -  ${e}`,
           duration: 0
         })
         this.closeAction()
@@ -338,8 +338,8 @@ export default {
           api('registerIso', params).then(json => {
             this.$emit('refresh-data')
             this.$notification.success({
-              message: this.$t('label.action.register.iso'),
-              description: 'Sucessfully registered ISO ' + params.name
+              message: 'label.action.register.iso',
+              description: `${this.$t('message.success.register.iso')} ${params.name}`
             })
           }).catch(error => {
             this.$notifyError(error)
@@ -358,8 +358,8 @@ export default {
             const response = this.handleUpload()
             if (response === 'upload successful') {
               this.$notification.success({
-                message: 'Upload Successful',
-                description: 'This ISO file has been uploaded. Please check its status in the Images > ISOs menu'
+                message: this.$t('message.success.upload'),
+                description: this.$t('message.success.upload.iso.description')
               })
             }
           }).catch(error => {
diff --git a/src/views/image/RegisterOrUploadTemplate.vue b/src/views/image/RegisterOrUploadTemplate.vue
index 335dfa9..9ee0348 100644
--- a/src/views/image/RegisterOrUploadTemplate.vue
+++ b/src/views/image/RegisterOrUploadTemplate.vue
@@ -19,7 +19,7 @@
   <div class="form-layout">
     <span v-if="uploadPercentage > 0">
       <a-icon type="loading" />
-      Do not close this form, file upload is in progress...
+      {{ $t('message.upload.file.processing') }}
       <a-progress :percent="uploadPercentage" />
     </span>
     <a-spin :spinning="loading" v-else>
@@ -52,7 +52,7 @@
                 <a-icon type="cloud-upload" />
               </p>
               <p class="ant-upload-text" v-if="fileList.length === 0">
-                Click or drag file to this area to upload
+                {{ $t('label.volume.volumefileupload.description') }}
               </p>
             </a-upload-dragger>
           </a-form-item>
@@ -476,14 +476,14 @@ export default {
           timeout: 86400000
         }).then((json) => {
         this.$notification.success({
-          message: 'Upload Successful',
-          description: 'This template file has been uploaded. Please check its status at Templates menu'
+          message: this.$t('message.success.upload'),
+          description: this.$t('message.success.upload.template.description')
         })
         this.closeAction()
       }).catch(e => {
         this.$notification.error({
-          message: 'Upload Failed',
-          description: `Failed to upload Template -  ${e}`,
+          message: this.$t('message.upload.failed'),
+          description: `${this.$t('message.upload.template.failed.description')} -  ${e}`,
           duration: 0
         })
         this.closeAction()
@@ -854,8 +854,8 @@ export default {
           api('registerTemplate', params).then(json => {
             this.$emit('refresh-data')
             this.$notification.success({
-              message: 'Register Template',
-              description: 'Successfully registered template ' + params.name
+              message: this.$t('label.register.template'),
+              description: `${this.$t('message.success.register.template')} ${params.name}`
             })
           }).catch(error => {
             this.$notifyError(error)
@@ -867,8 +867,8 @@ export default {
           this.loading = true
           if (this.fileList.length > 1) {
             this.$notification.error({
-              message: 'Template Upload Failed',
-              description: 'Only one template can be uploaded at a time',
+              message: this.$t('message.error.upload.template'),
+              description: this.$t('message.error.upload.template.description'),
               duration: 0
             })
           }
@@ -894,7 +894,7 @@ export default {
 
       if (allZoneExists.length > 0 && zones.length > 1) {
         this.zoneError = 'error'
-        this.zoneErrorMessage = this.$t('label.error.zone.combined')
+        this.zoneErrorMessage = this.$t('message.error.zone.combined')
       }
     },
     closeAction () {
diff --git a/src/views/image/TemplateZones.vue b/src/views/image/TemplateZones.vue
index 95b1196..e8b0a1c 100644
--- a/src/views/image/TemplateZones.vue
+++ b/src/views/image/TemplateZones.vue
@@ -54,7 +54,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="itemCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -270,8 +270,8 @@ export default {
             }
           },
           errorMethod: () => this.fetchData(),
-          loadingMessage: `Deleting template ${this.resource.name} in progress`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.deleting.template')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       }).catch(error => {
         this.$notifyError(error)
@@ -335,12 +335,12 @@ export default {
               this.fetchData()
             },
             errorMethod: () => this.fetchData(),
-            loadingMessage: `Copy template ${this.resource.name} in progress`,
-            catchMessage: 'Error encountered while fetching async job result'
+            loadingMessage: `${this.$t('label.action.copy.template')} ${this.resource.name} ${this.$t('label.in.progress')}`,
+            catchMessage: this.$t('error.fetching.async.job.result')
           })
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }).finally(() => {
diff --git a/src/views/image/UpdateKubernetesSupportedVersion.vue b/src/views/image/UpdateKubernetesSupportedVersion.vue
index 6ac5d65..bc6a3ae 100644
--- a/src/views/image/UpdateKubernetesSupportedVersion.vue
+++ b/src/views/image/UpdateKubernetesSupportedVersion.vue
@@ -129,7 +129,7 @@ export default {
           params.state = this.states[values.state].id
         }
         api('updateKubernetesSupportedVersion', params).then(json => {
-          this.$message.success('Successfully updated Kubernetes supported version: ' + this.resource.name)
+          this.$message.success(`${this.$t('message.success.update.kubeversion')}: ${this.resource.name}`)
         }).catch(error => {
           this.$notifyError(error)
         }).finally(() => {
diff --git a/src/views/image/UpdateTemplateIsoPermissions.vue b/src/views/image/UpdateTemplateIsoPermissions.vue
index 1e21ae8..3c27235 100644
--- a/src/views/image/UpdateTemplateIsoPermissions.vue
+++ b/src/views/image/UpdateTemplateIsoPermissions.vue
@@ -23,26 +23,26 @@
 
     <div class="form__item">
       <p class="form__label">{{ $t('label.operation') }}</p>
-      <a-select v-model="selectedOperation" defaultValue="Add" @change="fetchData">
+      <a-select v-model="selectedOperation" :defaultValue="$t('label.add')" @change="fetchData">
         <a-select-option :value="$t('label.add')">{{ $t('label.add') }}</a-select-option>
         <a-select-option :value="$t('label.remove')">{{ $t('label.remove') }}</a-select-option>
         <a-select-option :value="$t('label.reset')">{{ $t('label.reset') }}</a-select-option>
       </a-select>
     </div>
 
-    <template v-if="selectedOperation !== 'Reset'">
+    <template v-if="selectedOperation !== $t('label.reset')">
       <div class="form__item">
         <p class="form__label">
           <span class="required">*</span>
           {{ $t('label.sharewith') }}
         </p>
-        <a-select v-model="selectedShareWith" defaultValue="Account" @change="fetchData">
+        <a-select v-model="selectedShareWith" :defaultValue="$t('label.account')" @change="fetchData">
           <a-select-option :value="$t('label.account')">{{ $t('label.account') }}</a-select-option>
           <a-select-option :value="$t('label.project')">{{ $t('label.project') }}</a-select-option>
         </a-select>
       </div>
 
-      <template v-if="selectedShareWith === 'Account'">
+      <template v-if="selectedShareWith === $t('label.account')">
         <div class="form__item">
           <p class="form__label">
             {{ $t('label.account') }}
@@ -55,11 +55,12 @@
               @change="handleChange"
               style="width: 100%">
               <a-select-option v-for="account in accountsList" :key="account.name">
-                {{ account.name }}</a-select-option>
+                {{ account.name }}
+              </a-select-option>
             </a-select>
           </div>
           <div v-else>
-            <a-input v-model="selectedAccountsList" placeholder="Enter comma-separated list of commands"></a-input>
+            <a-input v-model="selectedAccountsList" :placeholder="$t('label.comma.separated.list.description')"></a-input>
           </div>
         </div>
       </template>
@@ -71,12 +72,13 @@
           </p>
           <a-select
             mode="multiple"
-            placeholder="Select Projects"
+            :placeholder="$t('label.select.projects')"
             :value="selectedProjects"
             @change="handleChange"
             style="width: 100%">
             <a-select-option v-for="project in projectsList" :key="project.name">
-              {{ project.name }}</a-select-option>
+              {{ project.name }}
+            </a-select-option>
           </a-select>
         </div>
       </template>
@@ -112,7 +114,7 @@ export default {
       selectedAccounts: [],
       selectedProjects: [],
       selectedAccountsList: '',
-      selectedOperation: 'Add',
+      selectedOperation: this.$t('label.add'),
       selectedShareWith: this.$t('label.account'),
       accountError: false,
       projectError: false,
@@ -125,7 +127,7 @@ export default {
     accountsList () {
       return this.accounts.length > 0 ? this.accounts
         .filter(a =>
-          this.selectedOperation === 'Add'
+          this.selectedOperation === this.$t('label.add')
             ? !this.permittedAccounts.includes(a.name)
             : this.permittedAccounts.includes(a.name)
         ) : this.accounts
@@ -133,7 +135,7 @@ export default {
     projectsList () {
       return this.projects > 0 ? this.projects
         .filter(p =>
-          this.selectedOperation === 'Add'
+          this.selectedOperation === this.$t('label.add')
             ? !this.permittedProjects.includes(p.id)
             : this.permittedProjects.includes(p.id)
         ) : this.projects
@@ -150,7 +152,7 @@ export default {
       } else {
         this.fetchTemplatePermissions()
       }
-      if (this.selectedShareWith === 'Account') {
+      if (this.selectedShareWith === this.$t('label.account')) {
         this.selectedAccounts = []
         this.fetchAccounts()
       } else {
@@ -212,8 +214,8 @@ export default {
       })
     },
     handleChange (selectedItems) {
-      if (this.selectedOperation === 'Add' || this.selectedOperation === 'Remove') {
-        if (this.selectedShareWith === 'Account') {
+      if (this.selectedOperation === this.$t('label.add') || this.selectedOperation === this.$t('label.remove')) {
+        if (this.selectedShareWith === this.$t('label.account')) {
           this.selectedAccounts = selectedItems
         } else {
           this.selectedProjects = selectedItems
@@ -226,7 +228,7 @@ export default {
     submitData () {
       let variableKey = ''
       let variableValue = ''
-      if (this.selectedShareWith === 'Account') {
+      if (this.selectedShareWith === this.$t('label.account')) {
         variableKey = 'accounts'
         if (this.showAccountSelect) {
           variableValue = this.selectedAccounts.map(account => account).join(',')
@@ -250,7 +252,7 @@ export default {
       })
         .then(response => {
           this.$notification.success({
-            message: 'Successfully updated ' + resourceType + ' permissions'
+            message: `${this.$t('label.success.updated')} ${resourceType} ${this.$t('label.permissions')}`
           })
         })
         .catch(error => {
@@ -266,7 +268,6 @@ export default {
 }
 </script>
 <style scoped lang="scss">
-
   .form {
     display: flex;
     flex-direction: column;
diff --git a/src/views/image/UploadLocalIso.vue b/src/views/image/UploadLocalIso.vue
index cb6ebbe..134a9dc 100644
--- a/src/views/image/UploadLocalIso.vue
+++ b/src/views/image/UploadLocalIso.vue
@@ -31,7 +31,7 @@
       <img v-if="imageUrl" :src="imageUrl" alt="avatar" />
       <div v-else>
         <a-icon :type="loading ? 'loading' : 'plus'" />
-        <div class="ant-upload-text">Upload</div>
+        <div class="ant-upload-text">{{ $t('label.upload') }}</div>
       </div>
     </a-upload>
   </div>
diff --git a/src/views/image/UploadLocalTemplate.vue b/src/views/image/UploadLocalTemplate.vue
index ee79a2f..d16443f 100644
--- a/src/views/image/UploadLocalTemplate.vue
+++ b/src/views/image/UploadLocalTemplate.vue
@@ -31,7 +31,7 @@
       <img v-if="imageUrl" :src="imageUrl" alt="avatar" />
       <div v-else>
         <a-icon :type="loading ? 'loading' : 'plus'" />
-        <div class="ant-upload-text">Upload</div>
+        <div class="ant-upload-text">{{ $t('label.upload') }}</div>
       </div>
     </a-upload>
   </div>
diff --git a/src/views/infra/AddPrimaryStorage.vue b/src/views/infra/AddPrimaryStorage.vue
index 8437cb3..e043e62 100644
--- a/src/views/infra/AddPrimaryStorage.vue
+++ b/src/views/infra/AddPrimaryStorage.vue
@@ -38,7 +38,7 @@
         </div>
         <a-form-item :label="$t('label.zoneid')">
           <a-select
-            v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: `${this.$t('label.required')}`}] }]"
+            v-decorator="['zone', { initialValue: this.zoneSelected, rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]"
+              v-decorator="['pod', { initialValue: this.podSelected, rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]"
+              v-decorator="['cluster', { initialValue: this.clusterSelected, rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]"
+              v-decorator="['host', { initialValue: this.hostSelected, rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]"/>
+          <a-input v-decorator="['name', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]"
+            v-decorator="['protocol', { initialValue: this.protocols[0], rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]" />
+            <a-input v-decorator="['server', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]" />
+            <a-input v-decorator="['path', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['smbUsername', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.smbpassword')">
-            <a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
+            <a-input-password v-decorator="['smbPassword', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.smbdomain')">
-            <a-input v-decorator="['smbDomain', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['smbDomain', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['iqn', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.lun')">
-            <a-input v-decorator="['lun', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['lun', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['vCenterDataCenter', { rules: [{ required: true, message: `${$t('label.required')}` }] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.vcenterdatastore')">
-            <a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]"/>
+            <a-input v-decorator="['vCenterDataStore', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]"
+            v-decorator="['provider', { initialValue: providerSelected, rules: [{ required: true, message: `${$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: `${this.$t('label.required')}`}] }]" />
+            <a-input v-decorator="['volumegroup', { rules: [{ required: true, message: `${$t('label.required')}`}] }]" />
           </a-form-item>
         </div>
         <div v-if="protocolSelected === 'Gluster'">
diff --git a/src/views/infra/AddSecondaryStorage.vue b/src/views/infra/AddSecondaryStorage.vue
index f65854f..7e78b4c 100644
--- a/src/views/infra/AddSecondaryStorage.vue
+++ b/src/views/infra/AddSecondaryStorage.vue
@@ -45,7 +45,7 @@
                 'zone',
                 {
                   initialValue: this.zoneSelected,
-                  rules: [{ required: true, message: `${this.$t('label.required')}`}]
+                  rules: [{ required: true, message: `${$t('label.required')}`}]
                 }]"
               @change="val => { zoneSelected = val }"
             >
@@ -61,7 +61,7 @@
               v-decorator="[
                 'server',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -70,7 +70,7 @@
               v-decorator="[
                 'path',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -81,7 +81,7 @@
               v-decorator="[
                 'smbUsername',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -90,7 +90,7 @@
               v-decorator="[
                 'smbPassword',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -99,7 +99,7 @@
               v-decorator="[
                 'smbDomain',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -110,7 +110,7 @@
               v-decorator="[
                 'url',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -119,7 +119,7 @@
               v-decorator="[
                 'account',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -128,7 +128,7 @@
               v-decorator="[
                 'username',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
@@ -137,7 +137,7 @@
               v-decorator="[
                 'key',
                 {
-                  rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                  rules: [{ required: true, message: `${$t('label.required')}` }]
                 }]"
             />
           </a-form-item>
diff --git a/src/views/infra/ClusterAdd.vue b/src/views/infra/ClusterAdd.vue
index 14ff844..67bbd12 100644
--- a/src/views/infra/ClusterAdd.vue
+++ b/src/views/infra/ClusterAdd.vue
@@ -56,7 +56,7 @@
 
       <div class="form__item">
         <div class="form__label"><span class="required">* </span>{{ $t('label.clusternamelabel') }}</div>
-        <span class="required required-label" ref="requiredCluster">Required</span>
+        <span class="required required-label" ref="requiredCluster">{{ $t('label.required') }}</span>
         <a-input :placeholder="placeholder.clustername" v-model="clustername"></a-input>
       </div>
 
@@ -242,7 +242,7 @@ export default {
         }
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.addclusterresponse.errortext,
           duration: 0
         })
@@ -268,23 +268,23 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('message.cluster.dedicated'),
               jobid: response.dedicateclusterresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate cluster',
+          errorMessage: this.$t('error.dedicate.cluster.failed'),
           errorMethod: () => {
             this.loading = false
           },
           loadingMessage: this.$t('message.dedicate.zone'),
-          catchMessage: 'Error encountered while fetching async job result',
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loading = false
           }
         })
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
diff --git a/src/views/infra/HostAdd.vue b/src/views/infra/HostAdd.vue
index 21f257b..dc4bbfc 100644
--- a/src/views/infra/HostAdd.vue
+++ b/src/views/infra/HostAdd.vue
@@ -57,19 +57,19 @@
 
       <div class="form__item required-field">
         <div class="form__label"><span class="required">* </span>{{ selectedClusterHyperVisorType === 'VMware' ? $t('label.vcenterhost') : $t('label.hostnamelabel') }}</div>
-        <span class="required required-label">Required</span>
+        <span class="required required-label">{{ $t('label.required') }}</span>
         <a-input v-model="hostname"></a-input>
       </div>
 
       <div class="form__item required-field" v-if="selectedClusterHyperVisorType !== 'VMware'">
         <div class="form__label"><span class="required">* </span>{{ $t('label.username') }}</div>
-        <span class="required required-label">Required</span>
+        <span class="required required-label">{{ $t('label.required') }}</span>
         <a-input :placeholder="placeholder.username" v-model="username"></a-input>
       </div>
 
       <div class="form__item required-field" v-if="selectedClusterHyperVisorType !== 'VMware'">
         <div class="form__label"><span class="required">* </span>{{ $t('label.password') }}</div>
-        <span class="required required-label">Required</span>
+        <span class="required required-label">{{ $t('label.required') }}</span>
         <a-input :placeholder="placeholder.password" type="password" v-model="password"></a-input>
       </div>
 
@@ -80,7 +80,7 @@
         </div>
         <div class="form__item required-field">
           <div class="form__label"><span class="required">* </span>{{ $t('label.agent.password') }}</div>
-          <span class="required required-label">Required</span>
+          <span class="required required-label">{{ $t('label.required') }}</span>
           <a-input type="password" v-model="agentpassword"></a-input>
         </div>
         <div class="form__item">
@@ -296,7 +296,7 @@ export default {
         }
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.addhostresponse.errortext,
           duration: 0
         })
@@ -321,23 +321,23 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('message.host.dedicated'),
               jobid: response.dedicatehostresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate host',
+          errorMessage: this.$t('error.dedicate.host.failed'),
           errorMethod: () => {
             this.loading = false
           },
-          loadingMessage: this.$t('message.dedicate.host'),
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.dedicating.host'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loading = false
           }
         })
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
diff --git a/src/views/infra/InfraSummary.vue b/src/views/infra/InfraSummary.vue
index 0e8e61d..ff487ad 100644
--- a/src/views/infra/InfraSummary.vue
+++ b/src/views/infra/InfraSummary.vue
@@ -44,7 +44,7 @@
             :footer="null"
             @cancel="sslModalClose">
             <p>
-              Please submit a new X.509 compliant SSL certificate chain to be updated to each console proxy and secondary storage virtual instance:
+              {{ $t('message.update.ssl') }}
             </p>
 
             <a-form @submit.prevent="handleSslFormSubmit" ref="sslForm" :form="form">
@@ -63,7 +63,7 @@
                   name="rootCert"
                   v-decorator="[
                     'root',
-                    {rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
+                    {rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
                   ]"
                 ></a-textarea>
               </a-form-item>
@@ -95,7 +95,7 @@
               <a-form-item>
                 <a-button @click="addIntermediateCert">
                   <a-icon type="plus-circle" />
-                  Add intermediate certificate
+                  {{ $t('label.add.intermediate.certificate') }}
                 </a-button>
               </a-form-item>
 
@@ -113,7 +113,7 @@
                   name="serverCert"
                   v-decorator="[
                     'server',
-                    {rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
+                    {rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
                   ]"
                 ></a-textarea>
               </a-form-item>
@@ -132,7 +132,7 @@
                   name="pkcsKey"
                   v-decorator="[
                     'pkcs',
-                    {rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
+                    {rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
                   ]"
                 ></a-textarea>
               </a-form-item>
@@ -150,7 +150,7 @@
                   name="dnsSuffix"
                   v-decorator="[
                     'dns',
-                    {rules: [{ required: true, message: `${this.$t('label.required')}` }], validateTrigger:'change'}
+                    {rules: [{ required: true, message: `${$t('label.required')}` }], validateTrigger:'change'}
                   ]"
                 ></a-input>
               </a-form-item>
@@ -265,24 +265,24 @@ export default {
       api('queryAsyncJobResult', { jobid: jobId }).then(json => {
         const result = json.queryasyncjobresultresponse
         if (result.jobstatus === 1 && this.maxCerts === count) {
-          this.$message.success('Certificate Uploaded: ' + result.jobresult.customcertificate.message)
+          this.$message.success(`${this.$t('label.certificate.upload')}: ${result.jobresult.customcertificate.message}`)
           this.$notification.success({
-            message: 'Certificate Uploaded',
-            description: result.jobresult.customcertificate.message || 'Certificate successfully uploaded'
+            message: this.$t('label.certificate.upload'),
+            description: result.jobresult.customcertificate.message || this.$t('message.success.certificate.upload')
           })
         } else if (result.jobstatus === 2) {
           this.$notification.error({
-            message: 'Certificate Upload Failed',
-            description: result.jobresult.errortext || 'Failed to update SSL Certificate. Failed to pass certificate validation check',
+            message: this.$t('label.certificate.upload.failed'),
+            description: result.jobresult.errortext || this.$t('label.certificate.upload.failed.description'),
             duration: 0
           })
         } else if (result.jobstatus === 0) {
           this.$message
-            .loading('Certificate upload in progress: ' + count, 2)
+            .loading(`${this.$t('message.certificate.upload.processing')}: ${count}`, 2)
             .then(() => this.pollActionCompletion(jobId, count))
         }
       }).catch(e => {
-        console.log('Error encountered while fetching async job result' + e)
+        console.log(this.$t('error.fetching.async.job.result') + e)
       })
     },
 
diff --git a/src/views/infra/PodAdd.vue b/src/views/infra/PodAdd.vue
index 50b27aa..85d48aa 100644
--- a/src/views/infra/PodAdd.vue
+++ b/src/views/infra/PodAdd.vue
@@ -23,7 +23,7 @@
         <a-select
           v-decorator="['zoneid', {
             initialValue: this.zoneId,
-            rules: [{ required: true, message: `${this.$t('label.required')}` }] }
+            rules: [{ required: true, message: `${$t('label.required')}` }] }
           ]">
           <a-select-option
             v-for="zone in zonesList"
@@ -40,7 +40,7 @@
           v-decorator="[
             'name',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
         />
       </a-form-item>
@@ -51,7 +51,7 @@
           v-decorator="[
             'gateway',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
         />
       </a-form-item>
@@ -62,7 +62,7 @@
           v-decorator="[
             'netmask',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
         />
       </a-form-item>
@@ -73,7 +73,7 @@
           v-decorator="[
             'startip',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
         />
       </a-form-item>
@@ -194,7 +194,7 @@ export default {
           this.$parent.$parent.close()
         }).catch(error => {
           this.$notification.error({
-            message: `Error ${error.response.status}`,
+            message: `${this.$t('label.error')} ${error.response.status}`,
             description: error.response.data.createpodresponse.errortext,
             duration: 0
           })
@@ -219,23 +219,23 @@ export default {
             this.$store.dispatch('AddAsyncJob', {
               title: this.$t('message.pod.dedicated'),
               jobid: response.dedicatepodresponse.jobid,
-              description: `Domain ID: ${this.dedicatedDomainId}`,
+              description: `${this.$t('label.domainid')} : ${this.dedicatedDomainId}`,
               status: 'progress'
             })
           },
-          errorMessage: 'Failed to dedicate pod',
+          errorMessage: this.$t('error.dedicate.pod.failed'),
           errorMethod: () => {
             this.loading = false
           },
-          loadingMessage: this.$t('message.dedicate.pod'),
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.dedicating.pod'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.loading = false
           }
         })
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
diff --git a/src/views/infra/network/DedicatedVLANTab.vue b/src/views/infra/network/DedicatedVLANTab.vue
index 36438b1..98b7442 100644
--- a/src/views/infra/network/DedicatedVLANTab.vue
+++ b/src/views/infra/network/DedicatedVLANTab.vue
@@ -35,8 +35,8 @@
         <a-popconfirm
           :title="`${$t('label.delete')}?`"
           @confirm="handleDelete(record)"
-          okText="Yes"
-          cancelText="No"
+          :okText="$t('label.yes')"
+          :cancelText="$t('label.no')"
           placement="top"
         >
           <a-button :disabled="!('releaseDedicatedGuestVlanRange' in $store.getters.apis)" icon="delete" type="danger" shape="circle"></a-button>
@@ -49,7 +49,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -68,7 +68,7 @@
           <a-form-item :label="$t('label.vlanrange')">
             <a-input
               v-decorator="['range', {
-                rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                rules: [{ required: true, message: `${$t('label.required')}` }]
               }]"
             ></a-input>
           </a-form-item>
@@ -84,7 +84,7 @@
             <a-select
               @change="handleDomainChange"
               v-decorator="['domain', {
-                rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                rules: [{ required: true, message: `${$t('label.required')}` }]
               }]"
             >
               <a-select-option v-for="domain in domains" :key="domain.id" :value="domain.id">{{ domain.name }}</a-select-option>
@@ -94,7 +94,7 @@
           <a-form-item :label="$t('label.account')" v-if="selectedScope === 'account'">
             <a-select
               v-decorator="['account', {
-                rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                rules: [{ required: true, message: `${$t('label.required')}` }]
               }]"
             >
               <a-select-option
@@ -109,7 +109,7 @@
           <a-form-item :label="$t('label.project')" v-if="selectedScope === 'project'">
             <a-select
               v-decorator="['project', {
-                rules: [{ required: true, message: `${this.$t('label.required')}` }]
+                rules: [{ required: true, message: `${$t('label.required')}` }]
               }]"
             >
               <a-select-option
@@ -202,7 +202,7 @@ export default {
         this.totalCount = response.listdedicatedguestvlanrangesresponse.count || 0
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
@@ -286,7 +286,7 @@ export default {
         id: item.id
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Deleted dedicated VLAN/VNI range ${item.guestvlanrange} for ${item.account}`,
+          title: `${this.$t('label.delete.dedicated.vlan.range')} ${item.guestvlanrange} ${this.$t('label.for')} ${item.account}`,
           jobid: response.releasededicatedguestvlanrangeresponse.jobid,
           status: 'progress'
         })
@@ -296,13 +296,13 @@ export default {
             this.fetchData()
             this.parentFinishLoading()
           },
-          errorMessage: 'Deleting failed',
+          errorMessage: this.$t('label.deleting.failed'),
           errorMethod: () => {
             this.fetchData()
             this.parentFinishLoading()
           },
-          loadingMessage: `Deleting ${item.id}`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: `${this.$t('label.deleting')} ${item.id}`,
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.parentFinishLoading()
@@ -310,7 +310,7 @@ export default {
         })
       }).catch(error => {
         console.log(error)
-        this.$message.error('Failed to delete.')
+        this.$message.error(this.$t('message.fail.to.delete'))
         this.fetchData()
         this.parentFinishLoading()
       })
diff --git a/src/views/infra/network/IpRangesTabManagement.vue b/src/views/infra/network/IpRangesTabManagement.vue
index 9051511..86e13d5 100644
--- a/src/views/infra/network/IpRangesTabManagement.vue
+++ b/src/views/infra/network/IpRangesTabManagement.vue
@@ -58,7 +58,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="items.length"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -78,7 +78,7 @@
         <a-form-item :label="$t('label.podid')" class="form__item">
           <a-select
             v-decorator="['pod', {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
           >
             <a-select-option v-for="item in items" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
@@ -86,12 +86,12 @@
         </a-form-item>
         <a-form-item :label="$t('label.gateway')" class="form__item">
           <a-input
-            v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['gateway', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
         <a-form-item :label="$t('label.vlan')" class="form__item">
@@ -101,12 +101,12 @@
         </a-form-item>
         <a-form-item :label="$t('label.startip')" class="form__item">
           <a-input
-            v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['startip', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
         <a-form-item :label="$t('label.system.vms')" class="form__item">
@@ -249,7 +249,7 @@ export default {
         vlan: record.vlanid
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Successfully removed IP Range`,
+          title: this.$t('message.success.remove.iprange'),
           jobid: response.deletemanagementnetworkiprangeresponse.jobid,
           status: 'progress'
         })
@@ -259,13 +259,13 @@ export default {
             this.componentLoading = false
             this.fetchData()
           },
-          errorMessage: 'Removing failed',
+          errorMessage: this.$t('message.remove.failed'),
           errorMethod: () => {
             this.componentLoading = false
             this.fetchData()
           },
-          loadingMessage: `Removing IP Range...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.iprange.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.componentLoading = false
             this.fetchData()
@@ -293,7 +293,7 @@ export default {
           vlan: values.vlan || null
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Successfully added IP Range`,
+            title: this.$t('message.success.add.iprange'),
             jobid: response.createmanagementnetworkiprangeresponse.jobid,
             status: 'progress'
           })
@@ -303,13 +303,13 @@ export default {
               this.componentLoading = false
               this.fetchData()
             },
-            errorMessage: 'Adding failed',
+            errorMessage: this.$t('message.add.failed'),
             errorMethod: () => {
               this.componentLoading = false
               this.fetchData()
             },
-            loadingMessage: `Adding IP Range...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.iprange.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.componentLoading = false
               this.fetchData()
diff --git a/src/views/infra/network/IpRangesTabPublic.vue b/src/views/infra/network/IpRangesTabPublic.vue
index 40022be..811189a 100644
--- a/src/views/infra/network/IpRangesTabPublic.vue
+++ b/src/views/infra/network/IpRangesTabPublic.vue
@@ -77,7 +77,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="items.length"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -132,12 +132,12 @@
       >
         <a-form-item :label="$t('label.gateway')" class="form__item">
           <a-input
-            v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['gateway', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
         <a-form-item :label="$t('label.vlan')" class="form__item">
@@ -147,12 +147,12 @@
         </a-form-item>
         <a-form-item :label="$t('label.startip')" class="form__item">
           <a-input
-            v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['startip', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
         <div class="form__item">
@@ -160,8 +160,7 @@
           <a-switch @change="handleShowAccountFields"></a-switch>
         </div>
         <div v-if="showAccountFields" style="margin-top: 20px;">
-          <p>(optional) Please specify an account to be associated with this IP range.</p>
-          <p>System VMs: Enable dedication of public IP range for SSVM and CPVM, account field disabled. Reservation strictness defined on 'system.vm.public.ip.reservation.mode.strictness'.</p>
+          <div v-html="$t('label.set.reservation.desc')"></div>
           <a-form-item :label="$t('label.system.vms')" class="form__item">
             <a-switch v-decorator="['forsystemvms']"></a-switch>
           </a-form-item>
@@ -384,11 +383,11 @@ export default {
           forvirtualnetwork: true
         }).then(() => {
           this.$notification.success({
-            message: 'Successfully added IP Range'
+            message: this.$t('message.success.add.iprange')
           })
         }).catch(error => {
           this.$notification.error({
-            message: `Error ${error.response.status}`,
+            message: `${this.$t('label.error')} ${error.response.status}`,
             description: error.response.data.createvlaniprangeresponse
               ? error.response.data.createvlaniprangeresponse.errortext : error.response.data.errorresponse.errortext,
             duration: 0
diff --git a/src/views/infra/network/IpRangesTabStorage.vue b/src/views/infra/network/IpRangesTabStorage.vue
index d925762..af2c63c 100644
--- a/src/views/infra/network/IpRangesTabStorage.vue
+++ b/src/views/infra/network/IpRangesTabStorage.vue
@@ -56,7 +56,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="items.length"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -76,7 +76,7 @@
         <a-form-item :label="$t('label.podid')" class="form__item">
           <a-select
             v-decorator="['pod', {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }]
+              rules: [{ required: true, message: `${$t('label.required')}` }]
             }]"
           >
             <a-select-option v-for="pod in pods" :key="pod.id" :value="pod.id">{{ pod.name }}</a-select-option>
@@ -84,12 +84,12 @@
         </a-form-item>
         <a-form-item :label="$t('label.gateway')" class="form__item">
           <a-input
-            v-decorator="['gateway', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['gateway', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['netmask', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
         <a-form-item :label="$t('label.vlan')" class="form__item">
@@ -99,12 +99,12 @@
         </a-form-item>
         <a-form-item :label="$t('label.startip')" class="form__item">
           <a-input
-            v-decorator="['startip', { rules: [{ required: true, message: `${this.$t('label.required')}` }] }]">
+            v-decorator="['startip', { rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }] }]">
+            v-decorator="['endip', { rules: [{ required: true, message: `${$t('label.required')}` }] }]">
           </a-input>
         </a-form-item>
       </a-form>
@@ -231,7 +231,7 @@ export default {
       this.componentLoading = true
       api('deleteStorageNetworkIpRange', { id }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Successfully removed IP Range`,
+          title: this.$t('message.success.remove.iprange'),
           jobid: response.deletestoragenetworkiprangeresponse.jobid,
           status: 'progress'
         })
@@ -241,13 +241,13 @@ export default {
             this.componentLoading = false
             this.fetchData()
           },
-          errorMessage: 'Removing failed',
+          errorMessage: this.$t('message.remove.failed'),
           errorMethod: () => {
             this.componentLoading = false
             this.fetchData()
           },
-          loadingMessage: `Removing IP Range...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.iprange.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.componentLoading = false
             this.fetchData()
@@ -275,7 +275,7 @@ export default {
           vlan: values.vlan || null
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Successfully added IP Range`,
+            title: this.$t('message.success.add.iprange'),
             jobid: response.createstoragenetworkiprangeresponse.jobid,
             status: 'progress'
           })
@@ -285,13 +285,13 @@ export default {
               this.componentLoading = false
               this.fetchData()
             },
-            errorMessage: 'Adding failed',
+            errorMessage: this.$t('message.add.failed'),
             errorMethod: () => {
               this.componentLoading = false
               this.fetchData()
             },
-            loadingMessage: `Adding IP Range...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.iprange.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.componentLoading = false
               this.fetchData()
diff --git a/src/views/infra/network/ServiceProvidersTab.vue b/src/views/infra/network/ServiceProvidersTab.vue
index bf6f153..176d014 100644
--- a/src/views/infra/network/ServiceProvidersTab.vue
+++ b/src/views/infra/network/ServiceProvidersTab.vue
@@ -27,7 +27,7 @@
           :key="item.title">
           <span slot="tab">
             {{ $t(item.title) }}
-            <status :text="item.title in nsps ? nsps[item.title].state : 'Disabled'" style="margin-bottom: 6px; margin-left: 6px" />
+            <status :text="item.title in nsps ? nsps[item.title].state : $t('label.disabled')" style="margin-bottom: 6px; margin-left: 6px" />
           </span>
           <provider-item
             v-if="tabKey===item.title"
@@ -1198,7 +1198,7 @@ export default {
         } catch (error) {
           this.actionLoading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: error
           })
         }
@@ -1334,7 +1334,7 @@ export default {
       } catch (message) {
         this.actionLoading = false
         this.$notification.error({
-          message: 'Request Failed',
+          message: this.$t('message.request.failed'),
           description: message
         })
       }
diff --git a/src/views/infra/network/TrafficTypesTab.vue b/src/views/infra/network/TrafficTypesTab.vue
index 7abdf03..33b04eb 100644
--- a/src/views/infra/network/TrafficTypesTab.vue
+++ b/src/views/infra/network/TrafficTypesTab.vue
@@ -24,7 +24,7 @@
           :key="idx"
           style="margin-bottom: 10px;">
           <div><strong>{{ $t(type) }}</strong></div>
-          <div>{{ item[type] || 'Use default gateway' }}</div>
+          <div>{{ item[type] || $t('label.network.label.display.for.blank.value') }}</div>
         </div>
         <div v-if="item.traffictype === 'Public'">
           <div style="margin-bottom: 10px;">
diff --git a/src/views/infra/network/providers/AddF5LoadBalancer.vue b/src/views/infra/network/providers/AddF5LoadBalancer.vue
index 6a465b7..d2f49e7 100644
--- a/src/views/infra/network/providers/AddF5LoadBalancer.vue
+++ b/src/views/infra/network/providers/AddF5LoadBalancer.vue
@@ -105,8 +105,8 @@
         </a-col>
       </a-row>
       <div :span="24" class="action-button">
-        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
-        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
+        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
       </div>
     </a-form>
   </div>
@@ -255,7 +255,7 @@ export default {
         } catch (error) {
           this.loading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }
diff --git a/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue b/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
index e53cb8d..786c0d4 100644
--- a/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
+++ b/src/views/infra/network/providers/AddNetscalerLoadBalancer.vue
@@ -129,8 +129,8 @@
         </a-col>
       </a-row>
       <div :span="24" class="action-button">
-        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
-        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
+        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
       </div>
     </a-form>
   </div>
@@ -290,7 +290,7 @@ export default {
         } catch (error) {
           this.loading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }
diff --git a/src/views/infra/network/providers/AddNiciraNvpDevice.vue b/src/views/infra/network/providers/AddNiciraNvpDevice.vue
index ef8e926..d3d70f6 100644
--- a/src/views/infra/network/providers/AddNiciraNvpDevice.vue
+++ b/src/views/infra/network/providers/AddNiciraNvpDevice.vue
@@ -85,8 +85,8 @@
         </a-col>
       </a-row>
       <div :span="24" class="action-button">
-        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
-        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
+        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
       </div>
     </a-form>
   </div>
@@ -167,7 +167,7 @@ export default {
         } catch (error) {
           this.loading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }
diff --git a/src/views/infra/network/providers/AddPaloAltoFirewall.vue b/src/views/infra/network/providers/AddPaloAltoFirewall.vue
index c10c647..36c48d7 100644
--- a/src/views/infra/network/providers/AddPaloAltoFirewall.vue
+++ b/src/views/infra/network/providers/AddPaloAltoFirewall.vue
@@ -152,8 +152,8 @@
         </a-col>
       </a-row>
       <div :span="24" class="action-button">
-        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
-        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
+        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
       </div>
     </a-form>
   </div>
@@ -379,7 +379,7 @@ export default {
         } catch (error) {
           this.loading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }
diff --git a/src/views/infra/network/providers/AddSrxFirewall.vue b/src/views/infra/network/providers/AddSrxFirewall.vue
index 7d9f48a..19a5cb9 100644
--- a/src/views/infra/network/providers/AddSrxFirewall.vue
+++ b/src/views/infra/network/providers/AddSrxFirewall.vue
@@ -130,8 +130,8 @@
         </a-col>
       </a-row>
       <div :span="24" class="action-button">
-        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('Cancel') }}</a-button>
-        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('OK') }}</a-button>
+        <a-button :loading="loading" @click="onCloseAction">{{ this.$t('label.cancel') }}</a-button>
+        <a-button :loading="loading" type="primary" @click="handleSubmit">{{ this.$t('label.ok') }}</a-button>
       </div>
     </a-form>
   </div>
@@ -324,7 +324,7 @@ export default {
         } catch (error) {
           this.loading = false
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }
diff --git a/src/views/infra/network/providers/ProviderItem.vue b/src/views/infra/network/providers/ProviderItem.vue
index 5f7559a..458fa89 100644
--- a/src/views/infra/network/providers/ProviderItem.vue
+++ b/src/views/infra/network/providers/ProviderItem.vue
@@ -196,7 +196,7 @@ export default {
       } catch (error) {
         this.listData[args.title].loading = false
         this.$notification.error({
-          message: 'Request Failed',
+          message: this.$t('message.request.failed'),
           description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
         })
       }
diff --git a/src/views/infra/network/providers/ProviderListView.vue b/src/views/infra/network/providers/ProviderListView.vue
index 0bb5cc7..a2d1142 100644
--- a/src/views/infra/network/providers/ProviderListView.vue
+++ b/src/views/infra/network/providers/ProviderListView.vue
@@ -101,7 +101,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="itemCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -301,7 +301,7 @@ export default {
             } catch (error) {
               this.actionLoading = false
               this.$notification.error({
-                message: 'Request Failed',
+                message: this.$t('message.request.failed'),
                 description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
               })
             }
@@ -337,7 +337,7 @@ export default {
           } catch (error) {
             this.actionLoading = false
             this.$notification.error({
-              message: 'Request Failed',
+              message: this.$t('message.request.failed'),
               description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
             })
           }
diff --git a/src/views/infra/zone/AdvancedGuestTrafficForm.vue b/src/views/infra/zone/AdvancedGuestTrafficForm.vue
index 97a97fe..38ce507 100644
--- a/src/views/infra/zone/AdvancedGuestTrafficForm.vue
+++ b/src/views/infra/zone/AdvancedGuestTrafficForm.vue
@@ -94,7 +94,7 @@ export default {
     },
     description: {
       type: String,
-      default: 'Creating IP Ranges'
+      default: 'label.creating.iprange'
     },
     isFixError: {
       type: Boolean,
@@ -142,7 +142,7 @@ export default {
         }
         if (!this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd)) {
           this.validStatus = 'error'
-          this.validMessage = 'Please enter a valid VLAN/VNI range'
+          this.validMessage = this.$t('message.error.vlan.range')
           return
         }
         if (this.isFixError) {
@@ -169,7 +169,7 @@ export default {
       }
       if (!this.checkFromTo(fromVal, toVal)) {
         this.validStatus = 'error'
-        this.validMessage = 'Please enter a valid VLAN/VNI range'
+        this.validMessage = this.$t('message.error.vlan.range')
       }
       callback()
     },
diff --git a/src/views/infra/zone/IpAddressRangeForm.vue b/src/views/infra/zone/IpAddressRangeForm.vue
index 7411b35..37d67c0 100644
--- a/src/views/infra/zone/IpAddressRangeForm.vue
+++ b/src/views/infra/zone/IpAddressRangeForm.vue
@@ -39,7 +39,7 @@
           <a-form-item :style="{ display: 'inline-block', width: '14%' }">
             <a-input
               v-decorator="[ 'gateway', {
-                rules: [{ required: true, message: 'Please enter Gateway' }]
+                rules: [{ required: true, message: $t('message.error.gateway') }]
               }]"
               :placeholder="$t('label.gateway')"
             />
@@ -47,7 +47,7 @@
           <a-form-item :style="{ display: 'inline-block', width: '14%' }">
             <a-input
               v-decorator="[ 'netmask', {
-                rules: [{ required: true, message: 'Please enter Netmask' }]
+                rules: [{ required: true, message: $t('message.error.netmask') }]
               }]"
               :placeholder="$t('label.netmask')"
             />
@@ -64,12 +64,12 @@
                 rules: [
                   {
                     required: true,
-                    message: 'Please enter Start IP'
+                    message: $t('message.error.startip')
                   },
                   {
                     validator: checkIpFormat,
                     ipV4: true,
-                    message: 'Please enter a valid IPv4 address.'
+                    message: $t('message.error.ipv4.address')
                   }
                 ]
               }]"
@@ -82,12 +82,12 @@
                 rules: [
                   {
                     required: true,
-                    message: 'Please enter End IP'
+                    message: $t('message.error.endip')
                   },
                   {
                     validator: checkIpFormat,
                     ipV4: true,
-                    message: 'Please enter a valid IPv4 address.'
+                    message: $t('message.error.ipv4.address')
                   }]
               }]"
               :placeholder="$t('label.end.ip')"
@@ -130,7 +130,7 @@ export default {
     },
     description: {
       type: String,
-      default: 'Creating IP Ranges'
+      default: 'label.creating.iprange'
     },
     prefillContent: {
       type: Object,
diff --git a/src/views/infra/zone/StaticInputsForm.vue b/src/views/infra/zone/StaticInputsForm.vue
index 7d50da7..2aa0f71 100644
--- a/src/views/infra/zone/StaticInputsForm.vue
+++ b/src/views/infra/zone/StaticInputsForm.vue
@@ -39,7 +39,7 @@
             rules: [
               {
                 required: field.required,
-                message: field.placeHolder,
+                message: $t(field.placeHolder),
                 initialValue: getPrefilled(field.key)
               }
             ]
@@ -66,7 +66,7 @@
             rules: [
               {
                 required: field.required,
-                message: field.placeHolder,
+                message: $t(field.placeHolder),
                 initialValue: getPrefilled(field.key)
               }
             ]
@@ -78,14 +78,14 @@
             rules: [
               {
                 required: field.required,
-                message: field.placeHolder,
+                message: $t(field.placeHolder),
                 initialValue: getPrefilled(field.key)
               },
               {
                 validator: checkIpFormat,
                 ipV4: field.ipV4,
                 ipV6: field.ipV6,
-                message: field.message
+                message: $t(field.message)
               }
             ]
           }]"
@@ -123,7 +123,7 @@ export default {
     },
     description: {
       type: String,
-      default: 'Creating IP Ranges'
+      default: 'label.creating.iprange'
     },
     isFixError: {
       type: Boolean,
diff --git a/src/views/infra/zone/SystemVmsTab.vue b/src/views/infra/zone/SystemVmsTab.vue
index 9ccd968..c453042 100644
--- a/src/views/infra/zone/SystemVmsTab.vue
+++ b/src/views/infra/zone/SystemVmsTab.vue
@@ -35,14 +35,14 @@
             </div>
             <div class="list__col">
               <div class="list__label">{{ $t('label.agentstate') }}</div>
-              <div><status :text="vm.agentstate || 'Unknown'" displayText></status></div>
+              <div><status :text="vm.agentstate || $t('label.unknown')" displayText></status></div>
             </div>
             <div class="list__col">
               <div class="list__label">
                 {{ $t('label.type') }}
               </div>
               <div>
-                {{ vm.systemvmtype == 'consoleproxy' ? 'Console Proxy VM' : 'Secondary Storage VM' }}
+                {{ vm.systemvmtype == 'consoleproxy' ? $t('label.console.proxy.vm') : $t('label.secondary.storage.vm') }}
               </div>
             </div>
             <div class="list__col">
diff --git a/src/views/infra/zone/ZoneWizard.vue b/src/views/infra/zone/ZoneWizard.vue
index 25cbfbb..8fd0852 100644
--- a/src/views/infra/zone/ZoneWizard.vue
+++ b/src/views/infra/zone/ZoneWizard.vue
@@ -104,32 +104,32 @@ export default {
         {
           title: 'label.zone.type',
           step: [],
-          description: 'Select type of zone basic/advanced.',
-          hint: 'This is the type of zone deployement that you want to use. Basic zone: provides a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering). Advanced zone: For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or lo [...]
+          description: this.$t('message.select.zone.description'),
+          hint: this.$t('message.select.zone.hint')
         },
         {
           title: 'label.zone.details',
           step: ['stepAddZone', 'dedicateZone'],
-          description: 'Populate zone details',
-          hint: 'A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.'
+          description: this.$t('message.zone.detail.description'),
+          hint: this.$t('message.zone.detail.hint')
         },
         {
           title: 'label.network',
           step: ['physicalNetwork', 'netscaler', 'pod', 'guestTraffic', 'storageTraffic', 'publicTraffic'],
-          description: 'Setup network and traffic',
-          hint: 'Configure network components and public/guest/management traffic including IP addresses.'
+          description: this.$t('message.network.description'),
+          hint: this.$t('message.network.hint')
         },
         {
           title: 'label.add.resources',
           step: ['clusterResource', 'hostResource', 'primaryResource', 'secondaryResource'],
-          description: 'Add infrastructure resources',
-          hint: 'Add infrastructure resources - pods, clusters, primary/secondary storages.'
+          description: this.$t('message.add.resource.description'),
+          hint: this.$t('message.add.resource.hint')
         },
         {
           title: 'label.launch',
           step: ['launchZone'],
-          description: 'Zone is ready to launch; please proceed to the next step.',
-          hint: 'Configure network components and traffic including IP addresses.'
+          description: this.$t('message.launch.zone.description'),
+          hint: this.$t('message.launch.zone.hint')
         }
       ],
       zoneConfig: {}
@@ -155,7 +155,7 @@ export default {
       this.$emit('close-action')
     },
     onRefreshData () {
-      this.$message.success('Processing complete!')
+      this.$message.success(this.$t('message.processing.complete'))
       this.$emit('refresh-data')
       this.onCloseAction()
     },
diff --git a/src/views/infra/zone/ZoneWizardAddResources.vue b/src/views/infra/zone/ZoneWizardAddResources.vue
index 117c379..0f7b83c 100644
--- a/src/views/infra/zone/ZoneWizardAddResources.vue
+++ b/src/views/infra/zone/ZoneWizardAddResources.vue
@@ -160,13 +160,13 @@ export default {
         {
           title: 'label.cluster.name',
           key: 'clusterName',
-          placeHolder: 'Please enter cluster name',
+          placeHolder: 'message.error.cluster.name',
           required: true
         },
         {
           title: 'label.vcenter.host',
           key: 'vCenterHost',
-          placeHolder: 'Please enter vCenter Host',
+          placeHolder: 'message.error.vcenter.host',
           required: true,
           display: {
             hypervisor: ['VMware', 'Ovm3']
@@ -175,7 +175,7 @@ export default {
         {
           title: 'label.vcenter.username',
           key: 'vCenterUsername',
-          placeHolder: 'Please enter vCenter Username',
+          placeHolder: 'message.error.vcenter.username',
           required: true,
           display: {
             hypervisor: ['VMware', 'Ovm3']
@@ -184,7 +184,7 @@ export default {
         {
           title: 'label.vcenter.password',
           key: 'vCenterPassword',
-          placeHolder: 'Please enter vCenter Password',
+          placeHolder: 'message.error.vcenter.password',
           required: true,
           password: true,
           display: {
@@ -194,7 +194,7 @@ export default {
         {
           title: 'label.vcenter.datacenter',
           key: 'vCenterDatacenter',
-          placeHolder: 'Please enter vCenter Datacenter',
+          placeHolder: 'message.error.vcenter.datacenter',
           required: true,
           display: {
             hypervisor: ['VMware', 'Ovm3']
@@ -221,7 +221,7 @@ export default {
         {
           title: 'label.cisco.nexus1000v.ip.address',
           key: 'vsmipaddress',
-          placeHolder: 'Please enter Nexus 1000v IP Address',
+          placeHolder: 'message.error.nexus1000v.ipaddess',
           required: false,
           display: {
             vSwitchEnabled: true
@@ -230,7 +230,7 @@ export default {
         {
           title: 'label.cisco.nexus1000v.username',
           key: 'vsmusername',
-          placeHolder: 'Please enter Nexus 1000v Username',
+          placeHolder: 'message.error.nexus1000v.username',
           required: false,
           display: {
             vSwitchEnabled: true
@@ -239,7 +239,7 @@ export default {
         {
           title: 'label.cisco.nexus1000v.password',
           key: 'vsmpassword',
-          placeHolder: 'Please enter Nexus 1000v Password',
+          placeHolder: 'message.error.nexus1000v.password',
           required: false,
           display: {
             vSwitchEnabled: true
@@ -252,7 +252,7 @@ export default {
         {
           title: 'label.host.name',
           key: 'hostName',
-          placeHolder: 'Please enter host name',
+          placeHolder: 'message.error.host.name',
           required: true,
           display: {
             hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
@@ -261,7 +261,7 @@ export default {
         {
           title: 'label.username',
           key: 'hostUserName',
-          placeHolder: 'Please enter host username',
+          placeHolder: 'message.error.host.username',
           required: true,
           display: {
             hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
@@ -270,7 +270,7 @@ export default {
         {
           title: 'label.password',
           key: 'hostPassword',
-          placeHolder: 'Please enter host password',
+          placeHolder: 'message.error.host.password',
           required: true,
           password: true,
           display: {
@@ -280,7 +280,7 @@ export default {
         {
           title: 'label.agent.username',
           key: 'agentUserName',
-          placeHolder: 'Please enter Agent username',
+          placeHolder: 'message.error.agent.username',
           required: false,
           defaultValue: 'Oracle',
           display: {
@@ -290,7 +290,7 @@ export default {
         {
           title: 'label.agent.password',
           key: 'agentPassword',
-          placeHolder: 'Please enter Agent password',
+          placeHolder: 'message.error.agent.password',
           required: true,
           password: true,
           display: {
@@ -300,7 +300,7 @@ export default {
         {
           title: 'label.tags',
           key: 'hostTags',
-          placeHolder: 'Please enter host tags',
+          placeHolder: 'message.error.host.tags',
           required: false
         }
       ]
@@ -310,7 +310,7 @@ export default {
         {
           title: 'label.name',
           key: 'primaryStorageName',
-          placeHolder: 'Please enter name',
+          placeHolder: 'message.error.name',
           required: true
         },
         {
@@ -323,7 +323,7 @@ export default {
         {
           title: 'label.protocol',
           key: 'primaryStorageProtocol',
-          placeHolder: 'Please select option',
+          placeHolder: 'message.error.select',
           required: true,
           select: true,
           options: this.primaryStorageProtocols
@@ -331,7 +331,7 @@ export default {
         {
           title: 'label.server',
           key: 'primaryStorageServer',
-          placeHolder: 'Please enter server',
+          placeHolder: 'message.error.server',
           required: true,
           display: {
             primaryStorageProtocol: ['nfs', 'iscsi', 'gluster', 'SMB']
@@ -340,7 +340,7 @@ export default {
         {
           title: 'label.path',
           key: 'primaryStoragePath',
-          placeHolder: 'Please enter path',
+          placeHolder: 'message.error.path',
           required: true,
           display: {
             primaryStorageProtocol: ['nfs', 'SMB', 'SharedMountPoint', 'ocfs2']
@@ -349,7 +349,7 @@ export default {
         {
           title: 'label.SR.name',
           key: 'primaryStorageSRLabel',
-          placeHolder: 'Please enter SR Name-Label',
+          placeHolder: 'message.error.sr.namelabel',
           required: true,
           display: {
             primaryStorageProtocol: 'PreSetup'
@@ -358,7 +358,7 @@ export default {
         {
           title: 'label.target.iqn',
           key: 'primaryStorageTargetIQN',
-          placeHolder: 'Please enter Target IQN',
+          placeHolder: 'message.error.target.iqn',
           required: true,
           display: {
             primaryStorageProtocol: 'iscsi'
@@ -367,7 +367,7 @@ export default {
         {
           title: 'label.LUN.number',
           key: 'primaryStorageLUN',
-          placeHolder: 'Please enter LUN #',
+          placeHolder: 'message.error.lun',
           required: true,
           display: {
             primaryStorageProtocol: 'iscsi'
@@ -376,7 +376,7 @@ export default {
         {
           title: 'label.smb.domain',
           key: 'primaryStorageSMBDomain',
-          placeHolder: 'Please enter SMB Domain',
+          placeHolder: 'message.error.sbdomain',
           required: true,
           display: {
             primaryStorageProtocol: 'SMB'
@@ -385,7 +385,7 @@ export default {
         {
           title: 'label.smb.username',
           key: 'primaryStorageSMBUsername',
-          placeHolder: 'Please enter SMB Username',
+          placeHolder: 'message.error.sbdomain.username',
           required: true,
           display: {
             primaryStorageProtocol: 'SMB'
@@ -394,7 +394,7 @@ export default {
         {
           title: 'label.smb.password',
           key: 'primaryStorageSMBPassword',
-          placeHolder: 'Please enter SMB Password',
+          placeHolder: 'message.error.sbdomain.password',
           required: true,
           password: true,
           display: {
@@ -404,7 +404,7 @@ export default {
         {
           title: 'label.rados.monitor',
           key: 'primaryStorageRADOSMonitor',
-          placeHolder: 'Please enter RADOS Monitor',
+          placeHolder: 'message.error.rados.monitor',
           required: false,
           display: {
             primaryStorageProtocol: ['rbd']
@@ -413,7 +413,7 @@ export default {
         {
           title: 'label.rados.pool',
           key: 'primaryStorageRADOSPool',
-          placeHolder: 'Please enter RADOS Pool',
+          placeHolder: 'message.error.rados.pool',
           required: false,
           display: {
             primaryStorageProtocol: ['rbd']
@@ -422,7 +422,7 @@ export default {
         {
           title: 'label.rados.user',
           key: 'primaryStorageRADOSUser',
-          placeHolder: 'Please enter RADOS User',
+          placeHolder: 'message.error.rados.user',
           required: false,
           display: {
             primaryStorageProtocol: ['rbd']
@@ -431,7 +431,7 @@ export default {
         {
           title: 'label.rados.secret',
           key: 'primaryStorageRADOSSecret',
-          placeHolder: 'Please enter RADOS Secret',
+          placeHolder: 'message.error.rados.secret',
           required: false,
           display: {
             primaryStorageProtocol: ['rbd']
@@ -440,7 +440,7 @@ export default {
         {
           title: 'label.volgroup',
           key: 'primaryStorageVolumeGroup',
-          placeHolder: 'Please enter Volume Group',
+          placeHolder: 'message.error.volumne.group',
           required: true,
           display: {
             primaryStorageProtocol: 'clvm'
@@ -449,7 +449,7 @@ export default {
         {
           title: 'label.volume',
           key: 'primaryStorageVolume',
-          placeHolder: 'Please enter Volume',
+          placeHolder: 'message.error.volumne',
           required: true,
           display: {
             primaryStorageProtocol: 'gluster'
@@ -458,7 +458,7 @@ export default {
         {
           title: 'label.vcenter.datacenter',
           key: 'primaryStorageVmfsDatacenter',
-          placeHolder: 'Please enter vCenter Datacenter',
+          placeHolder: 'message.error.vcenter.datacenter',
           required: true,
           display: {
             primaryStorageProtocol: 'vmfs'
@@ -467,7 +467,7 @@ export default {
         {
           title: 'label.vcenter.datastore',
           key: 'primaryStorageVmfsDatastore',
-          placeHolder: 'Please enter vCenter Datastore',
+          placeHolder: 'message.error.vcenter.datastore',
           required: true,
           display: {
             primaryStorageProtocol: 'vmfs'
@@ -476,7 +476,7 @@ export default {
         {
           title: 'label.storage.tags',
           key: 'primaryStorageTags',
-          placeHolder: 'Please enter storage tags',
+          placeHolder: 'message.error.storage.tags',
           required: false
         }
       ]
@@ -502,7 +502,7 @@ export default {
           title: 'label.server',
           key: 'secondaryStorageServer',
           required: true,
-          placeHolder: 'Please enter Server',
+          placeHolder: 'message.error.server',
           display: {
             secondaryStorageProvider: ['NFS', 'SMB']
           }
@@ -511,7 +511,7 @@ export default {
           title: 'label.path',
           key: 'secondaryStoragePath',
           required: true,
-          placeHolder: 'Please enter Path',
+          placeHolder: 'message.error.path',
           display: {
             secondaryStorageProvider: ['NFS', 'SMB']
           }
@@ -520,7 +520,7 @@ export default {
           title: 'label.smb.domain',
           key: 'secondaryStorageSMBDomain',
           required: true,
-          placeHolder: 'Please enter SMB Domain',
+          placeHolder: 'message.error.sbdomain',
           display: {
             secondaryStorageProvider: ['SMB']
           }
@@ -529,7 +529,7 @@ export default {
           title: 'label.smb.username',
           key: 'secondaryStorageSMBUsername',
           required: true,
-          placeHolder: 'Please enter SMB Username',
+          placeHolder: 'message.error.smb.username',
           display: {
             secondaryStorageProvider: ['SMB']
           }
@@ -539,7 +539,7 @@ export default {
           key: 'secondaryStorageSMBPassword',
           required: true,
           password: true,
-          placeHolder: 'Please enter SMB Password',
+          placeHolder: 'message.error.smb.password',
           display: {
             secondaryStorageProvider: ['SMB']
           }
@@ -548,7 +548,7 @@ export default {
           title: 'label.s3.access_key',
           key: 'secondaryStorageAccessKey',
           required: true,
-          placeHolder: 'Please enter Access Key',
+          placeHolder: 'message.error.access.key',
           display: {
             secondaryStorageProvider: ['S3']
           }
@@ -557,7 +557,7 @@ export default {
           title: 'label.s3.secret_key',
           key: 'secondaryStorageSecretKey',
           required: true,
-          placeHolder: 'Please enter Secret Key',
+          placeHolder: 'message.error.secret.key',
           display: {
             secondaryStorageProvider: ['S3']
           }
@@ -566,7 +566,7 @@ export default {
           title: 'label.s3.bucket',
           key: 'secondaryStorageBucket',
           required: true,
-          placeHolder: 'Please enter Bucket',
+          placeHolder: 'message.error.bucket',
           display: {
             secondaryStorageProvider: ['S3']
           }
@@ -626,7 +626,7 @@ export default {
           title: 'label.s3.nfs.server',
           key: 'secondaryStorageNFSServer',
           required: true,
-          placeHolder: 'Please enter S3 NFS Server',
+          placeHolder: 'message.error.s3nfs.server',
           display: {
             secondaryStorageProvider: ['S3']
           }
@@ -635,7 +635,7 @@ export default {
           title: 'label.s3.nfs.path',
           key: 'secondaryStorageNFSPath',
           required: true,
-          placeHolder: 'Please enter S3 NFS Path',
+          placeHolder: 'message.error.s3nfs.path',
           display: {
             secondaryStorageProvider: ['S3']
           }
@@ -644,7 +644,7 @@ export default {
           title: 'label.url',
           key: 'secondaryStorageURL',
           required: true,
-          placeHolder: 'Please enter URL',
+          placeHolder: 'message.error.url',
           display: {
             secondaryStorageProvider: ['Swift']
           }
diff --git a/src/views/infra/zone/ZoneWizardLaunchZone.vue b/src/views/infra/zone/ZoneWizardLaunchZone.vue
index ab6d755..ecd4794 100644
--- a/src/views/infra/zone/ZoneWizardLaunchZone.vue
+++ b/src/views/infra/zone/ZoneWizardLaunchZone.vue
@@ -1533,7 +1533,7 @@ export default {
       } catch (e) {
         this.loading = false
         await this.$notification.error({
-          message: 'Request Failed',
+          message: this.$t('message.request.failed'),
           description: e
         })
       }
@@ -1587,7 +1587,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'createPhysicalNetwork failed. Error: ' + result.jobresult.errortext
+              message = `createPhysicalNetwork ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -1616,7 +1616,9 @@ export default {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
               this.setStepStatus(STATUS_FAILED)
-              message = 'Failed to add ' + trafficType + ' traffic type to basic zone. Error: ' + result.jobresult.errortext
+              message = `${this.$t('message.failed.to.add')} ` + trafficType +
+                ` ${this.$t('message.traffic.type.to.basic.zone')}. ${this.$t('label.error')}: ` +
+                result.jobresult.errortext
               reject(message)
               return
             }
@@ -1637,7 +1639,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'updatePhysicalNetwork failed. Error:' + result.jobresult.errortext
+              message = `updatePhysicalNetwork ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -1660,7 +1662,7 @@ export default {
             providerId = items[0].id
           }
           if (!type && providerId == null) {
-            message = 'error: listNetworkServiceProviders API doesn\'t return VirtualRouter provider ID'
+            message = this.$t('message.listnsp.not.return.providerid')
             reject(message)
             return
           }
@@ -1682,7 +1684,7 @@ export default {
             virtualRouterElementId = items[0].id
           }
           if (virtualRouterElementId === null) {
-            message = 'error: listVirtualRouterElements API doesn\'t return Virtual Router Element Id'
+            message = this.$t('message.virtual.router.not.return.elementid')
             reject(message)
             return
           }
@@ -1705,7 +1707,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'configureVirtualRouterElement failed. Error: ' + result.jobresult.errortext
+              message = `configureVirtualRouterElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -1730,13 +1732,13 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'updateNetworkServiceProvider failed. Error: '
+              message = `updateNetworkServiceProvider ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: `
               switch (type) {
                 case 'netscalerProvider':
-                  message = 'failed to enable Netscaler provider. Error: '
+                  message = `${this.$t('message.enable.netsacler.provider.failed')}. ${this.$t('label.error')}: `
                   break
                 case 'enableSecurityGroupProvider':
-                  message = 'failed to enable security group provider. Error: '
+                  message = `${this.$t('message.enable.securitygroup.provider.failed')}. ${this.$t('label.error')}: `
                   break
               }
               message += result.jobresult.errortext
@@ -1777,7 +1779,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'configureOvsElement failed. Error: ' + result.jobresult.errortext
+              message = `configureOvsElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -1800,7 +1802,7 @@ export default {
             internalLbElementId = items[0].id
           }
           if (internalLbElementId == null) {
-            message = 'error: listInternalLoadBalancerElements API doesn\'t return Internal LB Element Id'
+            message = this.$t('message.interloadbalance.not.return.elementid')
             reject(message)
             return
           }
@@ -1819,7 +1821,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'configureVirtualRouterElement failed. Error: ' + result.jobresult.errortext
+              message = `configureVirtualRouterElement ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -1840,7 +1842,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'addNetworkServiceProvider&name=Netscaler failed. Error: ' + result.jobresult.errortext
+              message = `addNetworkServiceProvider&name=Netscaler ${this.$t('label.failed').toLowerCase()}. ${this.$t('label.error')}: ` + result.jobresult.errortext
               reject(message)
               return
             }
@@ -2006,7 +2008,7 @@ export default {
           if (jobId) {
             const result = await this.pollJob(jobId)
             if (result.jobstatus === 2) {
-              message = 'addNetscalerDevice' + result.jobresult.errortext
+              message = 'addNetscalerDevice ' + result.jobresult.errortext
               reject(message)
               return
             }
diff --git a/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue b/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue
index 79d7396..80559e2 100644
--- a/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue
+++ b/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue
@@ -199,7 +199,7 @@ export default {
           key: 'netscalerIp',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         },
         {
           title: 'label.username',
@@ -240,14 +240,14 @@ export default {
           key: 'gslbproviderpublicip',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         },
         {
           title: 'label.gslb.service.private.ip',
           key: 'gslbproviderprivateip',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         },
         {
           title: 'label.numretries',
@@ -305,7 +305,7 @@ export default {
           placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemstartip',
           required: true,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         },
         {
           title: 'label.end.reserved.system.ip',
@@ -313,7 +313,7 @@ export default {
           placeHolder: 'message.installwizard.tooltip.addpod.reservedsystemendip',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         }
       ],
       guestTrafficFields: [
@@ -335,7 +335,7 @@ export default {
           placeHolder: 'message.installwizard.tooltip.configureguesttraffic.gueststartip',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         },
         {
           title: 'label.guest.end.ip',
@@ -343,7 +343,7 @@ export default {
           placeHolder: 'message.installwizard.tooltip.configureguesttraffic.guestendip',
           required: false,
           ipV4: true,
-          message: 'Please enter a valid IP v4 address.'
+          message: 'message.error.ipv4.address'
         }
       ]
     }
diff --git a/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue b/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
index f6981d9..c75bfc0 100644
--- a/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
+++ b/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
@@ -20,7 +20,7 @@
     <a-card
       class="ant-form-text"
       style="text-align: justify; margin: 10px 0; padding: 20px;"
-      v-html="zoneType !== null ? $t(zoneDescription[zoneType]) : 'Please select zone type below.'">
+      v-html="zoneType !== null ? $t(zoneDescription[zoneType]) : $t('message.error.select.zone.type')">
     </a-card>
     <a-table
       bordered
@@ -68,13 +68,13 @@
           centered
         >
           <a-form :form="form">
-            <span class="ant-form-text"> Please specify the traffic label you want associated with this traffic type. </span>
+            <span class="ant-form-text"> {{ $t('message.edit.traffic.type') }} </span>
             <a-form-item v-bind="formItemLayout" style="margin-top:16px;" :label="$t('label.traffic.label')">
               <a-input
                 v-decorator="['trafficLabel', {
                   rules: [{
                     required: true,
-                    message: 'Please enter traffic label',
+                    message: $t('message.error.traffic.label'),
                   }]
                 }]"
               />
@@ -148,7 +148,7 @@
     </div>
     <a-modal
       :visible="showError"
-      title="Error!"
+      :title="`${$t('label.error')}!`"
       @ok="() => { showError = false }"
       @cancel="() => { showError = false }"
       centered
diff --git a/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue b/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
index 5775cdf..16320ae 100644
--- a/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
+++ b/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
@@ -31,7 +31,7 @@
           v-decorator="['name', {
             rules: [{
               required: true,
-              message: 'Please enter zone name',
+              message: $t('message.error.zone.name'),
               initialValue: name
             }]
           }]"
@@ -46,13 +46,13 @@
             rules: [
               {
                 required: true,
-                message: 'Please enter IpV4 DNS 1',
+                message: $t('message.error.ipv4.dns1'),
                 initialValue: ipv4Dns1
               },
               {
                 validator: checkIpFormat,
                 ipV4: true,
-                message: 'Please enter a valid IP v4 address.'
+                message: $t('message.error.ipv4.address')
               }
             ]
           }]"
@@ -66,13 +66,13 @@
           v-decorator="['ipv4Dns2', {
             rules: [
               {
-                message: 'Please enter IpV4 DNS 2',
+                message: $t('message.error.ipv4.dns2'),
                 initialValue: ipv4Dns2
               },
               {
                 validator: checkIpFormat,
                 ipV4: true,
-                message: 'Please enter a valid IP v4 address.'
+                message: $t('message.error.ipv4.address')
               }
             ]
           }]"
@@ -87,13 +87,13 @@
           v-decorator="['ipv6Dns1', {
             rules: [
               {
-                message: 'Please enter IpV6 DNS 1',
+                message: $t('message.error.ipv6.dns1'),
                 initialValue: ipv6Dns1
               },
               {
                 validator: checkIpFormat,
                 ipV6: true,
-                message: 'Please enter a valid IP v6 address.'
+                message: $t('message.error.ipv6.address')
               }
             ]
           }]"
@@ -108,13 +108,13 @@
           v-decorator="['ipv6Dns2', {
             rules: [
               {
-                message: 'Please enter IpV6 DNS 2',
+                message: $t('message.error.ipv6.dns2'),
                 initialValue: ipv6Dns2
               },
               {
                 validator: checkIpFormat,
                 ipV6: true,
-                message: 'Please enter a valid IP v6 address.'
+                message: $t('message.error.ipv6.address')
               }
             ]
           }]"
@@ -129,7 +129,7 @@
           v-decorator="['ipv6Cidr', {
             rules: [
               {
-                message: 'Please enter IpV6 CIDR',
+                message: $t('message.error.ipv6.cidr'),
                 initialValue: ip6cidr
               }
             ]
@@ -145,13 +145,13 @@
           v-decorator="['ip6gateway', {
             rules: [
               {
-                message: 'Please enter IpV6 Gateway',
+                message: $t('message.error.ipv6.gateway'),
                 initialValue: ip6gateway
               },
               {
                 validator: checkIpFormat,
                 ipV6: true,
-                message: 'Please enter a valid IPv6 Gatweay.'
+                message: $t('message.error.ipv6.gateway.format')
               }
             ]
           }]"
@@ -166,13 +166,13 @@
             rules: [
               {
                 required: true,
-                message: 'Please enter Internal DNS 1',
+                message: $t('message.error.internal.dns1'),
                 initialValue: internalDns1
               },
               {
                 validator: checkIpFormat,
                 ipV4: true,
-                message: 'Please enter a valid IP v4 address.'
+                message: $t('message.error.ipv4.address')
               }
             ]
           }]"
@@ -186,13 +186,13 @@
           v-decorator="['internalDns2', {
             rules: [
               {
-                message: 'Please enter Internal DNS 2',
+                message: $t('message.error.internal.dns2'),
                 initialValue: internalDns2
               },
               {
                 validator: checkIpFormat,
                 ipV4: true,
-                message: 'Please enter a valid IP v4 address.'
+                message: $t('message.error.ipv4.address')
               }
             ]
           }]"
@@ -208,11 +208,11 @@
           v-decorator="['hypervisor',{
             rules: [{
               required: true,
-              message: 'Please select hypervisor type',
+              message: $t('message.error.hypervisor.type'),
               initialValue: currentHypervisor
             }]
           }]"
-          placeholder="Please select hypervisor type"
+          :placeholder="$t('message.error.hypervisor.type')"
         >
           <a-select-option v-for="hypervisor in hypervisors" :key="hypervisor.name">
             {{ hypervisor.name }}
@@ -228,11 +228,11 @@
           :loading="availableNetworkOfferings === null"
           v-decorator="['networkOfferingId', {
             rules: [{
-              message: 'Please select network offering',
+              message: $t('message.error.network.offering'),
               initialValue: currentNetworkOfferingId
             }]
           }]"
-          placeholder="Please select network offering"
+          :placeholder="$t('message.error.network.offering')"
         >
           <a-select-option
             v-for="networkOffering in availableNetworkOfferings"
@@ -248,7 +248,7 @@
         <a-input
           v-decorator="['networkDomain', {
             rules: [{
-              message: 'Please enter Network domain',
+              message: $t('message.error.network.domain'),
               intialValue: networkDomain
             }]
           }]"
@@ -287,7 +287,7 @@
               initialValue: domain
             }]
           }]"
-          placeholder="Please select domain to dedicate to"
+          :placeholder="$t('message.error.select.domain.to.dedicate')"
         >
           <a-select-option v-for="dom in domains" :key="dom.id">
             {{ dom.path }}
diff --git a/src/views/infra/zone/ZoneWizardZoneTypeStep.vue b/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
index 80e9ddc..52a2951 100644
--- a/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
+++ b/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
@@ -26,7 +26,7 @@
           v-decorator="['zoneType', {
             rules: [{
               required: true,
-              message: 'Please select zone type',
+              message: $t('message.error.zone.type'),
               initialValue: zoneType
             }]
           }]">
diff --git a/src/views/network/AclListRulesTab.vue b/src/views/network/AclListRulesTab.vue
index e9152a1..909d4f2 100644
--- a/src/views/network/AclListRulesTab.vue
+++ b/src/views/network/AclListRulesTab.vue
@@ -28,7 +28,7 @@
       </a-button>
 
       <a-button type="dashed" @click="exportAclList" style="width: 100%" icon="download">
-        Export ACLs
+        {{ $t('label.acl.export') }}
       </a-button>
     </div>
 
@@ -104,13 +104,13 @@
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.key') }}</p>
             <a-form-item>
-              <a-input v-decorator="['key', { rules: [{ required: true, message: 'Please specify a tag key'}] }]" />
+              <a-input v-decorator="['key', { rules: [{ required: true, message: $t('message.specifiy.tag.key')}] }]" />
             </a-form-item>
           </div>
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.value') }}</p>
             <a-form-item>
-              <a-input v-decorator="['value', { rules: [{ required: true, message: 'Please specify a tag value'}] }]" />
+              <a-input v-decorator="['value', { rules: [{ required: true, message: $t('message.specifiy.tag.value')}] }]" />
             </a-form-item>
           </div>
           <a-button type="primary" html-type="submit">{{ $t('label.add') }}</a-button>
@@ -140,22 +140,22 @@
         </a-form-item>
         <a-form-item :label="$t('label.action')">
           <a-select v-decorator="['action']">
-            <a-select-option value="allow">Allow</a-select-option>
-            <a-select-option value="deny">Deny</a-select-option>
+            <a-select-option value="allow">{{ $t('label.allow') }}</a-select-option>
+            <a-select-option value="deny">{{ $t('label.deny') }}</a-select-option>
           </a-select>
         </a-form-item>
         <a-form-item :label="$t('label.protocol')">
           <a-select v-decorator="['protocol']">
-            <a-select-option value="tcp">TCP</a-select-option>
-            <a-select-option value="udp">UDP</a-select-option>
-            <a-select-option value="icmp">ICMP</a-select-option>
-            <a-select-option value="all">ALL</a-select-option>
-            <a-select-option value="protocolnumber">Protocol number</a-select-option>
+            <a-select-option value="tcp">{{ $t('label.tcp') | capitalise }}</a-select-option>
+            <a-select-option value="udp">{{ $t('label.udp') | capitalise }}</a-select-option>
+            <a-select-option value="icmp">{{ $t('label.icmp') | capitalise }}</a-select-option>
+            <a-select-option value="all">{{ $t('label.all') }}</a-select-option>
+            <a-select-option value="protocolnumber">{{ $t('label.protocol.number') }}</a-select-option>
           </a-select>
         </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: `${this.$t('label.required')}` }]}]" />
+          <a-input v-decorator="['protocolnumber' , { rules: [{ required: true, message: `${$t('label.required')}` }]}]" />
         </a-form-item>
 
         <div v-if="ruleForm.getFieldValue('protocol') === 'icmp' || ruleForm.getFieldValue('protocol') === 'protocolnumber'">
@@ -178,8 +178,8 @@
 
         <a-form-item :label="$t('label.traffictype')">
           <a-select v-decorator="['traffictype']">
-            <a-select-option value="ingress">Ingress</a-select-option>
-            <a-select-option value="egress">Egress</a-select-option>
+            <a-select-option value="ingress">{{ $t('label.ingress') }}</a-select-option>
+            <a-select-option value="egress">{{ $t('label.egress') }}</a-select-option>
           </a-select>
         </a-form-item>
         <a-form-item :label="$t('label.reason')">
@@ -237,6 +237,12 @@ export default {
       }
     }
   },
+  filters: {
+    capitalise: val => {
+      if (val === 'all') return this.$t('label.all')
+      return val.toUpperCase()
+    }
+  },
   methods: {
     csv ({ data = null, columnDelimiter = ',', lineDelimiter = '\n' }) {
       let result = null
@@ -307,24 +313,24 @@ export default {
         resourceType: 'NetworkACL'
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Remove tag for NetworkACL`,
+          title: this.$t('message.delete.tag.for.networkacl'),
           jobid: response.deletetagsresponse.jobid,
           status: 'progress'
         })
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully deleted tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.fetchTags(this.selectedAcl)
             this.tagsLoading = false
           },
-          errorMessage: 'Failed to delete tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.fetchTags(this.selectedAcl)
             this.tagsLoading = false
           },
-          loadingMessage: `Deleting tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchTags(this.selectedAcl)
             this.tagsLoading = false
@@ -352,24 +358,24 @@ export default {
           resourceType: 'NetworkACL'
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Add tag for NetworkACL`,
+            title: this.$t('message.add.tag.for.networkacl'),
             jobid: response.createtagsresponse.jobid,
             status: 'progress'
           })
           this.$pollJob({
             jobId: response.createtagsresponse.jobid,
-            successMessage: `Successfully added new tag`,
+            successMessage: this.$t('message.success.add.tag'),
             successMethod: () => {
               this.fetchTags(this.selectedAcl)
               this.tagsLoading = false
             },
-            errorMessage: 'Failed to add new tag',
+            errorMessage: this.$t('message.add.tag.failed'),
             errorMethod: () => {
               this.fetchTags(this.selectedAcl)
               this.tagsLoading = false
             },
-            loadingMessage: `Adding new tag...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.tag.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchTags(this.selectedAcl)
               this.tagsLoading = false
@@ -382,7 +388,7 @@ export default {
       })
     },
     openEditRuleModal (acl) {
-      this.ruleModalTitle = 'Edit rule'
+      this.ruleModalTitle = this.$t('label.edit.rule')
       this.ruleFormMode = 'edit'
       this.ruleForm.resetFields()
       this.ruleModalVisible = true
@@ -426,18 +432,18 @@ export default {
           })
           this.$pollJob({
             jobId: response.createnetworkaclresponse.jobid,
-            successMessage: `Successfully edited ACL rule`,
+            successMessage: this.$t('message.success.edit.acl'),
             successMethod: () => {
               this.fetchData()
               this.fetchLoading = false
             },
-            errorMessage: 'Failed to edit ACL rule',
+            errorMessage: this.$t('message.edit.acl.failed'),
             errorMethod: () => {
               this.fetchData()
               this.fetchLoading = false
             },
-            loadingMessage: `Editing ACL rule...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.edit.acl.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchData()
               this.fetchLoading = false
@@ -453,24 +459,24 @@ export default {
       this.fetchLoading = true
       api('deleteNetworkACL', { id }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Remove ACL rule`,
+          title: this.$t('message.delete.acl.rule'),
           jobid: response.deletenetworkaclresponse.jobid,
           status: 'progress'
         })
         this.$pollJob({
           jobId: response.deletenetworkaclresponse.jobid,
-          successMessage: `Successfully removed ACL rule`,
+          successMessage: this.$t('message.success.delete.acl.rule'),
           successMethod: () => {
             this.fetchData()
             this.fetchLoading = false
           },
-          errorMessage: 'Failed to remove ACL rule',
+          errorMessage: this.$t('message.delete.acl.rule.failed'),
           errorMethod: () => {
             this.fetchData()
             this.fetchLoading = false
           },
-          loadingMessage: `Removing ACL rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.acl.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.fetchLoading = false
@@ -489,7 +495,7 @@ export default {
       if (this.ruleFormMode === 'add') this.handleAddRule(e)
     },
     openAddRuleModal () {
-      this.ruleModalTitle = 'Add rule'
+      this.ruleModalTitle = this.$t('label.add.rule')
       this.ruleModalVisible = true
       this.ruleFormMode = 'add'
       this.ruleForm.resetFields()
@@ -535,8 +541,8 @@ export default {
 
         api('createNetworkACL', {}, 'POST', data).then(() => {
           this.$notification.success({
-            message: 'Success',
-            description: 'Successfully added new rule'
+            message: this.$t('label.success'),
+            description: this.$t('message.success.add.rule')
           })
         }).catch(error => {
           this.$notifyError(error)
@@ -562,24 +568,24 @@ export default {
         nextaclruleid
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Move ACL rule order`,
+          title: this.$t('message.move.acl.order'),
           jobid: response.moveNetworkAclItemResponse.jobid,
           status: 'progress'
         })
         this.$pollJob({
           jobId: response.moveNetworkAclItemResponse.jobid,
-          successMessage: `Successfully moved ACL rule`,
+          successMessage: this.$t('message.success.move.acl.order'),
           successMethod: () => {
             this.fetchData()
             this.fetchLoading = false
           },
-          errorMessage: 'Failed to move ACL rule',
+          errorMessage: this.$t('message.move.acl.order.failed'),
           errorMethod: () => {
             this.fetchData()
             this.fetchLoading = false
           },
-          loadingMessage: `Moving ACL rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.move.acl.order.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.fetchLoading = false
diff --git a/src/views/network/CreateIsolatedNetworkForm.vue b/src/views/network/CreateIsolatedNetworkForm.vue
index 549dce0..85d6b55 100644
--- a/src/views/network/CreateIsolatedNetworkForm.vue
+++ b/src/views/network/CreateIsolatedNetworkForm.vue
@@ -32,7 +32,7 @@
             </span>
             <a-input
               v-decorator="['name', {
-                rules: [{ required: true, message: 'Please enter name' }]
+                rules: [{ required: true, message: $t('message.error.name') }]
               }]"
               :placeholder="this.$t('label.name')"/>
           </a-form-item>
@@ -45,7 +45,7 @@
             </span>
             <a-input
               v-decorator="['displaytext', {
-                rules: [{ required: true, message: 'Please enter display text' }]
+                rules: [{ required: true, message: $t('message.error.display.text') }]
               }]"
               :placeholder="this.$t('label.display.text')"/>
           </a-form-item>
@@ -138,7 +138,7 @@
             </span>
             <a-input
               v-decorator="['vlanid', {
-                rules: [{ required: true, message: 'Please enter value' }]
+                rules: [{ required: true, message: $t('message.please.enter.value') }]
               }]"
               :placeholder="this.$t('label.vlanid')"/>
           </a-form-item>
@@ -225,7 +225,7 @@
             <a-input
               v-decorator="['account', {
                 rules: [
-                  { required: true, message: this.$t('label.required') }
+                  { required: true, message: $t('label.required') }
                 ]
               }]"
               :placeholder="this.$t('label.account')"/>
@@ -482,7 +482,7 @@ export default {
         api('createNetwork', params).then(json => {
           this.$notification.success({
             message: 'Network',
-            description: 'Successfully created isolated network'
+            description: this.$t('message.success.create.isolated.network')
           })
           this.$emit('refresh-data')
         }).catch(error => {
diff --git a/src/views/network/CreateL2NetworkForm.vue b/src/views/network/CreateL2NetworkForm.vue
index e8962ba..23f3f98 100644
--- a/src/views/network/CreateL2NetworkForm.vue
+++ b/src/views/network/CreateL2NetworkForm.vue
@@ -32,7 +32,7 @@
             </span>
             <a-input
               v-decorator="['name', {
-                rules: [{ required: true, message: 'Please enter name' }]
+                rules: [{ required: true, message: $t('message.error.name') }]
               }]"
               :placeholder="this.$t('label.name')"/>
           </a-form-item>
@@ -45,7 +45,7 @@
             </span>
             <a-input
               v-decorator="['displaytext', {
-                rules: [{ required: true, message: 'Please enter display text' }]
+                rules: [{ required: true, message: $t('message.error.display.text') }]
               }]"
               :placeholder="this.$t('label.displaytext')"/>
           </a-form-item>
@@ -138,7 +138,7 @@
             </span>
             <a-input
               v-decorator="['vlanid', {
-                rules: [{ required: true, message: 'Please enter value' }]
+                rules: [{ required: true, message: $t('message.please.enter.value') }]
               }]"
               :placeholder="this.$t('label.vlanid')"/>
           </a-form-item>
@@ -199,7 +199,7 @@
             <a-input
               v-decorator="['account', {
                 rules: [
-                  { required: true, message: this.$t('label.required') }
+                  { required: true, message: $t('label.required') }
                 ]
               }]"
               :placeholder="this.$t('label.account')"/>
@@ -424,7 +424,7 @@ export default {
         api('createNetwork', params).then(json => {
           this.$notification.success({
             message: 'Network',
-            description: 'Successfully created L2 network'
+            description: this.$t('message.success.create.l2.network')
           })
         }).catch(error => {
           this.$notifyError(error)
diff --git a/src/views/network/CreateSharedNetworkForm.vue b/src/views/network/CreateSharedNetworkForm.vue
index c7b929f..f7820d0 100644
--- a/src/views/network/CreateSharedNetworkForm.vue
+++ b/src/views/network/CreateSharedNetworkForm.vue
@@ -32,7 +32,7 @@
             </span>
             <a-input
               v-decorator="['name', {
-                rules: [{ required: true, message: 'Please enter name' }]
+                rules: [{ required: true, message: $t('message.error.name') }]
               }]"
               :placeholder="this.$t('label.name')"/>
           </a-form-item>
@@ -45,7 +45,7 @@
             </span>
             <a-input
               v-decorator="['displaytext', {
-                rules: [{ required: true, message: 'Please enter display text' }]
+                rules: [{ required: true, message: $t('message.error.display.text') }]
               }]"
               :placeholder="this.$t('label.display.text')"/>
           </a-form-item>
@@ -109,7 +109,7 @@
             </span>
             <a-input
               v-decorator="['vlanid', {
-                rules: [{ required: true, message: 'Please enter value' }]
+                rules: [{ required: true, message: $t('message.please.enter.value') }]
               }]"
               :placeholder="this.$t('label.vlanid')"/>
           </a-form-item>
@@ -713,8 +713,8 @@ export default {
             !this.isValidTextValueForKey(values, 'startipv6') && !this.isValidTextValueForKey(values, 'endipv6'))
         ) {
           this.$notification.error({
-            message: 'Request Failed',
-            description: 'Either IPv4 fields or IPv6 fields need to be filled when adding a guest network'
+            message: this.$t('message.request.failed'),
+            description: this.$t('message.error.add.guest.network')
           })
         }
         this.actionLoading = true
@@ -791,8 +791,8 @@ export default {
         }
         api('createNetwork', params).then(json => {
           this.$notification.success({
-            message: 'Network',
-            description: 'Successfully created guest network'
+            message: this.$t('label.network'),
+            description: this.$t('message.success.add.guest.network')
           })
           this.resetForm()
         }).catch(error => {
diff --git a/src/views/network/CreateVpnCustomerGateway.vue b/src/views/network/CreateVpnCustomerGateway.vue
index 12a7bea..865044e 100644
--- a/src/views/network/CreateVpnCustomerGateway.vue
+++ b/src/views/network/CreateVpnCustomerGateway.vue
@@ -22,7 +22,7 @@
           v-decorator="[
             'name',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}` }],
+              rules: [{ required: true, message: `${$t('label.required')}` }],
             }
           ]"
           :placeholder="$t('label.vpncustomergatewayname')" />
@@ -32,7 +32,7 @@
           v-decorator="[
             'gateway',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}`}],
+              rules: [{ required: true, message: `${$t('label.required')}`}],
             }
           ]"
           :placeholder="$t('label.vpncustomergateway')" />
@@ -42,7 +42,7 @@
           v-decorator="[
             'cidrlist',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}`}],
+              rules: [{ required: true, message: `${$t('label.required')}`}],
             }
           ]"
           :placeholder="$t('label.vpncustomergateway.cidrlist')" />
@@ -53,7 +53,7 @@
           v-decorator="[
             'ipsecpsk',
             {
-              rules: [{ required: true, message: `${this.$t('label.required')}`}],
+              rules: [{ required: true, message: `${$t('label.required')}`}],
             }
           ]"
           :placeholder="$t('label.vpncustomergateway.secretkey')" />
@@ -271,25 +271,25 @@ export default {
           esppolicy: esppolicy
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Adding VPN customer gateway`,
+            title: this.$t('message.add.vpn.customer.gateway'),
             jobid: response.createvpncustomergatewayresponse.jobid,
             description: values.name,
             status: 'progress'
           })
           this.$pollJob({
             jobId: response.createvpncustomergatewayresponse.jobid,
-            successMessage: `Successfully added VPN customer gateway`,
+            successMessage: this.$t('message.success.add.vpn.customer.gateway'),
             successMethod: () => {
               this.closeModal()
               this.parentFetchData()
             },
-            errorMessage: 'VPN customer gateway creation failed' + response,
+            errorMessage: `${this.$t('message.create.vpn.customer.gateway.failed')} ` + response,
             errorMethod: () => {
               this.closeModal()
               this.parentFetchData()
             },
-            loadingMessage: `Creation of VPN customer gateway is in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.vpn.customer.gateway.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.closeModal()
             }
@@ -297,7 +297,7 @@ export default {
           this.closeModal()
         }).catch(error => {
           console.error(error)
-          this.$message.error('Failed to Add VPN customer gateway')
+          this.$message.error(this.$t('message.success.add.vpn.customer.gateway'))
         }).finally(() => {
           this.form.resetFields()
           this.closeModal()
diff --git a/src/views/network/EgressRulesTab.vue b/src/views/network/EgressRulesTab.vue
index 96c764a..b77d7c9 100644
--- a/src/views/network/EgressRulesTab.vue
+++ b/src/views/network/EgressRulesTab.vue
@@ -30,10 +30,10 @@
         <div class="form__item">
           <div class="form__label">{{ $t('label.protocol') }}</div>
           <a-select v-model="newRule.protocol" style="width: 100%;" @change="resetRulePorts">
-            <a-select-option value="tcp">TCP</a-select-option>
-            <a-select-option value="udp">UDP</a-select-option>
-            <a-select-option value="icmp">ICMP</a-select-option>
-            <a-select-option value="all">All</a-select-option>
+            <a-select-option value="tcp">{{ $t('label.tcp') | capitalise }}</a-select-option>
+            <a-select-option value="udp">{{ $t('label.udp') | capitalise }}</a-select-option>
+            <a-select-option value="icmp">{{ $t('label.icmp') | capitalise }}</a-select-option>
+            <a-select-option value="all">{{ $t('label.all') }}</a-select-option>
           </a-select>
         </div>
         <div v-show="newRule.protocol === 'tcp' || newRule.protocol === 'udp'" class="form__item">
@@ -87,7 +87,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -142,11 +142,11 @@ export default {
           scopedSlots: { customRender: 'protocol' }
         },
         {
-          title: `ICMP Type / Start Port`,
+          title: this.$t('label.icmptype.start.port'),
           scopedSlots: { customRender: 'startport' }
         },
         {
-          title: `ICMP Code / End Port`,
+          title: this.$t('label.icmpcode.end.port'),
           scopedSlots: { customRender: 'endport' }
         },
         {
@@ -161,7 +161,7 @@ export default {
   },
   filters: {
     capitalise: val => {
-      if (val === 'all') return 'All'
+      if (val === 'all') return this.$t('label.all')
       return val.toUpperCase()
     }
   },
@@ -194,12 +194,12 @@ export default {
       api('deleteEgressFirewallRule', { id: rule.id }).then(response => {
         this.$pollJob({
           jobId: response.deleteegressfirewallruleresponse.jobid,
-          successMessage: `Successfully removed Egress rule`,
+          successMessage: this.$t('message.success.remove.egress.rule'),
           successMethod: () => this.fetchData(),
-          errorMessage: 'Removing Egress rule failed',
+          errorMessage: this.$t('message.remove.egress.rule.failed'),
           errorMethod: () => this.fetchData(),
-          loadingMessage: `Deleting Egress rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.egress.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => this.fetchData()
         })
       }).catch(error => {
@@ -212,18 +212,18 @@ export default {
       api('createEgressFirewallRule', { ...this.newRule }).then(response => {
         this.$pollJob({
           jobId: response.createegressfirewallruleresponse.jobid,
-          successMessage: `Successfully added new Egress rule`,
+          successMessage: this.$t('message.success.add.egress.rule'),
           successMethod: () => {
             this.resetAllRules()
             this.fetchData()
           },
-          errorMessage: 'Adding new Egress rule failed',
+          errorMessage: this.$t('message.add.egress.rule.failed'),
           errorMethod: () => {
             this.resetAllRules()
             this.fetchData()
           },
-          loadingMessage: `Adding new Egress rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.egress.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.resetAllRules()
             this.fetchData()
diff --git a/src/views/network/EnableStaticNat.vue b/src/views/network/EnableStaticNat.vue
index a6240f5..d445e6d 100644
--- a/src/views/network/EnableStaticNat.vue
+++ b/src/views/network/EnableStaticNat.vue
@@ -19,7 +19,7 @@
   <div class="list" :loading="loading">
     <div class="list__header">
       <div class="list__header__col" v-if="tiersSelect">
-        <a-select @change="handleTierSelect" v-model="vpcTiers" placeholder="Select a tier">
+        <a-select @change="handleTierSelect" v-model="vpcTiers" :placeholder="$t('label.select.tier')">
           <a-select-option v-for="network in networksList" :key="network.id" :value="network.id">
             {{ network.name }}
           </a-select-option>
@@ -74,7 +74,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="vmsList.length"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -138,7 +138,7 @@ export default {
           dataIndex: 'zonename'
         },
         {
-          title: 'Select',
+          title: this.$t('label.select'),
           dataIndex: 'id',
           scopedSlots: { customRender: 'radio' }
         }
diff --git a/src/views/network/FirewallRules.vue b/src/views/network/FirewallRules.vue
index 9a08f0d..c327b25 100644
--- a/src/views/network/FirewallRules.vue
+++ b/src/views/network/FirewallRules.vue
@@ -91,7 +91,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -233,12 +233,12 @@ export default {
       api('deleteFirewallRule', { id: rule.id }).then(response => {
         this.$pollJob({
           jobId: response.deletefirewallruleresponse.jobid,
-          successMessage: `Successfully removed Firewall rule`,
+          successMessage: this.$t('message.success.remove.firewall.rule'),
           successMethod: () => this.fetchData(),
-          errorMessage: 'Removing Firewall rule failed',
+          errorMessage: this.$t('message.remove.firewall.rule.failed'),
           errorMethod: () => this.fetchData(),
-          loadingMessage: `Deleting Firewall rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.firewall.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => this.fetchData()
         })
       }).catch(error => {
@@ -251,18 +251,18 @@ export default {
       api('createFirewallRule', { ...this.newRule }).then(response => {
         this.$pollJob({
           jobId: response.createfirewallruleresponse.jobid,
-          successMessage: `Successfully added new Firewall rule`,
+          successMessage: this.$t('message.success.add.firewall.rule'),
           successMethod: () => {
             this.resetAllRules()
             this.fetchData()
           },
-          errorMessage: 'Adding new Firewall rule failed',
+          errorMessage: this.$t('message.add.firewall.rule.failed'),
           errorMethod: () => {
             this.resetAllRules()
             this.fetchData()
           },
-          loadingMessage: `Adding new Firewall rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.firewall.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.resetAllRules()
             this.fetchData()
@@ -316,20 +316,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.createtagsresponse.jobid,
-          successMessage: `Successfully added tag`,
+          successMessage: this.$t('message.success.add.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.openTagsModal(this.selectedRule)
           },
-          errorMessage: 'Failed to add new tag',
+          errorMessage: this.$t('message.add.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.closeModal()
           },
-          loadingMessage: `Adding tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -352,20 +352,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully removed tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.openTagsModal(this.selectedRule)
           },
-          errorMessage: 'Failed to remove tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.closeModal()
           },
-          loadingMessage: `Removing tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
diff --git a/src/views/network/IngressEgressRuleConfigure.vue b/src/views/network/IngressEgressRuleConfigure.vue
index 34bb867..1a34351 100644
--- a/src/views/network/IngressEgressRuleConfigure.vue
+++ b/src/views/network/IngressEgressRuleConfigure.vue
@@ -20,10 +20,10 @@
 
     <div>
       <div style="margin-bottom: 20px;">
-        <div class="form__label">Add by:</div>
+        <div class="form__label">{{ $t('label.add.by') }}:</div>
         <a-radio-group @change="resetAllRules" v-model="addType">
-          <a-radio value="cidr">CIDR</a-radio>
-          <a-radio value="account">Account</a-radio>
+          <a-radio value="cidr">{{ $t('label.cidr') }}</a-radio>
+          <a-radio value="account">{{ $t('label.account') }}</a-radio>
         </a-radio-group>
       </div>
 
@@ -59,11 +59,11 @@
           <a-input v-model="newRule.icmpcode"></a-input>
         </div>
         <div class="form__item" v-if="addType === 'cidr'">
-          <div class="form__label">CIDR</div>
+          <div class="form__label">{{ $t('label.cidr') }}</div>
           <a-input v-model="newRule.cidrlist"></a-input>
         </div>
         <div class="form__item" v-if="addType === 'account'">
-          <div class="form__label">Account, Security Group</div>
+          <div class="form__label">{{ $t('label.account.and.security.group') }}</div>
           <div style="display:flex;">
             <a-input v-model="newRule.usersecuritygrouplist.account" style="margin-right: 10px;"></a-input>
             <a-input v-model="newRule.usersecuritygrouplist.group"></a-input>
@@ -103,8 +103,8 @@
         <a-popconfirm
           :title="$t('label.delete') + '?'"
           @confirm="handleDeleteRule(record)"
-          okText="Yes"
-          cancelText="No"
+          :okText="$t('label.yes')"
+          :cancelText="$t('label.no')"
         >
           <a-button :disabled="!('revokeSecurityGroupIngress' in $store.getters.apis) && !('revokeSecurityGroupEgress' in $store.getters.apis)" shape="circle" type="danger" icon="delete" class="rule-action" />
         </a-popconfirm>
@@ -119,13 +119,13 @@
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.key') }}</p>
             <a-form-item>
-              <a-input v-decorator="['key', { rules: [{ required: true, message: 'Please specify a tag key'}] }]" />
+              <a-input v-decorator="['key', { rules: [{ required: true, message: this.$t('message.specifiy.tag.key')}] }]" />
             </a-form-item>
           </div>
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.value') }}</p>
             <a-form-item>
-              <a-input v-decorator="['value', { rules: [{ required: true, message: 'Please specify a tag value'}] }]" />
+              <a-input v-decorator="['value', { rules: [{ required: true, message: this.$t('message.specifiy.tag.value')}] }]" />
             </a-form-item>
           </div>
           <a-button type="primary" html-type="submit">{{ $t('label.add') }}</a-button>
@@ -205,19 +205,19 @@ export default {
           scopedSlots: { customRender: 'endport' }
         },
         {
-          title: 'ICMP Type',
+          title: this.$t('label.icmptype'),
           dataIndex: 'icmptype'
         },
         {
-          title: 'ICMP Code',
+          title: this.$t('label.icmpcode'),
           dataIndex: 'icmpcode'
         },
         {
-          title: 'CIDR',
+          title: this.$t('label.cidr'),
           dataIndex: 'cidr'
         },
         {
-          title: 'Account, Security Group',
+          title: this.$t('label.account.and.security.group'),
           scopedSlots: { customRender: 'account' }
         },
         {
@@ -238,7 +238,7 @@ export default {
   },
   filters: {
     capitalise: val => {
-      if (val === 'all') return 'All'
+      if (val === 'all') return this.$t('label.all')
       return val.toUpperCase()
     }
   },
@@ -268,18 +268,18 @@ export default {
         this.$pollJob({
           jobId: this.tabType === 'ingress' ? response.authorizesecuritygroupingressresponse.jobid
             : response.authorizesecuritygroupegressresponse.jobid,
-          successMessage: `Successfully added new rule`,
+          successMessage: this.$t('message.success.add.rule'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          errorMessage: 'Failed to add new rule',
+          errorMessage: this.$t('message.add.rule.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          loadingMessage: `Adding new security-group rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -300,18 +300,18 @@ export default {
         this.$pollJob({
           jobId: this.tabType === 'ingress' ? response.revokesecuritygroupingressresponse.jobid
             : response.revokesecuritygroupegressresponse.jobid,
-          successMessage: `Successfully deleted rule`,
+          successMessage: this.$t('message.success.remove.rule'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          errorMessage: 'Failed to delete rule',
+          errorMessage: this.$t('message.remove.rule.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          loadingMessage: `Deleting security-group rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.securitygroup.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -344,22 +344,22 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully deleted tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchTags(this.selectedRule)
             this.tagsLoading = false
           },
-          errorMessage: 'Failed to delete tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchTags(this.selectedRule)
             this.tagsLoading = false
           },
-          loadingMessage: `Deleting tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -392,22 +392,22 @@ export default {
         }).then(response => {
           this.$pollJob({
             jobId: response.createtagsresponse.jobid,
-            successMessage: `Successfully added new tag`,
+            successMessage: this.$t('message.success.add.tag'),
             successMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
               this.fetchTags(this.selectedRule)
               this.tagsLoading = false
             },
-            errorMessage: 'Failed to add new tag',
+            errorMessage: this.$t('message.add.tag.failed'),
             errorMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
               this.fetchTags(this.selectedRule)
               this.tagsLoading = false
             },
-            loadingMessage: `Adding new tag...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.tag.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
diff --git a/src/views/network/InternalLBAssignVmForm.vue b/src/views/network/InternalLBAssignVmForm.vue
index 2be3927..848e905 100644
--- a/src/views/network/InternalLBAssignVmForm.vue
+++ b/src/views/network/InternalLBAssignVmForm.vue
@@ -42,7 +42,7 @@
               v-model="iLb.vmguestip[index]"
             >
               <a-select-option v-for="(nic, nicIndex) in nics[index]" :key="nic" :value="nic">
-                {{ nic }}{{ nicIndex === 0 ? ' (Primary)' : null }}
+                {{ nic }}{{ nicIndex === 0 ? ` (${this.$t('label.primary')})` : null }}
               </a-select-option>
             </a-select>
           </span>
@@ -61,7 +61,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="vmCounts"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -205,20 +205,20 @@ export default {
       api('assignToLoadBalancerRule', this.params).then(response => {
         this.$pollJob({
           jobId: response.assigntoloadbalancerruleresponse.jobid,
-          successMessage: `Successfully assigned VMs to ${this.resource.name}`,
+          successMessage: `${this.$t('message.success.assigned.vms')} ${this.$t('label.to')} ${this.resource.name}`,
           successMethod: () => {
             this.$emit('refresh-data')
           },
-          errorMessage: `Failed to assign VMs to ${this.resource.name}`,
+          errorMessage: `${this.$t('message.failed.to.assign.vms')} ${this.$t('label.to')} ${this.resource.name}`,
           errorMethod: () => {
             this.$emit('refresh-data')
           },
-          loadingMessage: `Assigning VMs to ${this.resource.name}`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.assigning.vms')} ${this.$t('label.to')} ${this.resource.name}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
diff --git a/src/views/network/InternalLBAssignedVmTab.vue b/src/views/network/InternalLBAssignedVmTab.vue
index c74e74b..9971a40 100644
--- a/src/views/network/InternalLBAssignedVmTab.vue
+++ b/src/views/network/InternalLBAssignedVmTab.vue
@@ -50,7 +50,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalInstances"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
       @showSizeChange="changePageSize"
@@ -130,18 +130,18 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.removefromloadbalancerruleresponse.jobid,
-          successMessage: `Successfully removed IP ${vm.name} from ${this.resource.name}`,
+          successMessage: `${this.$t('message.success.remove.ip')} ${vm.name} ${this.$t('label.from')} ${this.resource.name}`,
           successMethod: () => {
             this.fetchLoading = false
             this.fetchData()
           },
-          errorMessage: `Failed to remove ${vm.name} from the LB`,
+          errorMessage: `${this.$t('message.failed.to.remove')} ${vm.name} ${this.$t('label.from.lb')}`,
           errorMethod: () => {
             this.fetchLoading = false
             this.fetchData()
           },
-          loadingMessage: `Removing ${vm.name} from LB is in progress`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.removing')} ${vm.name} ${this.$t('label.from.lb')} ${this.$t('label.in.progress')}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       })
     },
diff --git a/src/views/network/IpAddressesTab.vue b/src/views/network/IpAddressesTab.vue
index 3de8e3e..7b84f37 100644
--- a/src/views/network/IpAddressesTab.vue
+++ b/src/views/network/IpAddressesTab.vue
@@ -85,7 +85,7 @@
         :current="page"
         :pageSize="pageSize"
         :total="totalIps"
-        :showTotal="total => `Total ${total} ${$t('label.items')}`"
+        :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
         :pageSizeOptions="['10', '20', '40', '80', '100']"
         @change="changePage"
         @showSizeChange="changePageSize"
@@ -264,20 +264,20 @@ export default {
       api('associateIpAddress', params).then(response => {
         this.$pollJob({
           jobId: response.associateipaddressresponse.jobid,
-          successMessage: `Successfully acquired IP for ${this.resource.name}`,
+          successMessage: `${this.$t('message.success.acquire.ip')} ${this.$t('label.for')} ${this.resource.name}`,
           successMethod: () => {
             this.fetchData()
           },
-          errorMessage: 'Failed to acquire IP',
+          errorMessage: this.$t('message.acquire.ip.failed'),
           errorMethod: () => {
             this.fetchData()
           },
-          loadingMessage: `Acquiring IP for ${this.resource.name} is in progress`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.acquiring.ip')}} ${this.$t('label.for')} ${this.resource.name} ${this.$t('label.is.in.progress')}}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       }).catch(error => {
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
@@ -293,21 +293,21 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.disassociateipaddressresponse.jobid,
-          successMessage: 'Successfully released IP',
+          successMessage: this.$t('message.success.release.ip'),
           successMethod: () => {
             this.fetchData()
           },
-          errorMessage: 'Failed to release IP',
+          errorMessage: this.$t('message.release.ip.failed'),
           errorMethod: () => {
             this.fetchData()
           },
-          loadingMessage: `Releasing IP for ${this.resource.name} is in progress`,
-          catchMessage: 'Error encountered while fetching async job result'
+          loadingMessage: `${this.$t('label.releasing.ip')} ${this.$t('label.for')} ${this.resource.name} ${this.$t('label.is.in.progress')}`,
+          catchMessage: this.$t('error.fetching.async.job.result')
         })
       }).catch(error => {
         this.fetchLoading = false
         this.$notification.error({
-          message: `Error ${error.response.status}`,
+          message: `${this.$t('label.error')} ${error.response.status}`,
           description: error.response.data.errorresponse.errortext,
           duration: 0
         })
diff --git a/src/views/network/LoadBalancing.vue b/src/views/network/LoadBalancing.vue
index 8c46864..f99e8b9 100644
--- a/src/views/network/LoadBalancing.vue
+++ b/src/views/network/LoadBalancing.vue
@@ -22,39 +22,41 @@
         <div class="form__item" ref="newRuleName">
           <div class="form__label"><span class="form__required">*</span>{{ $t('label.name') }}</div>
           <a-input v-model="newRule.name"></a-input>
-          <span class="error-text">Required</span>
+          <span class="error-text">{{ $t('label.required') }}</span>
         </div>
         <div class="form__item" ref="newRulePublicPort">
           <div class="form__label"><span class="form__required">*</span>{{ $t('label.publicport') }}</div>
           <a-input v-model="newRule.publicport"></a-input>
-          <span class="error-text">Required</span>
+          <span class="error-text">{{ $t('label.required') }}</span>
         </div>
         <div class="form__item" ref="newRulePrivatePort">
           <div class="form__label"><span class="form__required">*</span>{{ $t('label.privateport') }}</div>
           <a-input v-model="newRule.privateport"></a-input>
-          <span class="error-text">Required</span>
+          <span class="error-text">{{ $t('label.required') }}</span>
         </div>
       </div>
       <div class="form">
         <div class="form__item">
           <div class="form__label">{{ $t('label.algorithm') }}</div>
           <a-select v-model="newRule.algorithm">
-            <a-select-option value="roundrobin">Round-robin</a-select-option>
-            <a-select-option value="leastconn">Least connections</a-select-option>
-            <a-select-option value="source">Source</a-select-option>
+            <a-select-option value="roundrobin">{{ $t('label.lb.algorithm.roundrobin') }}</a-select-option>
+            <a-select-option value="leastconn">{{ $t('label.lb.algorithm.leastconn') }}</a-select-option>
+            <a-select-option value="source">{{ $t('label.lb.algorithm.source') }}</a-select-option>
           </a-select>
         </div>
         <div class="form__item">
           <div class="form__label">{{ $t('label.protocol') }}</div>
           <a-select v-model="newRule.protocol" style="min-width: 100px">
-            <a-select-option value="tcp-proxy">TCP Proxy</a-select-option>
-            <a-select-option value="tcp">TCP</a-select-option>
-            <a-select-option value="udp">UDP</a-select-option>
+            <a-select-option value="tcp-proxy">{{ $t('label.tcp.proxy') }}</a-select-option>
+            <a-select-option value="tcp">{{ $t('label.tcp') }}</a-select-option>
+            <a-select-option value="udp">{{ $t('label.udp') }}</a-select-option>
           </a-select>
         </div>
         <div class="form__item">
           <div class="form__label" style="white-space: nowrap;">{{ $t('label.add.vms') }}</div>
-          <a-button :disabled="!('createLoadBalancerRule' in $store.getters.apis)" type="primary" @click="handleOpenAddVMModal">Add</a-button>
+          <a-button :disabled="!('createLoadBalancerRule' in $store.getters.apis)" type="primary" @click="handleOpenAddVMModal">
+            {{ $t('label.add') }}
+          </a-button>
         </div>
       </div>
     </div>
@@ -113,8 +115,8 @@
           <a-popconfirm
             :title="$t('label.delete') + '?'"
             @confirm="handleDeleteRule(record)"
-            okText="Yes"
-            cancelText="No"
+            :okText="$t('label.yes')"
+            :cancelText="$t('label.no')"
           >
             <a-button :disabled="!('deleteLoadBalancerRule' in $store.getters.apis)" shape="circle" type="danger" icon="delete" />
           </a-popconfirm>
@@ -127,7 +129,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -146,13 +148,13 @@
         <div class="add-tags__input">
           <p class="add-tags__label">{{ $t('label.key') }}</p>
           <a-form-item>
-            <a-input v-decorator="['key', { rules: [{ required: true, message: 'Please specify a tag key'}] }]" />
+            <a-input v-decorator="['key', { rules: [{ required: true, message: this.$t('message.specifiy.tag.key')}] }]" />
           </a-form-item>
         </div>
         <div class="add-tags__input">
           <p class="add-tags__label">{{ $t('label.value') }}</p>
           <a-form-item>
-            <a-input v-decorator="['value', { rules: [{ required: true, message: 'Please specify a tag value'}] }]" />
+            <a-input v-decorator="['value', { rules: [{ required: true, message: this.$t('message.specifiy.tag.value')}] }]" />
           </a-form-item>
         </div>
         <a-button :disabled="!('createTags' in $store.getters.apis)" type="primary" html-type="submit">{{ $t('label.add') }}</a-button>
@@ -185,17 +187,17 @@
       <a-form :form="stickinessPolicyForm" @submit="handleSubmitStickinessForm" class="custom-ant-form">
         <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>
-            <a-select-option value="SourceBased">SourceBased</a-select-option>
-            <a-select-option value="none">None</a-select-option>
+            <a-select-option value="LbCookie">{{ $t('label.lb.cookie') }}</a-select-option>
+            <a-select-option value="AppCookie">{{ $t('label.app.cookie') }}</a-select-option>
+            <a-select-option value="SourceBased">{{ $t('label.source.based') }}</a-select-option>
+            <a-select-option value="none">{{ $t('label.none') }}</a-select-option>
           </a-select>
         </a-form-item>
         <a-form-item
           :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-input v-decorator="['name', { rules: [{ required: true, message: $t('message.error.specify.sticky.name')}] }]" />
         </a-form-item>
         <a-form-item
           :label="$t('label.sticky.cookie-name')"
@@ -239,7 +241,7 @@
         <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-button type="primary" html-type="submit">{{ $t('label.ok') }}</a-button>
       </a-form>
     </a-modal>
 
@@ -256,24 +258,24 @@
         <div class="edit-rule__item">
           <p class="edit-rule__label">{{ $t('label.algorithm') }}</p>
           <a-select v-model="editRuleDetails.algorithm">
-            <a-select-option value="roundrobin">Round-robin</a-select-option>
-            <a-select-option value="leastconn">Least connections</a-select-option>
-            <a-select-option value="source">Source</a-select-option>
+            <a-select-option value="roundrobin">{{ $t('label.lb.algorithm.roundrobin') }}</a-select-option>
+            <a-select-option value="leastconn">{{ $t('label.lb.algorithm.leastconn') }}</a-select-option>
+            <a-select-option value="source">{{ $t('label.lb.algorithm.source') }}</a-select-option>
           </a-select>
         </div>
         <div class="edit-rule__item">
           <p class="edit-rule__label">{{ $t('label.protocol') }}</p>
           <a-select v-model="editRuleDetails.protocol">
-            <a-select-option value="tcp-proxy">TCP proxy</a-select-option>
-            <a-select-option value="tcp">TCP</a-select-option>
-            <a-select-option value="udp">UDP</a-select-option>
+            <a-select-option value="tcp-proxy">{{ $t('label.tcp.proxy') }}</a-select-option>
+            <a-select-option value="tcp">{{ $t('label.tcp') }}</a-select-option>
+            <a-select-option value="udp">{{ $t('label.udp') }}</a-select-option>
           </a-select>
         </div>
       </div>
     </a-modal>
 
     <a-modal
-      title="Add VMs"
+      :title="$t('label.add.vms')"
       v-model="addVmModalVisible"
       class="vm-modal"
       width="60vw"
@@ -300,7 +302,7 @@
         </span>
         <a-input-search
           class="input-search"
-          placeholder="Search"
+          :placeholder="$t('label.search')"
           v-model="searchQuery"
           allowClear
           @search="onSearch" />
@@ -325,7 +327,7 @@
               v-model="newRule.vmguestip[index]"
             >
               <a-select-option v-for="(nic, nicIndex) in nics[index]" :key="nic" :value="nic">
-                {{ nic }}{{ nicIndex === 0 ? ' (Primary)' : null }}
+                {{ nic }}{{ nicIndex === 0 ? ` (${this.$t('label.primary')})` : null }}
               </a-select-option>
             </a-select>
           </div>
@@ -344,7 +346,7 @@
           :current="vmPage"
           :pageSize="vmPageSize"
           :total="vmCount"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="handleChangePage"
           @showSizeChange="handleChangePageSize"
@@ -514,7 +516,7 @@ export default {
   },
   filters: {
     capitalise: val => {
-      if (val === 'all') return 'All'
+      if (val === 'all') return this.$t('label.all')
       return val.toUpperCase()
     }
   },
@@ -652,20 +654,20 @@ export default {
         }).then(response => {
           this.$pollJob({
             jobId: response.createtagsresponse.jobid,
-            successMessage: `Successfully added tag`,
+            successMessage: this.$t('message.success.add.tag'),
             successMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
               this.openTagsModal(this.selectedRule)
             },
-            errorMessage: 'Failed to add new tag',
+            errorMessage: this.$t('message.add.tag.failed'),
             errorMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
               this.closeModal()
             },
-            loadingMessage: `Adding tag...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.tag.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.parentFetchData()
               this.parentToggleLoading()
@@ -688,20 +690,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully removed tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.openTagsModal(this.selectedRule)
           },
-          errorMessage: 'Failed to remove tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.closeModal()
           },
-          loadingMessage: `Removing tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -746,22 +748,22 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.createLBStickinessPolicy.jobid,
-          successMessage: `Successfully configured sticky policy`,
+          successMessage: this.$t('message.success.config.sticky.policy'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          errorMessage: 'Failed to configure sticky policy',
+          errorMessage: this.$t('message.config.sticky.policy.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          loadingMessage: `Updating sticky policy...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.config.sticky.policy.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -779,22 +781,22 @@ export default {
       api('deleteLBStickinessPolicy', { id: this.selectedStickinessPolicy.id }).then(response => {
         this.$pollJob({
           jobId: response.deleteLBstickinessrruleresponse.jobid,
-          successMessage: `Successfully removed sticky policy`,
+          successMessage: this.$t('message.success.remove.sticky.policy'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          errorMessage: 'Failed to remove sticky policy',
+          errorMessage: this.$t('message.remove.sticky.policy.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          loadingMessage: `Removing sticky policy...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.sticky.policy.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -857,16 +859,16 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.removefromloadbalancerruleresponse.jobid,
-          successMessage: `Successfully removed instance from rule`,
+          successMessage: this.$t('message.success.remove.instance.rule'),
           successMethod: () => {
             this.fetchData()
           },
-          errorMessage: 'Failed to remove instance',
+          errorMessage: this.$t('message.remove.instance.failed'),
           errorMethod: () => {
             this.fetchData()
           },
-          loadingMessage: `Removing...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.remove.instance.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
           }
@@ -892,22 +894,22 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.updateloadbalancerruleresponse.jobid,
-          successMessage: `Successfully edited rule`,
+          successMessage: this.$t('message.success.edit.rule'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          errorMessage: 'Failed to edit rule',
+          errorMessage: this.$t('message.edit.rule.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          loadingMessage: `Updating rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.edit.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -928,22 +930,22 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deleteloadbalancerruleresponse.jobid,
-          successMessage: `Successfully deleted rule`,
+          successMessage: this.$t('message.success.remove.rule'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          errorMessage: 'Failed to delete rule',
+          errorMessage: this.$t('message.remove.rule.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          loadingMessage: `Deleting rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.rule.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -1061,22 +1063,22 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.assigntoloadbalancerruleresponse.jobid,
-          successMessage: `Successfully assigned VM`,
+          successMessage: this.$t('message.success.asign.vm'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          errorMessage: 'Failed to assign VM',
+          errorMessage: this.$t('message.assign.vm.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.fetchData()
             this.closeModal()
           },
-          loadingMessage: `Assigning VM...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.assign.vm.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
diff --git a/src/views/network/NicsTable.vue b/src/views/network/NicsTable.vue
index 06d78bd..484114b 100644
--- a/src/views/network/NicsTable.vue
+++ b/src/views/network/NicsTable.vue
@@ -64,7 +64,7 @@
         {{ text }}
       </router-link>
       <a-tag v-if="item.isdefault">
-        Default
+        {{ $t('label.default') }}
       </a-tag>
     </template>
   </a-table>
diff --git a/src/views/network/PortForwarding.vue b/src/views/network/PortForwarding.vue
index 19ce098..34ab63d 100644
--- a/src/views/network/PortForwarding.vue
+++ b/src/views/network/PortForwarding.vue
@@ -24,7 +24,7 @@
           <a-input-group class="form__item__input-container" compact>
             <a-input
               v-model="newRule.privateport"
-              placeholder="Start"
+              :placeholder="$t('label.start')"
               style="border-right: 0; width: 60px; margin-right: 0;"></a-input>
             <a-input
               placeholder="-"
@@ -33,7 +33,7 @@
               center; margin-right: 0;"></a-input>
             <a-input
               v-model="newRule.privateendport"
-              placeholder="End"
+              :placeholder="$t('label.end')"
               style="border-left: 0; width: 60px; text-align: right; margin-right: 0;"></a-input>
           </a-input-group>
         </div>
@@ -42,7 +42,7 @@
           <a-input-group class="form__item__input-container" compact>
             <a-input
               v-model="newRule.publicport"
-              placeholder="Start"
+              :placeholder="$t('label.start')"
               style="border-right: 0; width: 60px; margin-right: 0;"></a-input>
             <a-input
               placeholder="-"
@@ -51,7 +51,7 @@
               text-align: center; margin-right: 0;"></a-input>
             <a-input
               v-model="newRule.publicendport"
-              placeholder="End"
+              :placeholder="$t('label.end')"
               style="border-left: 0; width: 60px; text-align: right; margin-right: 0;"></a-input>
           </a-input-group>
         </div>
@@ -113,7 +113,7 @@
       :current="page"
       :pageSize="pageSize"
       :total="totalCount"
-      :showTotal="total => `Total ${total} ${$t('label.items')}`"
+      :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="handleChangePage"
       @showSizeChange="handleChangePageSize"
@@ -123,7 +123,7 @@
       </template>
     </a-pagination>
 
-    <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">
       <span v-show="tagsModalLoading" class="tags-modal-loading">
         <a-icon type="loading"></a-icon>
       </span>
@@ -154,7 +154,7 @@
     </a-modal>
 
     <a-modal
-      title="Add VM"
+      :title="$t('label.add.vm')"
       v-model="addVmModalVisible"
       class="vm-modal"
       width="60vw"
@@ -181,7 +181,7 @@
         </span>
         <a-input-search
           class="input-search"
-          placeholder="Search"
+          :placeholder="$t('label.search')"
           v-model="searchQuery"
           allowClear
           @search="onSearch" />
@@ -205,7 +205,7 @@
               v-model="newRule.vmguestip"
             >
               <a-select-option v-for="(nic, nicIndex) in nics" :key="nic" :value="nic">
-                {{ nic }}{{ nicIndex === 0 ? ' (Primary)' : null }}
+                {{ nic }}{{ nicIndex === 0 ? ` (${this.$t('label.primary')})` : null }}
               </a-select-option>
             </a-select>
           </div>
@@ -224,7 +224,7 @@
           :current="vmPage"
           :pageSize="vmPageSize"
           :total="vmCount"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="handleChangePage"
           @showSizeChange="handleChangePageSize"
@@ -370,7 +370,7 @@ export default {
   },
   filters: {
     capitalise: val => {
-      if (val === 'all') return 'All'
+      if (val === 'all') return this.$t('label.all')
       return val.toUpperCase()
     }
   },
@@ -418,12 +418,12 @@ export default {
       api('deletePortForwardingRule', { id: rule.id }).then(response => {
         this.$pollJob({
           jobId: response.deleteportforwardingruleresponse.jobid,
-          successMessage: `Successfully removed Port Forwarding rule`,
+          successMessage: this.$t('message.success.remove.port.forward'),
           successMethod: () => this.fetchData(),
-          errorMessage: 'Removing Port Forwarding rule failed',
+          errorMessage: this.$t('message.remove.port.forward.failed'),
           errorMethod: () => this.fetchData(),
-          loadingMessage: `Deleting Port Forwarding rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.port.forward.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => this.fetchData()
         })
       }).catch(error => {
@@ -442,20 +442,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.createportforwardingruleresponse.jobid,
-          successMessage: `Successfully added new Port Forwarding rule`,
+          successMessage: this.$t('message.success.add.port.forward'),
           successMethod: () => {
             this.closeModal()
             this.parentFetchData()
             this.fetchData()
           },
-          errorMessage: 'Adding new Port Forwarding rule failed',
+          errorMessage: this.$t('message.add.port.forward.failed'),
           errorMethod: () => {
             this.closeModal()
             this.parentFetchData()
             this.fetchData()
           },
-          loadingMessage: `Adding new Port Forwarding rule...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.port.forward.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.closeModal()
             this.fetchData()
@@ -520,20 +520,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.createtagsresponse.jobid,
-          successMessage: `Successfully added tag`,
+          successMessage: this.$t('message.success.add.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.openTagsModal(this.selectedRule)
           },
-          errorMessage: 'Failed to add new tag',
+          errorMessage: this.$t('message.add.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.closeModal()
           },
-          loadingMessage: `Adding tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
@@ -555,20 +555,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully removed tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.openTagsModal(this.selectedRule)
           },
-          errorMessage: 'Failed to remove tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
             this.closeModal()
           },
-          loadingMessage: `Removing tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
diff --git a/src/views/network/StaticRoutesTab.vue b/src/views/network/StaticRoutesTab.vue
index 2fed407..a61bc33 100644
--- a/src/views/network/StaticRoutesTab.vue
+++ b/src/views/network/StaticRoutesTab.vue
@@ -43,13 +43,13 @@
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.key') }}</p>
             <a-form-item>
-              <a-input v-decorator="['key', { rules: [{ required: true, message: 'Please specify a tag key'}] }]" />
+              <a-input v-decorator="['key', { rules: [{ required: true, message: this.$t('message.specifiy.tag.key')}] }]" />
             </a-form-item>
           </div>
           <div class="add-tags__input">
             <p class="add-tags__label">{{ $t('label.value') }}</p>
             <a-form-item>
-              <a-input v-decorator="['value', { rules: [{ required: true, message: 'Please specify a tag value'}] }]" />
+              <a-input v-decorator="['value', { rules: [{ required: true, message: this.$t('message.specifiy.tag.value')}] }]" />
             </a-form-item>
           </div>
           <a-button type="primary" :disabled="!('createTags' in $store.getters.apis)" html-type="submit">{{ $t('label.add') }}</a-button>
@@ -133,20 +133,20 @@ export default {
           successMethod: () => {
             this.fetchData()
             this.$store.dispatch('AddAsyncJob', {
-              title: 'Successfully added static route',
+              title: this.$t('message.success.add.static.route'),
               jobid: response.createstaticrouteresponse.jobid,
               status: 'progress'
             })
             this.componentLoading = false
             this.newRoute = null
           },
-          errorMessage: 'Failed to add static route',
+          errorMessage: this.$t('message.add.static.route.failed'),
           errorMethod: () => {
             this.fetchData()
             this.componentLoading = false
           },
-          loadingMessage: `Adding static route...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.static.route.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.componentLoading = false
@@ -168,19 +168,19 @@ export default {
           successMethod: () => {
             this.fetchData()
             this.$store.dispatch('AddAsyncJob', {
-              title: 'Successfully deleted static route',
+              title: this.$t('message.success.delete.static.route'),
               jobid: response.deletestaticrouteresponse.jobid,
               status: 'progress'
             })
             this.componentLoading = false
           },
-          errorMessage: 'Failed to delete static route',
+          errorMessage: this.$t('message.delete.static.route.failed'),
           errorMethod: () => {
             this.fetchData()
             this.componentLoading = false
           },
-          loadingMessage: `Deleting static route...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.static.route.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.componentLoading = false
@@ -213,18 +213,18 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deletetagsresponse.jobid,
-          successMessage: `Successfully deleted tag`,
+          successMessage: this.$t('message.success.delete.tag'),
           successMethod: () => {
             this.fetchTags(this.selectedRule)
             this.tagsLoading = false
           },
-          errorMessage: 'Failed to delete tag',
+          errorMessage: this.$t('message.delete.tag.failed'),
           errorMethod: () => {
             this.fetchTags(this.selectedRule)
             this.tagsLoading = false
           },
-          loadingMessage: `Deleting tag...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.delete.tag.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchTags(this.selectedRule)
             this.tagsLoading = false
@@ -253,18 +253,18 @@ export default {
         }).then(response => {
           this.$pollJob({
             jobId: response.createtagsresponse.jobid,
-            successMessage: `Successfully added new tag`,
+            successMessage: this.$t('message.success.add.tag'),
             successMethod: () => {
               this.fetchTags(this.selectedRule)
               this.tagsLoading = false
             },
-            errorMessage: 'Failed to add new tag',
+            errorMessage: this.$t('message.add.tag.failed'),
             errorMethod: () => {
               this.fetchTags(this.selectedRule)
               this.tagsLoading = false
             },
-            loadingMessage: `Adding new tag...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.tag.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchTags(this.selectedRule)
               this.tagsLoading = false
diff --git a/src/views/network/VpcTab.vue b/src/views/network/VpcTab.vue
index fc1744b..d57e287 100644
--- a/src/views/network/VpcTab.vue
+++ b/src/views/network/VpcTab.vue
@@ -38,7 +38,7 @@
           style="width: 100%"
           :disabled="!('createNetworkACLList' in $store.getters.apis)"
           @click="() => handleOpenModals('networkAcl')">
-          Add Network ACL List
+          {{ $t('label.add.network.acl.list') }}
         </a-button>
         <a-table
           class="table"
@@ -60,7 +60,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="itemCounts.networkAcls"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -75,10 +75,10 @@
           @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: `${this.$t('label.required')}` }]}]"></a-input>
+              <a-input v-decorator="['name', {rules: [{ required: true, message: `${$t('label.required')}` }]}]"></a-input>
             </a-form-item>
             <a-form-item :label="$t('label.description')">
-              <a-input v-decorator="['description', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
+              <a-input v-decorator="['description', {rules: [{ required: true, message: `${$t('label.required')}` }]}]"></a-input>
             </a-form-item>
           </a-form>
         </a-modal>
@@ -89,7 +89,7 @@
           icon="plus"
           style="width: 100%"
           :disabled="!('createPrivateGateway' in $store.getters.apis)"
-          @click="() => handleOpenModals('privateGateways')">Add Private Gateway</a-button>
+          @click="() => handleOpenModals('privateGateways')">{{ $t('label.add.private.gateway') }}</a-button>
         <a-table
           class="table"
           size="small"
@@ -111,7 +111,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="itemCounts.privateGateways"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -135,7 +135,7 @@
               <a-form-item :label="$t('label.vlan')" :required="true">
                 <a-input
                   :placeholder="placeholders.vlan"
-                  v-decorator="['vlan', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
+                  v-decorator="['vlan', {rules: [{ required: true, message: `${$t('label.required')}` }]}]"
                 ></a-input>
               </a-form-item>
               <a-form-item
@@ -148,19 +148,19 @@
               <a-form-item :label="$t('label.publicip')" :required="true">
                 <a-input
                   :placeholder="placeholders.ipaddress"
-                  v-decorator="['ipaddress', {rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"
+                  v-decorator="['ipaddress', {rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }]}]"
+                  v-decorator="['gateway', {rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }]}]"
+                  v-decorator="['netmask', {rules: [{ required: true, message: `${$t('label.required')}` }]}]"
                 ></a-input>
               </a-form-item>
               <a-form-item :label="$t('label.sourcenat')">
@@ -185,7 +185,7 @@
           style="width: 100%"
           :disabled="!('createVpnGateway' in $store.getters.apis)"
           @click="handleCreateVpnGateway">
-          Create Site-to-Site VPN Gateway
+          {{ $t('label.create.site.vpn.gateway') }}
         </a-button>
         <a-list class="list">
           <a-list-item v-for="item in vpnGateways" :key="item.id">
@@ -209,7 +209,7 @@
           style="width: 100%"
           :disabled="!('createVpnConnection' in $store.getters.apis)"
           @click="handleOpenModals('vpnConnection')">
-          Create Site-to-Site VPN Connection
+          {{ $t('label.create.site.vpn.connection') }}
         </a-button>
         <a-table
           class="table"
@@ -233,7 +233,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="itemCounts.vpnConnections"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -562,7 +562,7 @@ export default {
 
         api('createPrivateGateway', params).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Successfully added Private Gateway`,
+            title: this.$t('message.success.add.private.gateway'),
             jobid: response.createprivategatewayresponse.jobid,
             status: 'progress'
           })
@@ -572,13 +572,13 @@ export default {
               this.modals.gateway = false
               this.handleFetchData()
             },
-            errorMessage: 'Adding Private Gateway failed',
+            errorMessage: this.$t('message.add.private.gateway.failed'),
             errorMethod: () => {
               this.modals.gateway = false
               this.handleFetchData()
             },
-            loadingMessage: `Adding Private Gateway...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.private.gateway.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.modals.gateway = false
               this.handleFetchData()
@@ -609,7 +609,7 @@ export default {
           passive: values.passive ? values.passive : false
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `VPN Connection`,
+            title: this.$t('label.vpn.connection'),
             jobid: response.createvpnconnectionresponse.jobid,
             status: 'progress'
           })
@@ -619,13 +619,13 @@ export default {
               this.fetchVpnConnections()
               this.fetchLoading = false
             },
-            errorMessage: 'Adding VPN Connection failed',
+            errorMessage: this.$t('message.add.vpn.connection.failed'),
             errorMethod: () => {
               this.fetchVpnConnections()
               this.fetchLoading = false
             },
-            loadingMessage: `Adding VPN Connection...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.vpn.connection.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchVpnConnections()
               this.fetchLoading = false
@@ -654,7 +654,7 @@ export default {
           vpcid: this.resource.id
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Successfully added Network ACL List`,
+            title: this.$t('message.success.add.network.acl'),
             jobid: response.createnetworkacllistresponse.jobid,
             status: 'progress'
           })
@@ -663,12 +663,12 @@ export default {
             successMethod: () => {
               this.fetchLoading = false
             },
-            errorMessage: 'Adding Network ACL List failed',
+            errorMessage: this.$t('message.add.network.acl.failed'),
             errorMethod: () => {
               this.fetchLoading = false
             },
-            loadingMessage: `Adding Network ACL List...`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.add.network.acl.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchLoading = false
             }
@@ -687,7 +687,7 @@ export default {
         vpcid: this.resource.id
       }).then(response => {
         this.$store.dispatch('AddAsyncJob', {
-          title: `Successfully added VPN Gateway`,
+          title: this.$t('message.success.add.vpn.gateway'),
           jobid: response.createvpngatewayresponse.jobid,
           status: 'progress'
         })
@@ -696,12 +696,12 @@ export default {
           successMethod: () => {
             this.fetchLoading = false
           },
-          errorMessage: 'Adding VPN Gateway failed',
+          errorMessage: this.$t('message.add.vpn.gateway.failed'),
           errorMethod: () => {
             this.fetchLoading = false
           },
-          loadingMessage: `Adding VPN Gateway...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.add.vpn.gateway.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchLoading = false
           }
diff --git a/src/views/network/VpcTiersTab.vue b/src/views/network/VpcTiersTab.vue
index 2c974b2..86efecf 100644
--- a/src/views/network/VpcTiersTab.vue
+++ b/src/views/network/VpcTiersTab.vue
@@ -99,7 +99,7 @@
                 :current="page"
                 :pageSize="pageSize"
                 :total="itemCounts.vms[network.id]"
-                :showTotal="total => `Total ${total} ${$t('label.items')}`"
+                :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
                 :pageSizeOptions="['10', '20', '40', '80', '100']"
                 @change="changePage"
                 @showSizeChange="changePageSize"
@@ -139,7 +139,7 @@
                 :current="page"
                 :pageSize="pageSize"
                 :total="itemCounts.internalLB[network.id]"
-                :showTotal="total => `Total ${total} ${$t('label.items')}`"
+                :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
                 :pageSizeOptions="['10', '20', '40', '80', '100']"
                 @change="changePage"
                 @showSizeChange="changePageSize"
@@ -159,12 +159,12 @@
         <a-form @submit.prevent="handleAddNetworkSubmit" :form="form">
           <a-form-item :label="$t('label.name')">
             <a-input
-              placeholder="A unique name of the tier"
-              v-decorator="['name',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]"></a-input>
+              :placeholder="$t('label.unique.name.tier')"
+              v-decorator="['name',{rules: [{ required: true, message: `${$t('label.required')}` }]}]"></a-input>
           </a-form-item>
           <a-form-item :label="$t('label.networkofferingid')">
             <a-select
-              v-decorator="['networkOffering',{rules: [{ required: true, message: `${this.$t('label.required')}` }]}]">
+              v-decorator="['networkOffering',{rules: [{ required: true, message: `${$t('label.required')}` }]}]">
               <a-select-option v-for="item in networkOfferings" :key="item.id" :value="item.id">
                 {{ item.name }}
               </a-select-option>
@@ -172,13 +172,13 @@
           </a-form-item>
           <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: `${this.$t('label.required')}` }]}]"></a-input>
+              :placeholder="$t('label.create.network.gateway.description')"
+              v-decorator="['gateway',{rules: [{ required: true, message: `${$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: `${this.$t('label.required')}` }]}]"></a-input>
+              :placeholder="$t('label.create.network.netmask.description')"
+              v-decorator="['netmask',{rules: [{ required: true, message: `${$t('label.required')}` }]}]"></a-input>
           </a-form-item>
           <a-form-item :label="$t('label.externalid')">
             <a-input
@@ -200,26 +200,26 @@
         <a-form @submit.prevent="handleAddInternalLBSubmit" :form="form">
           <a-form-item :label="$t('label.name')">
             <a-input
-              placeholder="Unique name for Internal LB"
-              v-decorator="['name', { rules: [{ required: true, message: 'Please specify a name for the Internal LB'}] }]"/>
+              :placeholder="$t('label.internallb.name.description')"
+              v-decorator="['name', { rules: [{ required: true, message: $t('message.error.internallb.name')}] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.description')">
             <a-input
-              placeholder="Brief description of the Internal LB"
+              :placeholder="$t('label.internallb.description')"
               v-decorator="['description']"/>
           </a-form-item>
           <a-form-item :label="$t('label.sourceipaddress')">
             <a-input
-              placeholder="Brief description of the Internal LB"
+              :placeholder="$t('label.internallb.sourceip.description')"
               v-decorator="['sourceIP']"/>
           </a-form-item>
           <a-form-item :label="$t('label.sourceport')">
             <a-input
-              v-decorator="['sourcePort', { rules: [{ required: true, message: 'Please specify a Source Port'}] }]"/>
+              v-decorator="['sourcePort', { rules: [{ required: true, message: $t('message.error.internallb.source.port')}] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.instanceport')">
             <a-input
-              v-decorator="['instancePort', { rules: [{ required: true, message: 'Please specify a Instance Port'}] }]"/>
+              v-decorator="['instancePort', { rules: [{ required: true, message: $t('message.error.internallb.instance.port')}] }]"/>
           </a-form-item>
           <a-form-item :label="$t('label.algorithm')">
             <a-select
@@ -227,7 +227,7 @@
                 'algorithm',
                 {
                   initialValue: 'Source',
-                  rules: [{ required: true, message: `${this.$t('label.required')}`}]
+                  rules: [{ required: true, message: `${$t('label.required')}`}]
                 }]">
               <a-select-option v-for="(key, idx) in Object.keys(algorithms)" :key="idx" :value="algorithms[key]">
                 {{ key }}
@@ -494,7 +494,7 @@ export default {
           aclid: values.acl
         }).then(() => {
           this.$notification.success({
-            message: 'Successfully added VPC Network'
+            message: this.$t('message.success.add.vpc.network')
           })
         }).catch(error => {
           this.$notifyError(error)
@@ -523,30 +523,30 @@ export default {
           scheme: 'Internal'
         }).then(response => {
           this.$store.dispatch('AddAsyncJob', {
-            title: `Creating Internal LB`,
+            title: this.$t('message.create.internallb'),
             jobid: response.createloadbalancerresponse.jobid,
             description: values.name,
             status: 'progress'
           })
           this.$pollJob({
             jobId: response.createloadbalancerresponse.jobid,
-            successMessage: `Successfully created Internal LB`,
+            successMessage: this.$t('message.success.create.internallb'),
             successMethod: () => {
               this.fetchData()
             },
-            errorMessage: 'Failed to create Internal LB' + response,
+            errorMessage: `${this.$t('message.create.internallb.failed')} ` + response,
             errorMethod: () => {
               this.fetchData()
             },
-            loadingMessage: `Creation of Internal LB is in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
+            loadingMessage: this.$t('message.create.internallb.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.fetchData()
             }
           })
         }).catch(error => {
           console.error(error)
-          this.$message.error('Failed to create Internal LB')
+          this.$message.error(this.$t('message.create.internallb.failed'))
         }).finally(() => {
           this.modalLoading = false
           this.fetchLoading = false
diff --git a/src/views/network/VpnDetails.vue b/src/views/network/VpnDetails.vue
index 7d1d524..75d522b 100644
--- a/src/views/network/VpnDetails.vue
+++ b/src/views/network/VpnDetails.vue
@@ -18,36 +18,40 @@
 <template>
   <div v-if="remoteAccessVpn">
     <div>
-      <p>Your Remote Access VPN is currently enabled and can be accessed via the IP <strong>{{ remoteAccessVpn.publicip }}</strong></p>
-      <p>Your IPSec pre-shared key is <strong>{{ remoteAccessVpn.presharedkey }}</strong></p>
+      <p>{{ $t('message.enabled.vpn') }} <strong>{{ remoteAccessVpn.publicip }}</strong></p>
+      <p>{{ $t('message.enabled.vpn.ip.sec') }} <strong>{{ remoteAccessVpn.presharedkey }}</strong></p>
       <a-divider/>
-      <a-button><router-link :to="{ path: '/vpnuser'}">Manage VPN Users</router-link></a-button>
-      <a-button style="margin-left: 10px" type="danger" @click="disableVpn = true" :disabled="!('deleteRemoteAccessVpn' in $store.getters.apis)">Disable VPN</a-button>
+      <a-button><router-link :to="{ path: '/vpnuser'}">{{ $t('label.manage.vpn.user') }}</router-link></a-button>
+      <a-button style="margin-left: 10px" type="danger" @click="disableVpn = true" :disabled="!('deleteRemoteAccessVpn' in $store.getters.apis)">
+        {{ $t('label.disable.vpn') }}
+      </a-button>
     </div>
 
-    <a-modal v-model="disableVpn" :footer="null" oncancel="disableVpn = false" title="Disable Remove Access VPN">
-      <p>Are you sure you want to disable VPN?</p>
+    <a-modal v-model="disableVpn" :footer="null" oncancel="disableVpn = false" :title="$t('label.disable.vpn')">
+      <p>{{ $t('message.disable.vpn') }}</p>
 
       <a-divider></a-divider>
 
       <div class="actions">
-        <a-button @click="() => disableVpn = false">Cancel</a-button>
-        <a-button type="primary" @click="handleDisableVpn">Yes</a-button>
+        <a-button @click="() => disableVpn = false">{{ $t('label.cancel') }}</a-button>
+        <a-button type="primary" @click="handleDisableVpn">{{ $t('label.yes') }}</a-button>
       </div>
     </a-modal>
 
   </div>
   <div v-else>
-    <a-button :disabled="!('createRemoteAccessVpn' in $store.getters.apis)" type="primary" @click="enableVpn = true">Enable VPN</a-button>
+    <a-button :disabled="!('createRemoteAccessVpn' in $store.getters.apis)" type="primary" @click="enableVpn = true">
+      {{ $t('label.enable.vpn') }}
+    </a-button>
 
-    <a-modal v-model="enableVpn" :footer="null" onCancel="enableVpn = false" title="Enable Remote Access VPN">
-      <p>Please confirm that you want Remote Access VPN enabled for this IP address.</p>
+    <a-modal v-model="enableVpn" :footer="null" onCancel="enableVpn = false" :title="$t('label.enable.vpn')">
+      <p>{{ $t('message.enable.vpn') }}</p>
 
       <a-divider></a-divider>
 
       <div class="actions">
-        <a-button @click="() => enableVpn = false">Cancel</a-button>
-        <a-button type="primary" @click="handleCreateVpn">Yes</a-button>
+        <a-button @click="() => enableVpn = false">{{ $t('label.cancel') }}</a-button>
+        <a-button type="primary" @click="handleCreateVpn">{{ $t('label.yes') }}</a-button>
       </div>
     </a-modal>
 
@@ -110,23 +114,23 @@ export default {
           successMethod: result => {
             const res = result.jobresult.remoteaccessvpn
             this.$notification.success({
-              message: 'Status',
+              message: this.$t('label.status'),
               description:
-                `Your Remote Access VPN is currently enabled and can be accessed via the IP ${res.publicip}. Your IPSec pre-shared key is ${res.presharedkey}`,
+                `${this.$t('message.enabled.vpn')} ${res.publicip}. ${this.$t('message.enabled.vpn.ip.sec')} ${res.presharedkey}`,
               duration: 0
             })
             this.fetchData()
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          errorMessage: 'Failed to enable VPN',
+          errorMessage: this.$t('message.enable.vpn.failed'),
           errorMethod: () => {
             this.fetchData()
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          loadingMessage: `Enabling VPN...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.enable.vpn.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.parentFetchData()
@@ -149,20 +153,20 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.deleteremoteaccessvpnresponse.jobid,
-          successMessage: 'Successfully disabled VPN',
+          successMessage: this.$t('message.success.disable.vpn'),
           successMethod: () => {
             this.fetchData()
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          errorMessage: 'Failed to disable VPN',
+          errorMessage: this.$t('message.disable.vpn.failed'),
           errorMethod: () => {
             this.fetchData()
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          loadingMessage: `Disabling VPN...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.disable.vpn.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.fetchData()
             this.parentFetchData()
diff --git a/src/views/offering/AddComputeOffering.vue b/src/views/offering/AddComputeOffering.vue
index 9d315cc..5de5205 100644
--- a/src/views/offering/AddComputeOffering.vue
+++ b/src/views/offering/AddComputeOffering.vue
@@ -65,9 +65,9 @@
               return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
             }"
             :placeholder="this.$t('label.systemvmtype')">
-            <a-select-option key="domainrouter">Domain Router</a-select-option>
-            <a-select-option key="consoleproxy">Console Proxy</a-select-option>
-            <a-select-option key="secondarystoragevm">Secondary Storage VM</a-select-option>
+            <a-select-option key="domainrouter">{{ $t('label.domain.router') }}</a-select-option>
+            <a-select-option key="consoleproxy">{{ $t('label.console.proxy') }}</a-select-option>
+            <a-select-option key="secondarystoragevm">{{ $t('label.secondary.storage.vm') }}</a-select-option>
           </a-select>
         </a-form-item>
         <a-form-item>
@@ -676,7 +676,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback(this.$t('label.error.zone.combined'))
+                      callback(this.$t('message.error.zone.combined'))
                     }
                     callback()
                   }
@@ -740,7 +740,7 @@ export default {
       gpuTypes: [
         {
           value: '',
-          title: 'None',
+          title: this.$t('label.none'),
           vgpu: []
         },
         {
@@ -1017,7 +1017,10 @@ export default {
           params.zoneid = zoneId
         }
         api('createServiceOffering', params).then(json => {
-          this.$message.success((this.isSystem ? 'Service offering created: ' : 'Compute offering created: ') + values.name)
+          const message = this.isSystem
+            ? `${this.$t('message.create.service.offering')}: `
+            : `${this.$t('message.create.compute.offering')}: `
+          this.$message.success(message + values.name)
         }).catch(error => {
           this.$notifyError(error)
         }).finally(() => {
diff --git a/src/views/offering/AddDiskOffering.vue b/src/views/offering/AddDiskOffering.vue
index ee3cf30..0a5ddaf 100644
--- a/src/views/offering/AddDiskOffering.vue
+++ b/src/views/offering/AddDiskOffering.vue
@@ -386,7 +386,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback(this.$t('label.error.zone.combined'))
+                      callback(this.$t('message.error.zone.combined'))
                     }
                     callback()
                   }
@@ -607,7 +607,7 @@ export default {
           params.zoneid = zoneId
         }
         api('createDiskOffering', params).then(json => {
-          this.$message.success(this.$t('message.disk.offering.created', { name: values.name }))
+          this.$message.success(`${this.$t('message.disk.offering.created')} ${values.name}}`)
         }).catch(error => {
           this.$notifyError(error)
         }).finally(() => {
diff --git a/src/views/offering/AddNetworkOffering.vue b/src/views/offering/AddNetworkOffering.vue
index 12460af..f080d37 100644
--- a/src/views/offering/AddNetworkOffering.vue
+++ b/src/views/offering/AddNetworkOffering.vue
@@ -31,7 +31,7 @@
           </span>
           <a-input
             v-decorator="['name', {
-              rules: [{ required: true, message: 'Please enter name' }]
+              rules: [{ required: true, message: $t('message.error.name') }]
             }]"
             :placeholder="this.$t('label.name')"/>
         </a-form-item>
@@ -44,7 +44,7 @@
           </span>
           <a-input
             v-decorator="['displaytext', {
-              rules: [{ required: true, message: 'Please enter description' }]
+              rules: [{ required: true, message: $t('message.error.description') }]
             }]"
             :placeholder="this.$t('label.displaytext')"/>
         </a-form-item>
@@ -60,7 +60,7 @@
               rules: [{
                 validator: (rule, value, callback) => {
                   if (value && (isNaN(value) || value <= 0)) {
-                    callback('Please enter a valid number')
+                    callback(this.$t('message.validate.number'))
                   }
                   callback()
                 }
@@ -428,7 +428,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback('All Zones cannot be combined with any other zone')
+                      callback($t('message.error.zone.combined'))
                     }
                     callback()
                   }
diff --git a/src/views/offering/AddVpcOffering.vue b/src/views/offering/AddVpcOffering.vue
index 89544c5..7e33697 100644
--- a/src/views/offering/AddVpcOffering.vue
+++ b/src/views/offering/AddVpcOffering.vue
@@ -31,7 +31,7 @@
           </span>
           <a-input
             v-decorator="['name', {
-              rules: [{ required: true, message: 'Please enter name' }]
+              rules: [{ required: true, message: $t('message.error.name') }]
             }]"
             :placeholder="this.$t('label.name')"/>
         </a-form-item>
@@ -44,7 +44,7 @@
           </span>
           <a-input
             v-decorator="['displaytext', {
-              rules: [{ required: true, message: 'Please enter description' }]
+              rules: [{ required: true, message: $t('message.error.description') }]
             }]"
             :placeholder="this.$t('label.displaytext')"/>
         </a-form-item>
@@ -126,7 +126,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback('All Zones cannot be combined with any other zone')
+                      callback($t('message.error.zone.combined'))
                     }
                     callback()
                   }
@@ -401,7 +401,7 @@ export default {
           params.supportedservices = ''
         }
         api('createVPCOffering', params).then(json => {
-          this.$message.success('VPC offering created: ' + values.name)
+          this.$message.success(`${this.$t('message.create.vpc.offering')}: ` + values.name)
         }).catch(error => {
           this.$notifyError(error)
         }).finally(() => {
diff --git a/src/views/offering/ImportBackupOffering.vue b/src/views/offering/ImportBackupOffering.vue
index e62c0bd..cff2e75 100644
--- a/src/views/offering/ImportBackupOffering.vue
+++ b/src/views/offering/ImportBackupOffering.vue
@@ -30,7 +30,7 @@
         </span>
         <a-input
           v-decorator="['name', {
-            rules: [{ required: true, message: 'Please enter input' }]
+            rules: [{ required: true, message: $t('message.error.required.input') }]
           }]"/>
       </a-form-item>
       <a-form-item>
@@ -42,7 +42,7 @@
         </span>
         <a-input
           v-decorator="['description', {
-            rules: [{ required: true, message: 'Please enter input' }]
+            rules: [{ required: true, message: $t('message.error.required.input') }]
           }]"/>
       </a-form-item>
       <a-form-item>
@@ -177,7 +177,7 @@ export default {
         }
         params.allowuserdrivenbackups = values.allowuserdrivenbackups ? values.allowuserdrivenbackups : false
         this.loading = true
-        const title = 'Import Offering'
+        const title = this.$t('label.import.offering')
         api('importBackupOffering', params).then(json => {
           const jobId = json.importbackupofferingresponse.jobid
           if (jobId) {
@@ -194,8 +194,8 @@ export default {
                 this.parentFetchData()
                 this.closeAction()
               },
-              loadingMessage: `${title} in progress for ${params.name}`,
-              catchMessage: 'Error encountered while fetching async job result'
+              loadingMessage: `${title} ${this.$t('label.in.progress')} ${this.$t('label.for')} ${params.name}`,
+              catchMessage: this.$t('error.fetching.async.job.result')
             })
           }
         }).catch(error => {
diff --git a/src/views/offering/UpdateOfferingAccess.vue b/src/views/offering/UpdateOfferingAccess.vue
index e384bf8..07ecc38 100644
--- a/src/views/offering/UpdateOfferingAccess.vue
+++ b/src/views/offering/UpdateOfferingAccess.vue
@@ -61,7 +61,7 @@
                 {
                   validator: (rule, value, callback) => {
                     if (value && value.length > 1 && value.indexOf(0) !== -1) {
-                      callback('All Zones cannot be combined with any other zone')
+                      callback($t('message.error.zone.combined'))
                     }
                     callback()
                   }
diff --git a/src/views/plugins/CloudianPlugin.vue b/src/views/plugins/CloudianPlugin.vue
index da6357f..f5a37ce 100644
--- a/src/views/plugins/CloudianPlugin.vue
+++ b/src/views/plugins/CloudianPlugin.vue
@@ -18,12 +18,12 @@
 <template>
   <div>
     <span v-if="showError">
-      <a-alert type="error" message="Single-Sign-On failed for Cloudian Management Console. Please ask your administrator to fix integration issues." showIcon />
+      <a-alert type="error" :message="$t('message.error.cloudian.console')" showIcon />
       <br/>
-      <a-button @click="doSso()">Try Again</a-button>
+      <a-button @click="doSso()">{{ $t('label.try.again') }}</a-button>
     </span>
     <span v-else>
-      <a-alert type="info" message="Cloudian Management Console should open in another window" showIcon />
+      <a-alert type="info" :message="$t('message.info.cloudian.console')" showIcon />
     </span>
     <br/>
   </div>
diff --git a/src/views/plugins/quota/EditTariffValueWizard.vue b/src/views/plugins/quota/EditTariffValueWizard.vue
index 8855088..8b867ce 100644
--- a/src/views/plugins/quota/EditTariffValueWizard.vue
+++ b/src/views/plugins/quota/EditTariffValueWizard.vue
@@ -117,7 +117,7 @@ export default {
           this.onClose()
         }).catch(error => {
           this.$notification.error({
-            message: 'Request Failed',
+            message: this.$t('message.request.failed'),
             description: (error.response && error.response.headers && error.response.headers['x-description']) || error.message
           })
         }).finally(() => {
diff --git a/src/views/project/AccountsTab.vue b/src/views/project/AccountsTab.vue
index d80c518..53b28d9 100644
--- a/src/views/project/AccountsTab.vue
+++ b/src/views/project/AccountsTab.vue
@@ -60,7 +60,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="itemCount"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -172,7 +172,7 @@ export default {
     },
     onMakeProjectOwner (record) {
       const title = this.$t('label.make.project.owner')
-      const loading = this.$message.loading(title + 'in progress for ' + record.account, 0)
+      const loading = this.$message.loading(title + `${this.$t('label.in.progress.for')} ` + record.account, 0)
       const params = {}
 
       params.id = this.resource.id
@@ -193,14 +193,13 @@ export default {
     },
     onShowConfirmDelete (record) {
       const self = this
-      let title = this.$t('label.deleteconfirm')
-      title = title.replace('{name}', this.$t('label.account'))
+      const title = `${this.$t('label.deleteconfirm')} ${this.$t('label.account')}`
 
       this.$confirm({
         title: title,
-        okText: 'OK',
+        okText: this.$t('label.ok'),
         okType: 'danger',
-        cancelText: 'Cancel',
+        cancelText: this.$t('label.cancel'),
         onOk () {
           self.removeAccount(record)
         }
@@ -208,7 +207,7 @@ export default {
     },
     removeAccount (record) {
       const title = this.$t('label.remove.project.account')
-      const loading = this.$message.loading(title + 'in progress for ' + record.account, 0)
+      const loading = this.$message.loading(title + `${this.$t('label.in.progress.for')} ` + record.account, 0)
       const params = {}
 
       params.account = record.account
diff --git a/src/views/project/InvitationTokenTemplate.vue b/src/views/project/InvitationTokenTemplate.vue
index 2c7fb26..2c249f2 100644
--- a/src/views/project/InvitationTokenTemplate.vue
+++ b/src/views/project/InvitationTokenTemplate.vue
@@ -77,7 +77,7 @@ export default {
 
         const title = this.$t('label.accept.project.invitation')
         const description = this.$t('label.projectid') + ' ' + values.projectid
-        const loading = this.$message.loading(title + 'in progress for ' + description, 0)
+        const loading = this.$message.loading(title + `${this.$t('label.in.progress.for')} ` + description, 0)
 
         this.loading = true
 
diff --git a/src/views/project/InvitationsTemplate.vue b/src/views/project/InvitationsTemplate.vue
index 2f79ea1..3b95a84 100644
--- a/src/views/project/InvitationsTemplate.vue
+++ b/src/views/project/InvitationsTemplate.vue
@@ -69,7 +69,7 @@
           :current="page"
           :pageSize="pageSize"
           :total="itemCount"
-          :showTotal="total => `Total ${total} ${$t('label.items')}`"
+          :showTotal="total => `${$t('label.total')} ${total} ${$t('label.items')}`"
           :pageSizeOptions="['10', '20', '40', '80', '100']"
           @change="changePage"
           @showSizeChange="changePageSize"
@@ -204,9 +204,9 @@ export default {
 
       this.$confirm({
         title: title,
-        okText: 'OK',
+        okText: this.$t('label.ok'),
         okType: 'danger',
-        cancelText: 'Cancel',
+        cancelText: this.$t('label.cancel'),
         onOk () {
           self.updateProjectInvitation(record, true)
         }
@@ -221,7 +221,7 @@ export default {
         title = this.$t('label.decline.invitation')
       }
 
-      const loading = this.$message.loading(title + 'in progress for ' + record.project, 0)
+      const loading = this.$message.loading(title + `${this.$t('label.in.progress.for')} ` + record.project, 0)
       const params = {}
 
       params.projectid = record.projectid
@@ -249,9 +249,9 @@ export default {
 
       this.$confirm({
         title: title,
-        okText: 'OK',
+        okText: this.$t('label.ok'),
         okType: 'danger',
-        cancelText: 'Cancel',
+        cancelText: this.$t('label.cancel'),
         onOk () {
           self.updateProjectInvitation(record, false)
         }
diff --git a/src/views/storage/CreateVolume.vue b/src/views/storage/CreateVolume.vue
index 6f79d98..05da6b3 100644
--- a/src/views/storage/CreateVolume.vue
+++ b/src/views/storage/CreateVolume.vue
@@ -21,7 +21,7 @@
       <a-form-item :label="$t('label.name')">
         <a-input
           v-decorator="['name', {
-            rules: [{ required: true, message: 'Please enter volume name' }]
+            rules: [{ required: true, message: $t('message.error.volume.name') }]
           }]"
           :placeholder="$t('label.volumename')"/>
       </a-form-item>
@@ -29,7 +29,7 @@
         <a-select
           v-decorator="['zoneid', {
             initialValue: selectedZoneId,
-            rules: [{ required: true, message: 'Please select a zone' }] }]"
+            rules: [{ required: true, message: $t('message.error.zone') }] }]"
           :loading="loading"
           @change="zone => fetchDiskOfferings(zone)">
           <a-select-option
@@ -44,7 +44,7 @@
         <a-select
           v-decorator="['diskofferingid', {
             initialValue: selectedDiskOfferingId,
-            rules: [{ required: true, message: 'Please select an option' }]}]"
+            rules: [{ required: true, message: $t('message.error.select') }]}]"
           :loading="loading"
           @change="id => (customDiskOffering = offerings.filter(x => x.id === id)[0].iscustomized || false)"
         >
@@ -60,7 +60,7 @@
         <a-form-item :label="$t('label.sizegb')">
           <a-input
             v-decorator="['size', {
-              rules: [{ required: true, message: 'Please enter custom disk size' }]}]"
+              rules: [{ required: true, message: $t('message.error.custom.disk.size') }]}]"
             :placeholder="$t('label.disksize')"/>
         </a-form-item>
       </span>
@@ -126,22 +126,22 @@ export default {
         api('createVolume', values).then(response => {
           this.$pollJob({
             jobId: response.createvolumeresponse.jobid,
-            successMessage: `Successfully created volume`,
+            successMessage: this.$t('message.success.create.volume'),
             successMethod: () => {
               this.$store.dispatch('AddAsyncJob', {
-                title: `Successfully created Volume`,
+                title: this.$t('message.success.create.volume'),
                 jobid: response.createvolumeresponse.jobid,
                 description: values.name,
                 status: 'progress'
               })
               this.$emit('refresh-data')
             },
-            errorMessage: 'Failed to Create volume',
+            errorMessage: this.$t('message.create.volume.failed'),
             errorMethod: () => {
               this.$emit('refresh-data')
             },
-            loadingMessage: `Volume creation in progress`,
-            catchMessage: 'Error encountered while fetching async job result'
+            loadingMessage: this.$t('message.create.volume.processing'),
+            catchMessage: this.$t('error.fetching.async.job.result')
           })
         }).catch(error => {
           this.$notifyError(error)
diff --git a/src/views/storage/FormSchedule.vue b/src/views/storage/FormSchedule.vue
index 33b08f8..feea52e 100644
--- a/src/views/storage/FormSchedule.vue
+++ b/src/views/storage/FormSchedule.vue
@@ -76,7 +76,7 @@
                     rules: [{
                       type: 'object',
                       required: true,
-                      message: 'Please select time'
+                      message: $t('message.error.time')
                     }]
                   }]" />
               </a-form-item>
@@ -119,7 +119,7 @@
                   <a-input-number
                     style="width: 100%"
                     v-decorator="['maxsnaps', {
-                      rules: [{ required: true, message: 'Please enter input'}]
+                      rules: [{ required: true, message: $t('message.error.required.input')}]
                     }]"
                     :min="1"
                     :max="8" />
@@ -159,9 +159,9 @@
                 @blur="handleInputConfirm"
                 @keyup.enter="handleInputConfirm"
                 compact>
-                <a-input ref="input" :value="inputKey" @change="handleKeyChange" style="width: 100px; text-align: center" placeholder="Key" />
+                <a-input ref="input" :value="inputKey" @change="handleKeyChange" style="width: 100px; text-align: center" :placeholder="$t('label.key')" />
                 <a-input style=" width: 30px; border-left: 0; pointer-events: none; backgroundColor: #fff" placeholder="=" disabled />
-                <a-input :value="inputValue" @change="handleValueChange" style="width: 100px; text-align: center; border-left: 0" placeholder="Value" />
+                <a-input :value="inputValue" @change="handleValueChange" style="width: 100px; text-align: center; border-left: 0" :placeholder="$t('label.value')" />
                 <a-button shape="circle" size="small" @click="handleInputConfirm">
                   <a-icon type="check"/>
                 </a-button>
@@ -365,8 +365,8 @@ export default {
         api('createSnapshotPolicy', params).then(json => {
           this.$emit('refresh')
           this.$notification.success({
-            message: 'Recurring Snapshots',
-            description: 'Successfully recurring snapshots'
+            message: this.$t('label.action.recurring.snapshot'),
+            description: this.$t('message.success.recurring.snapshot')
           })
           this.resetForm()
         }).catch(error => {
diff --git a/src/views/storage/MigrateVolume.vue b/src/views/storage/MigrateVolume.vue
index bdebf8e..749753d 100644
--- a/src/views/storage/MigrateVolume.vue
+++ b/src/views/storage/MigrateVolume.vue
@@ -22,7 +22,7 @@
       <p class="modal-form__label">{{ $t('label.storagepool') }}</p>
       <a-select v-model="selectedStoragePool" style="width: 100%;">
         <a-select-option v-for="(storagePool, index) in storagePools" :value="storagePool.id" :key="index">
-          {{ storagePool.name }} <span v-if="resource.virtualmachineid">{{ storagePool.suitableformigration ? '(Suitable)' : '(Not Suitable)' }}</span>
+          {{ storagePool.name }} <span v-if="resource.virtualmachineid">{{ storagePool.suitableformigration ? `(${$t('label.suitable')})` : `(${$t('label.not.suitable')})` }}</span>
         </a-select-option>
       </a-select>
       <template v-if="this.resource.virtualmachineid">
@@ -135,18 +135,18 @@ export default {
       }).then(response => {
         this.$pollJob({
           jobId: response.migratevolumeresponse.jobid,
-          successMessage: `Successfully migrated volume`,
+          successMessage: this.$t('message.success.migrate.volume'),
           successMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          errorMessage: 'Migrating volume failed',
+          errorMessage: this.$t('message.migrate.volume.failed'),
           errorMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
           },
-          loadingMessage: `Migrating volume...`,
-          catchMessage: 'Error encountered while fetching async job result',
+          loadingMessage: this.$t('message.migrate.volume.processing'),
+          catchMessage: this.$t('error.fetching.async.job.result'),
           catchMethod: () => {
             this.parentFetchData()
             this.parentToggleLoading()
diff --git a/src/views/storage/ResizeVolume.vue b/src/views/storage/ResizeVolume.vue
index 1b4b8d7..cfd5349 100644
--- a/src/views/storage/ResizeVolume.vue
+++ b/src/views/storage/ResizeVolume.vue
@@ -38,7 +38,7 @@
         <a-form-item :label="$t('label.sizegb')">
           <a-input
             v-decorator="['size', {
-              rules: [{ required: true, message: 'Please enter size in GB' }]}]"
+              rules: [{ required: true, message: $t('message.error.size') }]}]"
             :placeholder="$t('label.disksize')"/>
         </a-form-item>
       </div>
@@ -101,21 +101,21 @@ export default {
         api('resizeVolume', values).then(response => {
           this.$pollJob({
             jobId: response.resizevolumeresponse.jobid,
-            successMessage: 'Successfully resized volume',
+            successMessage: this.$t('message.success.resize.volume'),
             successMethod: () => {
               this.$store.dispatch('AddAsyncJob', {
-                title: `Successfully resized Volume`,
+                title: this.$t('message.success.resize.volume'),
                 jobid: response.resizevolumeresponse.jobid,
                 description: values.name,
                 status: 'progress'
               })
             },
-            errorMessage: 'Failed to resize volume',
+            errorMessage: this.$t('message.resize.volume.failed'),
             errorMethod: () => {
               this.closeModal()
             },
             loadingMessage: `Volume resize is in progress`,
-            catchMessage: 'Error encountered while fetching async job result',
+            catchMessage: this.$t('error.fetching.async.job.result'),
             catchMethod: () => {
               this.loading = false
               this.closeModal()
@@ -123,7 +123,7 @@ export default {
           })
         }).catch(error => {
           this.$notification.error({
-            message: `Error ${error.response.status}`,
+            message: `${this.$t('label.error')} ${error.response.status}`,
             description: error.response.data.errorresponse.errortext,
             duration: 0
           })
diff --git a/src/views/storage/RestoreAttachBackupVolume.vue b/src/views/storage/RestoreAttachBackupVolume.vue
index 11a42fc..d56b75d 100644
--- a/src/views/storage/RestoreAttachBackupVolume.vue
+++ b/src/views/storage/RestoreAttachBackupVolume.vue
@@ -137,7 +137,7 @@ export default {
         params.virtualmachineid = this.virtualMachineOptions.opts.filter(opt => opt.name === values.virtualmachineid)[0].id || null
 
         this.actionLoading = true
-        const title = 'Restore Volume and Attach'
+        const title = this.$t('label.restore.volume.attach')
         api('restoreVolumeFromBackupAndAttachToVM', params).then(json => {
           const jobId = json.restorevolumefrombackupandattachtovmresponse.jobid || null
           if (jobId) {
@@ -154,8 +154,8 @@ export default {
                 this.parentFetchData()
                 this.closeAction()
               },
-              loadingMessage: `${title} in progress for ${this.resource.id}`,
-              catchMessage: 'Error encountered while fetching async job result'
+              loadingMessage: `${title} ${this.$t('label.in.progress.for')} ${this.resource.id}`,
+              catchMessage: this.$t('error.fetching.async.job.result')
             })
           }
         }).catch(error => {
diff --git a/src/views/storage/ScheduledSnapshots.vue b/src/views/storage/ScheduledSnapshots.vue
index d1d6f69..7193231 100644
--- a/src/views/storage/ScheduledSnapshots.vue
+++ b/src/views/storage/ScheduledSnapshots.vue
@@ -48,10 +48,10 @@
       </div>
       <div slot="interval" slot-scope="text, record">
         <span v-if="record.intervaltype===2">
-          {{ $t('label.interval.weekly').replace('{number}', $t(listDayOfWeek[record.schedule.split(':')[2] - 1])) }}
+          {{ `${$t('label.every')} ${$t(listDayOfWeek[record.schedule.split(':')[2] - 1])}` }}
         </span>
         <span v-else-if="record.intervaltype===3">
-          {{ $t('label.interval.monthly').replace('{number}', record.schedule.split(':')[2]) }}
+          {{ `${$t('label.day')} ${record.schedule.split(':')[2]} ${$t('label.of.month')}` }}
         </span>
       </div>
       <div slot="timezone" slot-scope="text, record">
@@ -163,8 +163,8 @@ export default {
       api('deleteSnapshotPolicies', params).then(json => {
         if (json.deletesnapshotpoliciesresponse.success) {
           this.$notification.success({
-            message: 'Delete Snapshot Policy',
-            description: 'Successfully deleted snapshot policy'
+            message: this.$t('label.delete.snapshot.policy'),
+            description: this.$t('message.success.delete.snapshot.policy')
           })
 
           this.$emit('refresh')
diff --git a/src/views/storage/TakeSnapshot.vue b/src/views/storage/TakeSnapshot.vue
index 3247303..a3696fe 100644
--- a/src/views/storage/TakeSnapshot.vue
+++ b/src/views/storage/TakeSnapshot.vue
@@ -60,9 +60,9 @@
               @blur="handleInputConfirm"
               @keyup.enter="handleInputConfirm"
               compact>
-              <a-input ref="input" :value="inputKey" @change="handleKeyChange" style="width: 100px; text-align: center" placeholder="Key" />
+              <a-input ref="input" :value="inputKey" @change="handleKeyChange" style="width: 100px; text-align: center" :placeholder="$t('label.key')" />
               <a-input style=" width: 30px; border-left: 0; pointer-events: none; backgroundColor: #fff" placeholder="=" disabled />
-              <a-input :value="inputValue" @change="handleValueChange" style="width: 100px; text-align: center; border-left: 0" placeholder="Value" />
+              <a-input :value="inputValue" @change="handleValueChange" style="width: 100px; text-align: center; border-left: 0" :placeholder="$('label.value')" />
               <a-button shape="circle" size="small" @click="handleInputConfirm">
                 <a-icon type="check"/>
               </a-button>
@@ -178,8 +178,8 @@ export default {
                 })
                 this.closeAction()
               },
-              loadingMessage: `${title} in progress for ${description}`,
-              catchMessage: 'Error encountered while fetching async job result'
+              loadingMessage: `${title} ${this.$t('label.in.progress.for')} ${description}`,
+              catchMessage: this.$t('error.fetching.async.job.result')
             })
           }
         }).catch(error => {
diff --git a/src/views/storage/UploadLocalVolume.vue b/src/views/storage/UploadLocalVolume.vue
index 48e8f0d..cc9e004 100644
--- a/src/views/storage/UploadLocalVolume.vue
+++ b/src/views/storage/UploadLocalVolume.vue
@@ -19,7 +19,7 @@
   <div class="form-layout">
     <span v-if="uploadPercentage > 0">
       <a-icon type="loading" />
-      Do not close this form, file upload is in progress...
+      {{ $t('message.upload.file.processing') }}
       <a-progress :percent="uploadPercentage" />
     </span>
     <a-spin :spinning="loading" v-else>
@@ -40,14 +40,14 @@
               <a-icon type="cloud-upload" />
             </p>
             <p class="ant-upload-text" v-if="fileList.length === 0">
-              Click or drag file to this area to upload
+              {{ $t('label.volume.volumefileupload.description') }}
             </p>
           </a-upload-dragger>
         </a-form-item>
         <a-form-item :label="$t('label.name')">
           <a-input
             v-decorator="['name', {
-              rules: [{ required: true, message: 'Please enter Volume name' }]
+              rules: [{ required: true, message: $t('message.error.volume.name') }]
             }]"
             :placeholder="$t('label.volumename')" />
         </a-form-item>
@@ -86,7 +86,7 @@
         <a-form-item :label="$t('label.volumechecksum')">
           <a-input
             v-decorator="['checksum']"
-            placeholder="Use the hash that you created at the start of the volume upload procedure"
+            :placeholder="$t('label.volumechecksum.description')"
           />
         </a-form-item>
         <div :span="24" class="action-button">
@@ -164,8 +164,8 @@ export default {
           const { fileList } = this
           if (this.fileList.length > 1) {
             this.$notification.error({
-              message: 'Volume Upload Failed',
-              description: 'Only one file can be uploaded at a time',
+              message: this.$t('message.upload.volume.failed'),
+              description: this.$t('message.upload.file.limit'),
               duration: 0
             })
           }
@@ -190,14 +190,14 @@ export default {
               timeout: 86400000
             }).then((json) => {
             this.$notification.success({
-              message: 'Upload Successful',
-              description: 'This Volume has been uploaded. Please check its status in the Volumes menu'
+              message: this.$t('message.success.upload'),
+              description: this.$t('message.success.upload.volume.description')
             })
             this.closeAction()
           }).catch(e => {
             this.$notification.error({
-              message: 'Upload Failed',
-              description: `Failed to upload ISO -  ${e}`,
+              message: this.$t('message.upload.failed'),
+              description: `${this.$t('message.upload.iso.failed.description')} -  ${e}`,
               duration: 0
             })
             this.closeAction()