diff --git a/cmdb-ui/src/api/cmdb/CITypeAttr.js b/cmdb-ui/src/api/cmdb/CITypeAttr.js
index f68cc88..596e47b 100644
--- a/cmdb-ui/src/api/cmdb/CITypeAttr.js
+++ b/cmdb-ui/src/api/cmdb/CITypeAttr.js
@@ -1,7 +1,7 @@
 import { axios } from '@/utils/request'
 
 /**
- * 获取 ci_type 的属性
+ * Get CI Type attributes
  * @param CITypeName
  * @param parameter
  * @returns {AxiosPromise}
@@ -16,7 +16,7 @@ export function getCITypeAttributesByName (CITypeName, parameter) {
 }
 
 /**
- * 获取 ci_type 的属性
+ * Get CI Type attributes
  * @param CITypeId
  * @param parameter
  * @returns {AxiosPromise}
@@ -30,7 +30,7 @@ export function getCITypeAttributesById (CITypeId, parameter) {
 }
 
 /**
- * 更新属性
+ * update attribute
  * @param attrId
  * @param data
  * @returns {AxiosPromise}
@@ -44,7 +44,7 @@ export function updateAttributeById (attrId, data) {
 }
 
 /**
- * 添加属性
+ * add attribute
  * @param data
  * @returns {AxiosPromise}
  */
@@ -57,7 +57,7 @@ export function createAttribute (data) {
 }
 
 /**
- * 搜索属性/ 获取所有的属性
+ * search attributes or get all attributes
  * @param data
  * @returns {AxiosPromise}
  */
@@ -70,7 +70,7 @@ export function searchAttributes (params) {
 }
 
 /**
- * 删除属性
+ * delete attribute
  * @param attrId
  * @returns {AxiosPromise}
  */
@@ -82,7 +82,7 @@ export function deleteAttributesById (attrId) {
 }
 
 /**
- * 绑定ci_type 属性
+ * bind attribute
  * @param CITypeId
  * @param data
  * @returns {AxiosPromise}
@@ -96,7 +96,7 @@ export function createCITypeAttributes (CITypeId, data) {
 }
 
 /**
- * 更新ci_type 属性
+ * update CI Type attribute
  * @param CITypeId
  * @param data
  * @returns {AxiosPromise}
@@ -110,7 +110,7 @@ export function updateCITypeAttributesById (CITypeId, data) {
 }
 
 /**
- * 删除ci_type 属性
+ * delete CI Type attribute
  * @param CITypeId
  * @param data
  * @returns {AxiosPromise}
diff --git a/cmdb-ui/src/components/tools/LangSelect.vue b/cmdb-ui/src/components/tools/LangSelect.vue
index 0d74231..54f9ee4 100644
--- a/cmdb-ui/src/components/tools/LangSelect.vue
+++ b/cmdb-ui/src/components/tools/LangSelect.vue
@@ -27,9 +27,11 @@ export default {
   data () {
     return {}
   },
+  inject: ['reload'],
   methods: {
     SwitchLang (row) {
       this.setLang(row.key)
+      this.reload()
     }
   }
 }
diff --git a/cmdb-ui/src/components/tools/UserMenu.vue b/cmdb-ui/src/components/tools/UserMenu.vue
index 4e410ef..8d51cfd 100644
--- a/cmdb-ui/src/components/tools/UserMenu.vue
+++ b/cmdb-ui/src/components/tools/UserMenu.vue
@@ -34,7 +34,7 @@
           <a-menu-item key="3">
             <a href="javascript:;" @click="handleLogout">
               <a-icon type="logout"/>
-              <span>退出登录</span>
+              <span>{{ $t('login.logout') }}</span>
             </a>
           </a-menu-item>
         </a-menu>
@@ -67,8 +67,8 @@ export default {
       const that = this
 
       this.$confirm({
-        title: '提示',
-        content: '真的要注销登录吗 ?',
+        title: this.$t('tip.warning'),
+        content: this.$t('login.confirmLogout'),
         onOk () {
           return that.Logout()
         },
diff --git a/cmdb-ui/src/layouts/UserLayout.vue b/cmdb-ui/src/layouts/UserLayout.vue
index 66dc239..6108f08 100644
--- a/cmdb-ui/src/layouts/UserLayout.vue
+++ b/cmdb-ui/src/layouts/UserLayout.vue
@@ -8,7 +8,7 @@
           </a>
         </div>
         <div class="desc">
-          运维资产数据管理
+          {{ $t('login.subTitle') }}
         </div>
       </div>
 
diff --git a/cmdb-ui/src/locales/lang/en-US.js b/cmdb-ui/src/locales/lang/en-US.js
index 686bc05..ed6300c 100644
--- a/cmdb-ui/src/locales/lang/en-US.js
+++ b/cmdb-ui/src/locales/lang/en-US.js
@@ -25,6 +25,7 @@ export default {
     add: 'Add',
     new: 'New',
     update: 'Edit',
+    save: 'Save',
     delete: 'Delete',
     yes: 'Yes',
     no: 'No',
@@ -33,6 +34,7 @@ export default {
     downloadTemplate: 'Download',
     upload: 'Upload',
     download: 'Download',
+    batchUpdate: 'Batch update',
     displayFields: 'Display Fields'
   },
   tip: {
@@ -45,6 +47,7 @@ export default {
     delete: 'Delete',
     edit: 'Edit',
     operate: 'Operation',
+    close: 'Close',
     create: 'Create',
     clear: 'Clear',
     modify: 'Modify',
@@ -53,20 +56,23 @@ export default {
     noData: 'No Data',
     addSuccess: 'Add successfully',
     updateSuccess: 'Update successfully',
+    saveSuccess: 'Save successfully',
     deleteSuccess: 'Delete successfully',
     cancelSuccess: 'Cancel successfully',
     downloading: 'Downloading ...',
     deleting: 'Deleting ...',
     confirmDelete: 'Confirm deleting ?',
     warning: 'Warning',
+    error: 'Error',
     other: 'Other',
     requestFailed: 'Request error, please try again later',
-    pleaseSelect: 'please select'
+    pleaseSelect: 'please select',
+    selectAll: 'Select all'
   },
   ci: {
     batchOperate: 'Batch Operation',
     confirmBatchUpdate: 'Confirm batch modification?',
-    batchUpdate: 'Batch update ...',
+    batchUpdate: 'Batch update',
     batchUpdateSuccess: 'Batch update successfully',
     confirmDelete: 'Confirm deleting ?',
     attribute: 'Attributes',
@@ -105,6 +111,9 @@ export default {
   ciType: {
     add: 'Add',
     addAttribute: 'Add Attribute',
+    addAttribute1: 'Add Attribute',
+    moreAttribute: 'More Attributes',
+    bindAttribute: 'Bind Attribute',
     editModel: 'Edit Model',
     modelName: 'Model Name',
     name: 'Name',
@@ -116,6 +125,7 @@ export default {
     link: 'Link',
     password: 'Password',
     list: 'List',
+    required: 'Required',
     integer: 'Integer',
     float: 'Float',
     text: 'Text',
@@ -124,6 +134,95 @@ export default {
     isIt: 'Is it ',
     predefinedValue: 'Predefined values',
     predefinedValueTip: 'Multiple values are separated by line breaks',
+    defaultShow: 'Default show',
+    typeAttribute: 'Attribute',
+    typeRelation: 'Relation',
+    requiredCheck: 'Required check',
+    defaultShowAttribute: 'Default display attributes',
+    attributeGroup: 'Attribute grouping & sorting',
+    addGroup: 'Add Group',
+    deleteGroup: 'Delete Group',
+    up: 'Up',
+    down: 'Down',
+    moveSuccess: 'Move successfully',
+    moveFailed: 'Move Failed',
+    groupNameExisted: 'The group name already exists',
+    moreAttributeCannotSort: 'More attributes cannot be sorted. If you need to sort, add them to other groups!',
+    newCIType: 'New CI Type',
+    editCIType: 'Edit CI Type',
+    newRelation: 'New Relation',
+    sourceCIType: 'Source CI Type',
+    targetCIType: 'Target CI Type',
+    relationType: 'Relation Type',
+    relationViewDefinePanel: 'Relationship view definition panel',
+    relationViewDefinePanelTip1: 'Method 1. Right-click tree node (recommended)',
+    relationViewDefinePanelTip2: 'Method 2. Open the switch in the upper right corner and select the node of the tree',
+    newRealtionView: 'New relational view',
+    RealtionViewName: 'Relational view name',
+    RealtionViewNameRequired: 'Please enter a relational view name',
+    newRelationType: 'New Relation Type',
+    relationTypeNameRequired: 'Please enter a type name',
     uniqueFlag: 'unique flag'
+  },
+  acl: {
+    roleList: 'Roles',
+    permList: 'Permissions',
+    selectOtherRole: 'Please select another role',
+    associatedParentRole: 'Associated parent role',
+    associatedChildRole: 'Associated child role',
+    associatedSuccess: 'Associated with success',
+    name: 'Name',
+    roleName: 'Role Name',
+    description: 'Desciption',
+    resourceNameRequired: 'Please enter the resource name',
+    descriptionTip: 'Please enter description...',
+    permission: 'Permission',
+    resourceType: 'Resource Type',
+    newResource: 'New Resource',
+    newRole: 'New Role',
+    newResourceType: 'New Resource Type',
+    addPermTip: 'Add authorization: ',
+    add: 'Add',
+    selectRoleTip: 'Please select the role name. Multiple choices are available!',
+    selectPermTip: 'Please select permissions. Multiple options are available!',
+    resourceTypeNameRequired: 'Please enter a type name',
+    permissionNameRequired: 'Please enter a permission name',
+    roleNameRequired: 'Please enter a role name',
+    usernameRequired: 'Please enter a user name',
+    inheritedFrom: 'Inherited from ',
+    selectInheritedRoles: 'Select inherited roles',
+    isAppAdmin: 'Is Application Admin',
+    username: 'Username',
+    nickname: 'NickName',
+    password: 'Password',
+    department: 'Department',
+    catalog: 'Team',
+    email: 'Email',
+    emailValidate: 'Please enter the correct email address!',
+    emailRequired: 'Please enter email address',
+    mobile: 'Mobile phone number',
+    mobileValidate: 'Please enter the correct mobile phone number',
+    block: 'Is lock',
+    newUser: 'New User',
+    typeName: 'Type name',
+    viewAuthorization: 'View Authorization',
+    authorization: 'Authorization',
+    resourceName: 'Resource Name',
+    createdAt: 'Creation time',
+    updatedAt: 'Last modified time',
+    joinedAt: 'Join time'
+  }, 
+  login: {
+    subTitle: 'Operation and maintenance resource data management',
+    loginHeader: 'Account password login',
+    loginName: 'User name or email address',
+    loginNameRequired: 'Please enter your account name or email address',
+    password: 'Password',
+    passwordRequired: 'Please enter your password',
+    autoLogin: 'Automatic login',
+    welcome: 'Welocom',
+    welcomeBack: 'Welcome back',
+    confirmLogout: 'Do you really want to logout?',
+    logout: 'Logout',
   }
 }
diff --git a/cmdb-ui/src/locales/lang/zh-CN.js b/cmdb-ui/src/locales/lang/zh-CN.js
index ee743ef..95952dc 100644
--- a/cmdb-ui/src/locales/lang/zh-CN.js
+++ b/cmdb-ui/src/locales/lang/zh-CN.js
@@ -25,6 +25,7 @@ export default {
     add: '新增',
     new: '新建',
     update: '修改',
+    save: '保存',
     delete: '删除',
     yes: '是',
     no: '否',
@@ -33,6 +34,7 @@ export default {
     downloadTemplate: '下载模板',
     upload: '上传',
     download: '下载',
+    batchUpdate: '批量修改',
     displayFields: '显示字段'
   },
   tip: {
@@ -45,23 +47,27 @@ export default {
     delete: '删除',
     edit: '编辑',
     operate: '操作',
+    close: '关闭',
     create: '创建',
     clear: '清空',
     modify: '修改',
-    unselectedAttribute: '未选属性',
-    selectedAttribute: '已选属性',
+    unselectedAttribute: '当前项',
+    selectedAttribute: '已选项',
     noData: '没数据',
     addSuccess: '新增成功',
     updateSuccess: '修改成功',
+    saveSuccess: '保存成功',
     deleteSuccess: '删除成功',
     cancelSuccess: '取消成功',
     downloading: '正在下载 ...',
     deleting: '正在删除 ...',
     confirmDelete: '真的要删除吗 ?',
     warning: '警告',
+    error: '错误',
     other: '其他',
     requestFailed: '请求出现错误,请稍后再试',
-    pleaseSelect: '请选择'
+    pleaseSelect: '请选择',
+    selectAll: '全选'
   },
   ci: {
     batchOperate: '批量操作',
@@ -105,6 +111,9 @@ export default {
   ciType: {
     add: '新增',
     addAttribute: '新增属性',
+    bindAttribute: '绑定属性',
+    addAttribute1: '添加属性',
+    moreAttribute: '更多属性',
     editModel: '编辑模型',
     modelName: '模型名(英文)',
     name: '名称',
@@ -116,6 +125,7 @@ export default {
     link: '链接',
     password: '密码',
     list: '列表',
+    required: '必须',
     integer: '整数',
     float: '浮点数',
     text: '文本',
@@ -124,6 +134,95 @@ export default {
     isIt: '是否',
     predefinedValue: '预定义值',
     predefinedValueTip: '多个值使用换行分隔',
+    defaultShow: '默认显示',
+    typeAttribute: '模型属性',
+    typeRelation: '模型关联',
+    requiredCheck: '必须校验',
+    defaultShowAttribute: '默认显示属性',
+    attributeGroup: '属性分组 & 排序',
+    addGroup: '添加分组',
+    deleteGroup: '删除分组',
+    up: '上移',
+    down: '下移',
+    moveSuccess: '移动成功',
+    moveFailed: '移动出错',
+    groupNameExisted: '分组名称已存在',
+    moreAttributeCannotSort: '更多属性不能进行排序, 如需排序需添加入其他分组中!',
+    newCIType: '新增模型',
+    editCIType: '编辑模型',
+    newRelation: '新增关系',
+    sourceCIType: '源模型',
+    targetCIType: '目标模型',
+    relationType: '关联关系',
+    relationViewDefinePanel: '关系视图定义面板',
+    relationViewDefinePanelTip1: '方法1. 右键选择树节点(推荐)',
+    relationViewDefinePanelTip2: '方法2. 先打开右上角的开关,再选择树的节点',
+    newRealtionView: '新增关系视图',
+    RealtionViewName: '关系视图名',
+    RealtionViewNameRequired: '请输入 关系视图名',
+    newRelationType: '新增关系类型',
+    relationTypeNameRequired: '请输入类型名',
     uniqueFlag: '唯一标识'
+  },
+  acl: {
+    roleList: '角色列表',
+    permList: '权限列表',
+    selectOtherRole: '请选择另一个角色',
+    associatedParentRole: '关联父角色',
+    associatedChildRole: '关联子角色',
+    associatedSuccess: '关联成功',
+    name: '名称',
+    roleName: '角色名称',
+    description: '描述',
+    resourceNameRequired: '请输入资源名',
+    descriptionTip: '请输入描述信息...',
+    permission: '权限',
+    resourceType: '资源类型',
+    newResource: '新增资源',
+    newRole: '新增角色',
+    newResourceType: '新增资源类型',
+    addPermTip: '添加授权:',
+    add: '添加',
+    selectRoleTip: '请选择角色名称,可多选!',
+    selectPermTip: '请选择权限,可多选!',
+    resourceTypeNameRequired: '请输入类型名',
+    permissionNameRequired: '请输入权限名',
+    roleNameRequired: '请输入角色名',
+    usernameRequired: '请输入用户名',
+    inheritedFrom: '继承自',
+    selectInheritedRoles: '选择继承角色',
+    isAppAdmin: '是否应用管理员',
+    username: '用户名',
+    nickname: '昵称',
+    password: '密码',
+    department: '部门',
+    catalog: '小组',
+    email: '邮箱',
+    emailValidate: '请输入正确的邮箱!',
+    emailRequired: '请输入邮箱',
+    mobile: '手机号码',
+    mobileValidate: '请输入正确的手机号码',
+    block: '是否锁定',
+    newUser: '新增用户',
+    typeName: '类型名',
+    viewAuthorization: '查看授权',
+    authorization: '授权',
+    resourceName: '资源名',
+    createdAt: '创建时间',
+    updatedAt: '最后修改时间',
+    joinedAt: '加入时间'
+  }, 
+  login: {
+    subTitle: '运维资源数据管理',
+    loginHeader: '账号密码登录',
+    loginName: '用户名或者邮箱',
+    loginNameRequired: '请输入帐户名或邮箱地址',
+    password: '密码',
+    passwordRequired: '请输入密码',
+    autoLogin: '自动登录',
+    welcome: '欢迎',
+    welcomeBack: '欢迎回来',
+    confirmLogout: '真的要注销登录吗 ?',
+    logout: '退出登录',
   }
 }
diff --git a/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue b/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue
index b107a8d..8d61e09 100644
--- a/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue
+++ b/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue
@@ -13,9 +13,9 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="角色列表"
+        :label="$t('acl.roleList')"
       >
-        <a-select name="otherID" :filterOption="filterOption" v-decorator="['otherID', {rules: [{ required: true, message: '请选择另一个角色'}]} ]">
+        <a-select name="otherID" :filterOption="filterOption" v-decorator="['otherID', {rules: [{ required: true, message: $t('acl.selectOtherRole')}]} ]">
           <template v-for="role in allRoles">
             <a-select-option v-if="role.id != current_record.id" :key="role.id">{{ role.name }}</a-select-option>
           </template>
@@ -42,8 +42,8 @@
 
         }"
       >
-        <a-button @click="handleAddParent" type="primary" style="margin-right: 1rem">关联父角色</a-button>
-        <a-button @click="handleAddChild" type="primary" style="margin-right: 1rem">关联子角色</a-button>
+        <a-button @click="handleAddParent" type="primary" style="margin-right: 1rem">{{ $t('acl.associatedParentRole') }}</a-button>
+        <a-button @click="handleAddChild" type="primary" style="margin-right: 1rem">{{ $t('acl.associatedChildRole') }}</a-button>
         <a-button @click="onClose">{{ $t('button.cancel') }}</a-button>
 
       </div>
@@ -64,7 +64,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '角色关联',
+      drawerTitle: this.$t('acl.associatedRole'),
       drawerVisible: false,
       formLayout: 'vertical',
       allRoles: [],
@@ -144,7 +144,7 @@ export default {
     addParent (id, otherID) {
       addParentRole(id, otherID)
         .then(res => {
-          this.$message.success(`关联父角色成功`)
+          this.$message.success(this.$t('acl.associatedSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -153,7 +153,7 @@ export default {
     addChild (id, otherID) {
       addChildRole(id, otherID)
         .then(res => {
-          this.$message.success(`关联子角色成功`)
+          this.$message.success(this.$t('acl.associatedSuccess'))
           this.handleOk()
           this.onClose()
         })
@@ -161,7 +161,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/permissionForm.vue b/cmdb-ui/src/views/acl/module/permissionForm.vue
index 437c1bb..eadd758 100644
--- a/cmdb-ui/src/views/acl/module/permissionForm.vue
+++ b/cmdb-ui/src/views/acl/module/permissionForm.vue
@@ -13,31 +13,31 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="类型名"
+        :label="$t('acl.name')"
       >
         <a-input
           name="name"
           placeholder=""
-          v-decorator="['name', {rules: [{ required: true, message: '请输入资源名'}]} ]"
+          v-decorator="['name', {rules: [{ required: true, message: $t('acl.resourceNameRequired') }]} ]"
         />
       </a-form-item>
 
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="描述"
+        :label="$t('acl.description')"
       >
-        <a-textarea placeholder="请输入描述信息..." name="description" :rows="4" />
+        <a-textarea :placeholder="$t('acl.descriptionTip')" name="description" :rows="4" />
       </a-form-item>
 
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="权限"
+        :label="$t('acl.permission')"
       >
         <div :style="{ borderBottom: '1px solid #E9E9E9' }">
           <a-checkbox :indeterminate="indeterminate" @change="onCheckAllChange" :checked="checkAll">
-            全选
+            {{ $t('tip.selectAll') }}
           </a-checkbox>
         </div>
         <br />
@@ -86,7 +86,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '新增资源类型',
+      drawerTitle: this.$t('acl.newResourceType'),
       drawerVisible: false,
       formLayout: 'vertical',
       perms: ['1'],
@@ -177,7 +177,7 @@ export default {
     updateResourceType (id, data) {
       updateResourceTypeById(id, data)
         .then(res => {
-          this.$message.success(`更新成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -186,7 +186,7 @@ export default {
     createResourceType (data) {
       addResourceType(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.handleOk()
           this.onClose()
         })
@@ -194,7 +194,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/resourceForm.vue b/cmdb-ui/src/views/acl/module/resourceForm.vue
index cf1991a..bd475bc 100644
--- a/cmdb-ui/src/views/acl/module/resourceForm.vue
+++ b/cmdb-ui/src/views/acl/module/resourceForm.vue
@@ -13,19 +13,19 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="资源名"
+        :label="$t('acl.name')"
       >
         <a-input
           name="name"
           placeholder=""
-          v-decorator="['name', {rules: [{ required: true, message: '请输入资源名'}]} ]"
+          v-decorator="['name', {rules: [{ required: true, message: $t('acl.resourceNameRequired')}]} ]"
         />
       </a-form-item>
 
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="资源类型"
+        :label="$t('acl.resourceType')"
       >
         <a-select name="type_id" v-decorator="['type_id', {rules: []} ]">
           <a-select-option v-for="type in allTypes" :key="type.id">{{ type.name }}</a-select-option>
@@ -73,7 +73,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '新增资源',
+      drawerTitle: this.$t('acl.newResource'),
       drawerVisible: false,
       formLayout: 'vertical',
       allTypes: []
@@ -150,14 +150,14 @@ export default {
     createResource (data) {
       addResource(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.onClose()
         })
         .catch(err => this.requestFailed(err))
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/resourcePermForm.vue b/cmdb-ui/src/views/acl/module/resourcePermForm.vue
index 8741c82..8305595 100644
--- a/cmdb-ui/src/views/acl/module/resourcePermForm.vue
+++ b/cmdb-ui/src/views/acl/module/resourcePermForm.vue
@@ -5,7 +5,7 @@
     width="50%"
   >
     <template slot="footer">
-      <a-button key="back" @click="handleCancel">关闭</a-button>
+      <a-button key="back" @click="handleCancel">{{ $t('tip.close') }}</a-button>
     </template>
 
     <template>
@@ -40,7 +40,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '权限列表',
+      drawerTitle: this.$t('acl.permList'),
       drawerVisible: false,
       record: null,
       allPerms: [],
@@ -80,7 +80,7 @@ export default {
     },
     deletePerm (roleID, permName) {
       deleteRoleResourcePerm(roleID, this.record.id, { perms: [permName] }).then(res => {
-        this.$message.success(`删除成功`)
+        this.$message.success(this.$t('tip.deleteSuccess'))
       }).catch(err => this.requestFailed(err))
     },
     handleCancel (e) {
@@ -88,7 +88,7 @@ export default {
     },
     requestFailed (err) {
       console.log(err)
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue b/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue
index f398380..f8ce0a0 100644
--- a/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue
+++ b/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue
@@ -1,6 +1,6 @@
 <template>
   <a-drawer
-    :title="'添加授权:'+instance.name"
+    :title="$t('acl.addPermTip')+instance.name"
     width="30%"
     :closable="true"
     :visible="visible"
@@ -8,28 +8,28 @@
   >
     <a-form :form="form">
       <a-form-item
-        label="角色列表"
+        :label="$t('acl.roleList')"
       >
         <a-select
           showSearch
           name="roleIdList"
           v-decorator="['roleIdList', {rules: []} ]"
           mode="multiple"
-          placeholder="请选择角色名称,可多选!"
+          :placeholder="$t('acl.selectRoleTip')"
           :filterOption="filterOption">
           <a-select-option v-for="role in allRoles" :key="role.id">{{ role.name }}</a-select-option>
         </a-select>
       </a-form-item>
 
       <a-form-item
-        label="权限列表"
+        :label="$t('acl.permList')"
       >
-        <a-select name="permName" v-decorator="['permName', {rules: []} ]" mode="multiple" placeholder="请选择权限,可多选!">
+        <a-select name="permName" v-decorator="['permName', {rules: []} ]" mode="multiple" :placeholder="$t('acl.selectPermTip')">
           <a-select-option v-for="perm in allPerms" :key="perm.name">{{ perm.name }}</a-select-option>
         </a-select>
       </a-form-item>
       <div class="btn-group">
-        <a-button @click="handleSubmit" type="primary" style="margin-right: 1rem">添加</a-button>
+        <a-button @click="handleSubmit" type="primary" style="margin-right: 1rem">{{ $t('acl.add') }}</a-button>
         <a-button @click="closeForm">{{ $t('button.cancel') }}</a-button>
       </div>
 
@@ -47,7 +47,7 @@ export default {
       allRoles: [],
       allPerms: [],
       visible: false,
-      instance: {} // 当前对象
+      instance: {}
     }
   },
   props: {
@@ -84,7 +84,7 @@ export default {
       this.loadPerm(record['resource_type_id'])
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     filterOption (input, option) {
@@ -98,7 +98,7 @@ export default {
         if (!err) {
           values.roleIdList.forEach(roleId => {
             setRoleResourcePerm(roleId, this.instance.id, { perms: values.permName }).then(
-              res => { this.$message.info('添加授权成功') }).catch(
+              res => { this.$message.info(this.$t('tip.addSuccess')) }).catch(
               err => this.requestFailed(err))
           })
         }
diff --git a/cmdb-ui/src/views/acl/module/resourceTypeForm.vue b/cmdb-ui/src/views/acl/module/resourceTypeForm.vue
index e9a4017..afb9833 100644
--- a/cmdb-ui/src/views/acl/module/resourceTypeForm.vue
+++ b/cmdb-ui/src/views/acl/module/resourceTypeForm.vue
@@ -13,29 +13,29 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="类型名"
+        :label="$t('acl.name')"
       >
         <a-input
           name="name"
-          placeholder="类型名称"
-          v-decorator="['name', {rules: [{ required: true, message: '请输入类型名'}]} ]"
+          :placeholder="$t('acl.name')"
+          v-decorator="['name', {rules: [{ required: true, message: $t('acl.resourceTypeNameRequired')}]} ]"
         />
       </a-form-item>
 
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="描述"
+        :label="$t('acl.description')"
       >
-        <a-textarea placeholder="请输入描述信息..." name="description" :rows="4" v-decorator="['description', {rules: []} ]"/>
+        <a-textarea :placeholder="$t('acl.descriptionTip')" name="description" :rows="4" v-decorator="['description', {rules: []} ]"/>
       </a-form-item>
 
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="权限"
+        :label="$t('acl.permission')"
       >
-        <a-select mode="tags" v-model="perms" style="width: 100%" placeholder="请输入权限名...">
+        <a-select mode="tags" v-model="perms" style="width: 100%" :placeholder="$t('acl.permissionNameRequired')">
         </a-select>
 
       </a-form-item>
@@ -81,7 +81,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '新增资源类型',
+      drawerTitle: this.$t('acl.newResourceType'),
       drawerVisible: false,
       formLayout: 'vertical',
       perms: []
@@ -159,7 +159,7 @@ export default {
     updateResourceType (id, data) {
       updateResourceTypeById(id, data)
         .then(res => {
-          this.$message.success(`更新成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -168,7 +168,7 @@ export default {
     createResourceType (data) {
       addResourceType(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.handleOk()
           this.onClose()
         })
@@ -176,7 +176,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/roleForm.vue b/cmdb-ui/src/views/acl/module/roleForm.vue
index 57460ef..8f542d6 100644
--- a/cmdb-ui/src/views/acl/module/roleForm.vue
+++ b/cmdb-ui/src/views/acl/module/roleForm.vue
@@ -13,22 +13,22 @@
       <a-form-item
         :label-col="{span:6}"
         :wrapper-col="{span:12}"
-        label="角色名"
+        :label="$t('acl.roleName')"
       >
         <a-input
           name="name"
           placeholder=""
-          v-decorator="['name', {rules: [{ required: true, message: '请输入角色名'}]} ]"
+          v-decorator="['name', {rules: [{ required: true, message: $t('acl.roleNameRequired')}]} ]"
         />
       </a-form-item>
       <a-form-item
         :label-col="{span:6}"
         :wrapper-col="{span:12}"
-        label="继承自"
+        :label="$t('acl.inheritedFrom')"
       >
         <a-select
           v-model="selectedParents"
-          placeholder="可选择继承角色"
+          :placeholder="$t('acl.selectInheritedRoles')"
           mode="multiple"
           :filterOption="filterOption">
           <template v-for="role in allRoles">
@@ -39,7 +39,7 @@
       <a-form-item
         :label-col="{span:8}"
         :wrapper-col="{span:10}"
-        label="是否应用管理员"
+        :label="$t('acl.isAppAdmin')"
       >
         <a-switch
           @change="onChange"
@@ -86,7 +86,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '新增角色',
+      drawerTitle: this.$t('acl.newRole'),
       current_id: 0,
       drawerVisible: false,
       formLayout: 'vertical',
@@ -130,7 +130,7 @@ export default {
       )
     },
     handleCreate () {
-      this.drawerTitle = '新增'
+      this.drawerTitle = this.$t('button.add')
       this.drawerVisible = true
     },
     onClose () {
@@ -144,7 +144,7 @@ export default {
     },
 
     handleEdit (record) {
-      this.drawerTitle = '编辑'
+      this.drawerTitle = this.$t('button.update')
       this.drawerVisible = true
       this.current_id = record.id
       const _parents = this.id2parents[record.id]
@@ -180,7 +180,7 @@ export default {
       this.updateParents(id)
       updateRoleById(id, data)
         .then(res => {
-          this.$message.success(`更新成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -189,7 +189,7 @@ export default {
     createRole (data) {
       addRole(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.updateParents(res.id)
           this.handleOk()
           this.onClose()
@@ -209,7 +209,7 @@ export default {
       })
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/module/userForm.vue b/cmdb-ui/src/views/acl/module/userForm.vue
index de2bef5..b6be567 100644
--- a/cmdb-ui/src/views/acl/module/userForm.vue
+++ b/cmdb-ui/src/views/acl/module/userForm.vue
@@ -13,18 +13,18 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="用户名(英文)"
+        :label="$t('acl.username')"
       >
         <a-input
           name="username"
-          placeholder="英文名"
-          v-decorator="['username', {rules: [{ required: true, message: '请输入用户名'}]} ]"
+          :placeholder="$t('acl.username')"
+          v-decorator="['username', {rules: [{ required: true, message: $t('acl.usernameRequired')}]} ]"
         />
       </a-form-item>
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="中文名"
+        :label="$t('acl.nickname')"
       >
         <a-input
           name="nickname"
@@ -34,7 +34,7 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="密码"
+        :label="$t('acl.password')"
       >
         <a-input
           type="password"
@@ -46,7 +46,7 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="部门"
+        :label="$t('acl.department')"
       >
         <a-input
           name="department"
@@ -57,7 +57,7 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="小组"
+        :label="$t('acl.catalog')"
       >
         <a-input
           name="catalog"
@@ -68,7 +68,7 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="邮箱"
+        :label="$t('acl.email')"
       >
         <a-input
           name="email"
@@ -78,11 +78,11 @@
               rules: [
                 {
                   type: 'email',
-                  message: '请输入正确的邮箱!',
+                  message: $t('acl.emailValidate'),
                 },
                 {
                   required: true,
-                  message: '请输入邮箱',
+                  message: $t('acl.emailRequired'),
                 },
               ],
             },
@@ -93,18 +93,18 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="手机号码"
+        :label="$t('acl.mobile')"
       >
         <a-input
           name="mobile"
-          v-decorator="['mobile', {rules: [{message: '请输入正确的手机号码', pattern: /^1\d{10}$/ }]} ]"
+          v-decorator="['mobile', {rules: [{message: $t('acl.mobileValidate'), pattern: /^1\d{10}$/ }]} ]"
         />
       </a-form-item>
 
       <a-form-item
         :label-col="horizontalFormItemLayout.labelCol"
         :wrapper-col="horizontalFormItemLayout.wrapperCol"
-        label="是否锁定"
+        :label="$t('acl.block')"
       >
         <a-switch
           @change="onChange"
@@ -154,7 +154,7 @@ export default {
   },
   data () {
     return {
-      drawerTitle: '新增用户',
+      drawerTitle: this.$t('acl.newUser'),
       drawerVisible: false,
       formLayout: 'vertical'
     }
@@ -235,7 +235,7 @@ export default {
     updateUser (attrId, data) {
       updateUserById(attrId, data)
         .then(res => {
-          this.$message.success(`更新成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -244,7 +244,7 @@ export default {
     createUser (data) {
       addUser(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.handleOk()
           this.onClose()
         })
@@ -252,7 +252,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/acl/permissions.vue b/cmdb-ui/src/views/acl/permissions.vue
index d4fe72c..db88044 100644
--- a/cmdb-ui/src/views/acl/permissions.vue
+++ b/cmdb-ui/src/views/acl/permissions.vue
@@ -2,7 +2,7 @@
   <a-card :bordered="false">
 
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('acl.newResourceType') }}</a-button>
     </div>
 
     <s-table
@@ -34,7 +34,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -65,11 +65,11 @@
           <a-divider type="vertical"/>
 
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -97,7 +97,6 @@ export default {
     return {
       id2perms: {},
       scroll: { x: 1000, y: 500 },
-      btnName: '新增资源类型',
 
       formLayout: 'vertical',
 
@@ -109,7 +108,7 @@ export default {
       },
       columns: [
         {
-          title: '类型名',
+          title: this.$t('acl.typeName'),
           dataIndex: 'name',
           sorter: false,
           width: 50,
@@ -128,20 +127,20 @@ export default {
           }
         },
         {
-          title: '描述',
+          title: this.$t('acl.description'),
           dataIndex: 'description',
           width: 250,
           sorter: false,
           scopedSlots: { customRender: 'description' }
         },
         {
-          title: '权限',
+          title: this.$t('acl.permission'),
           dataIndex: 'id',
           sorter: false,
           scopedSlots: { customRender: 'id' }
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 150,
           fixed: 'right',
@@ -169,11 +168,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -255,13 +251,13 @@ export default {
     deleteResourceType (id) {
       deleteResourceTypeById(id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     cancel () {
diff --git a/cmdb-ui/src/views/acl/resource_types.vue b/cmdb-ui/src/views/acl/resource_types.vue
index cd42424..18cc49e 100644
--- a/cmdb-ui/src/views/acl/resource_types.vue
+++ b/cmdb-ui/src/views/acl/resource_types.vue
@@ -2,7 +2,7 @@
   <a-card :bordered="false">
 
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('acl.newResourceType') }}</a-button>
     </div>
 
     <s-table
@@ -12,7 +12,7 @@
       :rowKey="record=>record.id"
       :rowSelection="options.rowSelection"
       :scroll="scroll"
-      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条记录`, pageSizeOptions: pageSizeOptions}"
+      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]}  ${total} records in total`, pageSizeOptions: pageSizeOptions}"
       showPagination="auto"
       :pageSize="25"
       ref="table"
@@ -34,7 +34,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -65,11 +65,11 @@
           <a-divider type="vertical"/>
 
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -97,7 +97,6 @@ export default {
     return {
       id2perms: {},
       scroll: { x: 1000, y: 500 },
-      btnName: '新增资源类型',
 
       formLayout: 'vertical',
 
@@ -109,7 +108,7 @@ export default {
       },
       columns: [
         {
-          title: '类型名',
+          title: this.$t('acl.typeName'),
           dataIndex: 'name',
           sorter: false,
           width: 150,
@@ -128,21 +127,21 @@ export default {
           }
         },
         {
-          title: '描述',
+          title: this.$t('acl.description'),
           dataIndex: 'description',
           width: 200,
           sorter: false,
           scopedSlots: { customRender: 'description' }
         },
         {
-          title: '权限',
+          title: this.$t('acl.permission'),
           dataIndex: 'id',
           width: 300,
           sorter: false,
           scopedSlots: { customRender: 'id' }
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 150,
           scopedSlots: { customRender: 'action' }
@@ -169,11 +168,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -263,13 +259,13 @@ export default {
     deleteResourceType (id) {
       deleteResourceTypeById(id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     cancel () {
diff --git a/cmdb-ui/src/views/acl/resources.vue b/cmdb-ui/src/views/acl/resources.vue
index 8fe9e07..d0c53ac 100644
--- a/cmdb-ui/src/views/acl/resources.vue
+++ b/cmdb-ui/src/views/acl/resources.vue
@@ -18,7 +18,7 @@
     </div>
     <a-divider style="margin-top: -16px" />
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('acl.newResource') }}</a-button>
     </div>
 
     <s-table
@@ -28,7 +28,7 @@
       :rowKey="record=>record.id"
       :rowSelection="options.rowSelection"
       :scroll="scroll"
-      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条记录`, pageSizeOptions: pageSizeOptions}"
+      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} ${total} records in total`, pageSizeOptions: pageSizeOptions}"
       showPagination="auto"
       :pageSize="25"
       ref="table"
@@ -50,7 +50,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -70,16 +70,16 @@
       </template>
       <span slot="action" slot-scope="text, record">
         <template>
-          <a @click="handlePerm(record)">查看授权</a>
+          <a @click="handlePerm(record)">{{ $t('acl.viewAuthorization') }}</a>
           <a-divider type="vertical"/>
-          <a @click="handlePermManage(record)">授权</a>
+          <a @click="handlePermManage(record)">{{ $t('acl.authorization') }}</a>
           <a-divider type="vertical"/>
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -111,7 +111,6 @@ export default {
   data () {
     return {
       scroll: { x: 1000, y: 500 },
-      btnName: '新增资源',
       allResourceTypes: [],
       currentType: { id: 0 },
       formLayout: 'vertical',
@@ -125,7 +124,7 @@ export default {
       },
       columns: [
         {
-          title: '资源名',
+          title: this.$t('acl.resourceName'),
           dataIndex: 'name',
           sorter: false,
           width: 250,
@@ -144,17 +143,17 @@ export default {
           }
         },
         {
-          title: '创建时间',
+          title: this.$t('acl.createdAt'),
           width: 200,
           dataIndex: 'created_at'
         },
         {
-          title: '最后修改时间',
+          title: this.$t('acl.updatedAt'),
           width: 200,
           dataIndex: 'updated_at'
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 150,
           scopedSlots: { customRender: 'action' }
@@ -181,11 +180,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -281,13 +277,13 @@ export default {
     deleteResource (id) {
       deleteResourceById(id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     cancel () {
diff --git a/cmdb-ui/src/views/acl/roles.vue b/cmdb-ui/src/views/acl/roles.vue
index 2d4fc6c..889cd9e 100644
--- a/cmdb-ui/src/views/acl/roles.vue
+++ b/cmdb-ui/src/views/acl/roles.vue
@@ -2,7 +2,7 @@
   <a-card :bordered="false">
 
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('acl.newRole') }}</a-button>
     </div>
 
     <s-table
@@ -11,7 +11,7 @@
       :data="loadData"
       :rowKey="record=>record.id"
       :rowSelection="options.rowSelection"
-      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条记录`, pageSizeOptions: pageSizeOptions}"
+      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} ${total} records in total`, pageSizeOptions: pageSizeOptions}"
       showPagination="auto"
       :pageSize="25"
       ref="table"
@@ -32,7 +32,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -61,14 +61,14 @@
 
       <span slot="action" slot-scope="text, record">
         <template>
-          <a @click="handleEdit(record)">修改</a>
+          <a @click="handleEdit(record)">{{ $t('button.update') }}</a>
           <a-divider type="vertical"/>
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -93,7 +93,6 @@ export default {
   data () {
     return {
       scroll: { x: 1000, y: 500 },
-      btnName: '新增角色',
 
       formLayout: 'vertical',
 
@@ -107,7 +106,7 @@ export default {
       },
       columns: [
         {
-          title: '角色名',
+          title: this.$t('acl.roleName'),
           dataIndex: 'name',
           sorter: false,
           width: 150,
@@ -126,7 +125,7 @@ export default {
           }
         },
         {
-          title: '是否管理员',
+          title: this.$t('acl.isAppAdmin'),
           dataIndex: 'is_app_admin',
           width: 100,
           sorter: false,
@@ -134,7 +133,7 @@ export default {
 
         },
         {
-          title: '继承自',
+          title: this.$t('acl.inheritedFrom'),
           dataIndex: 'id',
           sorter: false,
           width: 250,
@@ -142,7 +141,7 @@ export default {
 
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 150,
           scopedSlots: { customRender: 'action' }
@@ -171,11 +170,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -256,13 +252,13 @@ export default {
     deleteRole (id) {
       deleteRoleById(id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     cancel (e) {
diff --git a/cmdb-ui/src/views/acl/users.vue b/cmdb-ui/src/views/acl/users.vue
index 640a907..b13fc48 100644
--- a/cmdb-ui/src/views/acl/users.vue
+++ b/cmdb-ui/src/views/acl/users.vue
@@ -2,7 +2,7 @@
   <a-card :bordered="false">
 
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('acl.newUser') }}</a-button>
     </div>
 
     <s-table
@@ -12,7 +12,7 @@
       :rowKey="record=>record.uid"
       :rowSelection="options.rowSelection"
       :scroll="scroll"
-      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条记录`, pageSizeOptions: pageSizeOptions}"
+      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} ${total} records in total`, pageSizeOptions: pageSizeOptions}"
       showPagination="auto"
       :pageSize="25"
       ref="table"
@@ -33,7 +33,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -75,11 +75,11 @@
           <a-divider type="vertical"/>
 
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -106,7 +106,6 @@ export default {
   data () {
     return {
       scroll: { x: 1300, y: 500 },
-      btnName: '新增用户',
 
       CITypeName: this.$route.params.CITypeName,
       CITypeId: this.$route.params.CITypeId,
@@ -122,7 +121,7 @@ export default {
       },
       columns: [
         {
-          title: '用户名',
+          title: this.$t('acl.username'),
           dataIndex: 'username',
           sorter: false,
           width: 150,
@@ -141,7 +140,7 @@ export default {
           }
         },
         {
-          title: '中文名',
+          title: this.$t('acl.nickname'),
           dataIndex: 'nickname',
           sorter: false,
           width: 150,
@@ -160,7 +159,7 @@ export default {
           }
         },
         {
-          title: '部门',
+          title: this.$t('acl.department'),
           dataIndex: 'department',
           width: 100,
           sorter: false,
@@ -168,7 +167,7 @@ export default {
 
         },
         {
-          title: '小组',
+          title: this.$t('acl.catalog'),
           dataIndex: 'catalog',
           sorter: false,
           width: 100,
@@ -176,7 +175,7 @@ export default {
 
         },
         {
-          title: '邮箱',
+          title: this.$t('acl.email'),
           dataIndex: 'email',
           sorter: false,
           width: 200,
@@ -184,7 +183,7 @@ export default {
 
         },
         {
-          title: '手机',
+          title: this.$t('acl.mobile'),
           dataIndex: 'mobile',
           sorter: false,
           width: 150,
@@ -192,7 +191,7 @@ export default {
 
         },
         {
-          title: '加入时间',
+          title: this.$t('acl.joinedAt'),
           dataIndex: 'date_joined',
           sorter: false,
           width: 200,
@@ -200,13 +199,13 @@ export default {
 
         },
         {
-          title: '锁定',
+          title: this.$t('acl.block'),
           dataIndex: 'block',
           width: 100,
           scopedSlots: { customRender: 'block' }
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 150,
           scopedSlots: { customRender: 'action' }
@@ -232,11 +231,8 @@ export default {
           })
       },
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
       selectedRowKeys: [],
       selectedRows: [],
       // custom table alert & rowSelection
@@ -316,13 +312,13 @@ export default {
     deleteUser (attrId) {
       deleteUserById(attrId)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue
index 5609f4e..11298be 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue
@@ -72,10 +72,10 @@
           <a-divider type="vertical"/>
 
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -100,7 +100,7 @@
           :render="item=>item.title"
           :selectedKeys="transferSelectedKeys"
           :targetKeys="transferTargetKeys"
-          :titles="['当前项', '已选项']"
+          :titles="[$t('tip.unselectedAttribute'), $t('tip.selectedAttribute')]"
           :listStyle="{
             height: '600px',
             width: '40%',
@@ -163,8 +163,8 @@ export default {
         drawerVisible: false
       },
       batchBindAttrAction: {
-        btnName: '绑定属性',
-        drawerTitle: '绑定属性',
+        btnName: this.$t('ciType.bindAttribute'),
+        drawerTitle: this.$t('ciType.bindAttribute'),
         drawerVisible: false
       },
 
@@ -191,7 +191,7 @@ export default {
       },
       columns: [
         {
-          title: '名称',
+          title: this.$t('ciType.alias'),
           dataIndex: 'alias',
           sorter: false,
           width: 200,
@@ -210,7 +210,7 @@ export default {
           }
         },
         {
-          title: '英文名',
+          title: this.$t('ciType.name'),
           dataIndex: 'name',
           sorter: false,
           width: 200,
@@ -229,7 +229,7 @@ export default {
           }
         },
         {
-          title: '类型',
+          title: this.$t('ciType.type'),
           dataIndex: 'value_type',
           sorter: false,
           width: 100,
@@ -238,7 +238,7 @@ export default {
 
         },
         {
-          title: '唯一',
+          title: this.$t('ciType.unique'),
           dataIndex: 'is_unique',
           width: 50,
           sorter: false,
@@ -246,7 +246,7 @@ export default {
 
         },
         {
-          title: '索引',
+          title: this.$t('ciType.index'),
           dataIndex: 'is_index',
           sorter: false,
           width: 50,
@@ -254,7 +254,7 @@ export default {
 
         },
         {
-          title: '排序',
+          title: this.$t('ciType.sort'),
           dataIndex: 'is_sortable',
           sorter: false,
           width: 50,
@@ -262,7 +262,7 @@ export default {
 
         },
         {
-          title: '链接',
+          title: this.$t('ciType.link'),
           dataIndex: 'is_link',
           sorter: false,
           width: 50,
@@ -270,7 +270,7 @@ export default {
 
         },
         {
-          title: '密码',
+          title: this.$t('ciType.password'),
           dataIndex: 'is_password',
           sorter: false,
           width: 50,
@@ -278,7 +278,7 @@ export default {
 
         },
         {
-          title: '列表',
+          title: this.$t('ciType.list'),
           dataIndex: 'is_list',
           sorter: false,
           width: 50,
@@ -286,7 +286,7 @@ export default {
 
         },
         {
-          title: '必须',
+          title: this.$t('ciType.required'),
           dataIndex: 'is_required',
           sorter: false,
           width: 50,
@@ -294,14 +294,14 @@ export default {
 
         },
         {
-          title: '默认显示',
+          title: this.$t('ciType.defaultShow'),
           dataIndex: 'default_show',
           sorter: false,
           scopedSlots: { customRender: 'is_check' }
 
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 100,
           fixed: 'right',
@@ -323,11 +323,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -448,7 +445,7 @@ export default {
     handleDelete (record) {
       this.unbindAttribute([record.id])
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         }).catch(err => this.requestFailed(err))
     },
@@ -486,7 +483,7 @@ export default {
       const that = this
       Promise.all(p).then(function (values) {
         console.log(values)
-        that.$message.success(`修改成功`)
+        that.$message.success(that.$t('tip.updateSuccess'))
         that.handleOk()
         that.onBatchBindAttrActionClose()
       }).catch(err => that.requestFailed(err))
@@ -500,7 +497,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue
index bba7b58..9dcc012 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <a-button class="action-btn" @click="handleCreate" type="primary">批量修改</a-button>
+    <a-button class="action-btn" @click="handleCreate" type="primary">{{ $t('button.batchUpdate') }}</a-button>
     <s-table
       v-once
       :alert="options.alert"
@@ -41,7 +41,7 @@
           :render="item=>item.title"
           :selectedKeys="transferSelectedKeys"
           :targetKeys="transferTargetKeys"
-          :titles="['当前项', '已选项']"
+          :titles="[$t('tip.unselectedAttribute'), $t('tip.selectedAttribute')]"
           :listStyle="{
             height: '600px',
             width: '40%',
@@ -113,21 +113,21 @@ export default {
       showPagination: false,
       columns: [
         {
-          title: '属性名',
+          title: this.$t('ciType.alias'),
           dataIndex: 'alias',
           sorter: false,
           width: 200,
           scopedSlots: { customRender: 'alias' }
         },
         {
-          title: '属性英文名',
+          title: this.$t('ciType.name'),
           dataIndex: 'name',
           sorter: false,
           width: 200,
           scopedSlots: { customRender: 'name' }
         },
         {
-          title: '必须',
+          title: this.$t('ciType.required'),
           dataIndex: 'is_required',
           sorter: false,
           scopedSlots: { customRender: 'is_check' }
@@ -135,7 +135,7 @@ export default {
         },
 
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 100,
           fixed: 'right',
@@ -156,9 +156,7 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
 
       // custom table alert & rowSelection
@@ -259,7 +257,7 @@ export default {
 
       updateCITypeAttributesById(this.CITypeId, { attributes: [{ attr_id: record.id, is_required: false }] })
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
@@ -269,7 +267,7 @@ export default {
     },
 
     handleCreate () {
-      this.drawerTitle = '批量修改'
+      this.drawerTitle = this.$t('button.batchUpdate')
       this.visible = true
     },
 
@@ -300,7 +298,7 @@ export default {
 
         updateCITypeAttributesById(CITypeId, { attributes: requestData }).then(
           res => {
-            this.$message.success(`更新成功`)
+            this.$message.success(this.$t('tip.updateSuccess'))
             this.visible = false
             this.handleOk()
           }
@@ -311,7 +309,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue
index a86f2ba..8bce049 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <a-button class="action-btn" @click="handleCreate" type="primary">批量修改</a-button>
+    <a-button class="action-btn" @click="handleCreate" type="primary">{{ $t('button.batchUpdate') }}</a-button>
     <s-table
       :alert="options.alert"
       :columns="columns"
@@ -40,7 +40,7 @@
           :render="item=>item.title"
           :selectedKeys="transferSelectedKeys"
           :targetKeys="transferTargetKeys"
-          :titles="['当前项', '已选项']"
+          :titles="[$t('tip.unselectedAttribute'), $t('tip.selectedAttribute')]"
           :listStyle="{
             height: '600px',
             width: '42%'
@@ -113,28 +113,28 @@ export default {
       showPagination: false,
       columns: [
         {
-          title: '属性名',
+          title: this.$t('ciType.alias'),
           dataIndex: 'alias',
           sorter: false,
           width: 200,
           scopedSlots: { customRender: 'alias' }
         },
         {
-          title: '属性英文名',
+          title: this.$t('ciType.name'),
           dataIndex: 'name',
           sorter: false,
           width: 200,
           scopedSlots: { customRender: 'name' }
         },
         {
-          title: '默认显示',
+          title: this.$t('ciType.defaultShow'),
           dataIndex: 'default_show',
           sorter: false,
           scopedSlots: { customRender: 'is_check' }
 
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 100,
           fixed: 'right',
@@ -155,11 +155,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -261,7 +258,7 @@ export default {
 
       updateCITypeAttributesById(this.CITypeId, { attributes: [{ attr_id: record.id, default_show: false }] })
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
@@ -275,7 +272,7 @@ export default {
     },
 
     handleCreate () {
-      this.drawerTitle = '批量修改'
+      this.drawerTitle = this.$t('button.batchUpdate')
       this.visible = true
     },
 
@@ -306,7 +303,7 @@ export default {
 
         updateCITypeAttributesById(CITypeId, { attributes: requestData }).then(
           res => {
-            this.$message.success(`更新成功`)
+            this.$message.success(this.$t('tip.updateSuccess'))
             this.visible = false
             this.handleOk()
           }
@@ -317,7 +314,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue
index 6ba6f21..009449e 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue
@@ -2,27 +2,27 @@
   <a-card :bordered="false">
 
     <a-tabs defaultActiveKey="1">
-      <a-tab-pane key="1" tab="模型属性">
+      <a-tab-pane key="1" :tab="$t('ciType.typeAttribute')">
 
         <AttributesTable></AttributesTable>
 
       </a-tab-pane>
-      <a-tab-pane forceRender key="2" tab="模型关联">
+      <a-tab-pane forceRender key="2" :tab="$t('ciType.typeRelation')">
         <RelationTable :CITypeId="CITypeId" :CITypeName="CITypeName"></RelationTable>
 
       </a-tab-pane>
 
-      <a-tab-pane forceRender key="3" tab="必须校验">
+      <a-tab-pane forceRender key="3" :tab="$t('ciType.requiredCheck')">
         <CheckTable></CheckTable>
 
       </a-tab-pane>
 
-      <a-tab-pane forceRender key="4" tab="默认显示属性">
+      <a-tab-pane forceRender key="4" :tab="$t('ciType.defaultShowAttribute')">
         <DefaultShowTable></DefaultShowTable>
 
       </a-tab-pane>
 
-      <a-tab-pane forceRender key="5" tab="属性分组 & 排序">
+      <a-tab-pane forceRender key="5" :tab="$t('ciType.attributeGroup')">
         <Group></Group>
 
       </a-tab-pane>
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue
index 1329763..1868494 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <div style="margin-bottom: 2rem">
-      <a-button type="primary" v-if="addGroupBtnVisible" @click="handleAddGroup">添加分组</a-button>
+      <a-button type="primary" v-if="addGroupBtnVisible" @click="handleAddGroup">{{ $t('ciType.addGroup') }}</a-button>
 
       <template v-else>
         <span>
@@ -11,7 +11,7 @@
             style="width: 10rem;margin-right: 0.5rem"
             ref="addGroupInput"
             v-model.trim="newGroupName" />
-          <a @click="handleCreateGroup" style="margin-right: 0.5rem">保存</a>
+          <a @click="handleCreateGroup" style="margin-right: 0.5rem">{{ $t('button.save') }}</a>
           <a @click="handleCancelCreateGroup">{{ $t('button.cancel') }}</a>
         </span>
       </template>
@@ -36,7 +36,7 @@
               style="width: 15%;margin-right: 0.5rem"
               ref="editGroupInput"
               v-model.trim="CITypeGroup.name" />
-            <a @click="handleSaveGroupName(index, CITypeGroup)" style="margin-right: 0.5rem">保存</a>
+            <a @click="handleSaveGroupName(index, CITypeGroup)" style="margin-right: 0.5rem">{{ $t('button.save') }}</a>
             <a @click="handleCancelGroupName(index, CITypeGroup)">{{ $t('button.cancel') }}</a>
           </span>
         </template>
@@ -46,27 +46,27 @@
           <a-button-group size="small">
             <a-tooltip>
               <template slot="title">
-                上移
+                {{ $t('ciType.up') }}
               </template>
               <a-button icon="arrow-up" size="small" @click="handleMoveGroup(index, index-1)" :disabled="index===0"/>
             </a-tooltip>
 
             <a-tooltip>
               <template slot="title">
-                下移
+                {{ $t('ciType.down') }}
               </template>
               <a-button icon="arrow-down" size="small" @click="handleMoveGroup(index, index+1)" :disabled="index===CITypeGroups.length-1" />
             </a-tooltip>
 
             <a-tooltip>
               <template slot="title">
-                添加属性
+                {{ $t('ciType.addAttribute1') }}
               </template>
               <a-button icon="plus" size="small" @click="handleAddExistGroupAttr(index)"/>
             </a-tooltip>
             <a-tooltip>
               <template slot="title">
-                删除分组
+                {{ $t('ciType.deleteGroup') }}
               </template>
               <a-button icon="delete" size="small" @click="handleDeleteGroup(CITypeGroup.id)" :disabled="CITypeGroup.attributes.length!==0" />
 
@@ -108,7 +108,7 @@
             <li
               class="property-item-empty"
               @click="handleAddExistGroupAttr(index)"
-              style="">添加属性</li>
+              style="">{{ $t('ciType.addAttribute1') }}</li>
 
           </template>
 
@@ -121,34 +121,34 @@
 
       <template>
 
-        <span style="margin-right: 0.2rem">更多属性</span>
+        <span style="margin-right: 0.2rem">{{ $t('ciType.moreAttribute') }}</span>
         <span style="color: #c3cdd7; margin-right: 0.5rem">({{ otherGroupAttributes.length }})</span>
       </template>
       <div style="float: right">
         <a-button-group size="small">
           <a-tooltip>
             <template slot="title">
-              上移
+              {{ $t('ciType.up') }}
             </template>
             <a-button icon="arrow-up" size="small" disabled/>
           </a-tooltip>
 
           <a-tooltip>
             <template slot="title">
-              下移
+              {{ $t('ciType.down') }}
             </template>
             <a-button icon="arrow-down" size="small" disabled />
           </a-tooltip>
 
           <a-tooltip>
             <template slot="title">
-              添加属性
+              {{ $t('ciType.addAttribute1') }}
             </template>
             <a-button icon="plus" size="small" @click="handleAddOtherGroupAttr"/>
           </a-tooltip>
           <a-tooltip>
             <template slot="title">
-              删除分组
+              {{ $t('ciType.deleteGroup') }}
             </template>
             <a-button icon="delete" size="small" disabled />
 
@@ -182,14 +182,14 @@
           <li
             class="property-item-empty"
             @click="handleAddOtherGroupAttr"
-            style="">添加属性</li>
+            style="">{{ $t('ciType.addAttribute1') }}</li>
 
         </template>
 
       </draggable>
     </div>
     <a-modal
-      title="添加字段"
+      :title="$t('ciType.addAttribute1')"
       :width="'80%'"
       v-model="modalVisible"
       @ok="handleSubmit"
@@ -344,13 +344,13 @@ export default {
       if (CITypeGroup.name === CITypeGroup.originName) {
         this.handleCancelGroupName(index, CITypeGroup)
       } else if (this.CITypeGroups.map(x => x.originName).includes(CITypeGroup.name)) {
-        this.$message.error('分组名称已存在')
+        this.$message.error(this.$t('ciType.groupNameExisted'))
       } else {
         updateCITypeGroupById(CITypeGroup.id, { name: CITypeGroup.name, attributes: CITypeGroup.attributes.map(x => x.id), order: CITypeGroup.order })
           .then(res => {
             CITypeGroup.editable = false
             this.$set(this.CITypeGroups, index, CITypeGroup)
-            this.$message.success('修改成功')
+            this.$message.success(this.$t('tip.updateSuccess'))
           })
           .catch(err => this.requestFailed(err))
       }
@@ -389,14 +389,14 @@ export default {
       const fromGroupId = this.CITypeGroups[beforeIndex].id
       const toGroupId = this.CITypeGroups[afterIndex].id
       transferCITypeGroupIndex(this.CITypeId, { from: fromGroupId, to: toGroupId }).then(res => {
-        this.$message.success('操作成功')
+        this.$message.success(this.$t('ciType.moveSuccess'))
         const beforeGroup = this.CITypeGroups[beforeIndex]
         this.CITypeGroups[beforeIndex] = this.CITypeGroups[afterIndex]
 
         this.$set(this.CITypeGroups, beforeIndex, this.CITypeGroups[afterIndex])
         this.$set(this.CITypeGroups, afterIndex, beforeGroup)
       }).catch(err => {
-        this.$httpError(err, '移动出错')
+        this.$httpError(err, this.$t('ciType.moveFailed'))
       })
     },
     handleAddExistGroupAttr (index) {
@@ -463,13 +463,13 @@ export default {
     handleChange (e, group) {
       if (e.hasOwnProperty('moved') && e.moved.oldIndex !== e.moved.newIndex) {
         if (group === -1) {
-          this.$message.error('更多属性不能进行排序, 如需排序需添加入其他分组中!')
+          this.$message.error(this.$t('ciType.moreAttributeCannotSort'))
         } else {
           transferCITypeAttrIndex(this.CITypeId,
             {
               from: { attr_id: e.moved.element.id, group_id: group > -1 ? group : null },
               to: { order: e.moved.newIndex, group_id: group > -1 ? group : null }
-            }).then(res => this.$message.success('保存成功')).catch(err => {
+            }).then(res => this.$message.success(this.$t('tip.saveSuccess'))).catch(err => {
             this.$httpError(err)
             this.abortDraggable()
           })
@@ -486,7 +486,7 @@ export default {
             {
               from: { attr_id: e.removed.element.id, group_id: group > -1 ? group : null },
               to: { group_id: this.addRemoveGroupFlag.to.group_id, order: this.addRemoveGroupFlag.to.order }
-            }).then(res => this.$message.success('保存成功')).catch(err => {
+            }).then(res => this.$message.success(this.$t('tip.saveSuccess'))).catch(err => {
             this.$httpError(err)
             this.abortDraggable()
           }).finally(() => {
@@ -501,9 +501,9 @@ export default {
       })
     },
     updatePropertyIndex () {
-      const attributes = []    // 全部属性
-      let attributeOrder = 0    // 属性组
-      let groupOrder = 0   // 组排序
+      const attributes = []      // all attributes
+      let attributeOrder = 0    // attribute group
+      let groupOrder = 0   // sort by group
       const promises = [
 
       ]
@@ -548,14 +548,14 @@ export default {
       const that = this
       Promise.all(promises)
         .then(values => {
-          that.$message.success(`修改成功`)
+          that.$message.success(this.$t('tip.updateSuccess'))
           that.getCITypeGroupData()
           that.modalVisible = false
         })
         .catch(err => that.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
   },
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue
index da7fe22..f9ae9f3 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue
@@ -13,7 +13,7 @@
         <template v-if="Object.keys(item).length === 0">
           <a-button class="new-btn" type="dashed" @click="handleCreate">
             <a-icon type="plus"/>
-            新增
+            {{ $t('ciType.add') }}
           </a-button>
         </template>
         <template v-else>
@@ -28,7 +28,7 @@
                 <a-icon type="setting" />
               </router-link>
               <a-icon type="edit" @click="handleEdit(item)"/>
-              <a-popconfirm title="确认删除" @confirm="handleDelete(item)" okText="是" cancelText="否">
+              <a-popconfirm :title="$t('tip.confirmDelete')" @confirm="handleDelete(item)" :okText="$t('button.yes')" :cancelText="$t('button.no')">
                 <a-icon type="delete"/>
               </a-popconfirm>
             </template>
@@ -66,18 +66,17 @@
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="模型名(英文)"
+          :label="$t('ciType.name')"
         >
           <a-input
             name="name"
-            placeholder="英文"
-            v-decorator="['name', {rules: [{ required: true, message: '请输入属性名'},{message: '不能以数字开头,可以是英文 数字以及下划线 (_)', pattern: RegExp('^(?!\\d)[a-zA-Z_0-9]+$')}]} ]"
+            v-decorator="['name', {rules: [{ required: true, message: $t('ciType.nameRequired')},{message: $t('ciType.nameValidate'), pattern: RegExp('^(?!\\d)[a-zA-Z_0-9]+$')}]} ]"
           />
         </a-form-item>
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="别名"
+          :label="$t('ciType.alias')"
         >
           <a-input
             name="alias"
@@ -88,7 +87,7 @@
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="唯一标识*"
+          :label="$t('ciType.unique') + '*'"
         >
 
           <a-select
@@ -203,7 +202,7 @@ export default {
       })
     },
     handleCreate () {
-      this.drawerTitle = '新增模型'
+      this.drawerTitle = this.$t('ciType.newCIType')
       this.drawerVisible = true
     },
     onClose () {
@@ -211,7 +210,7 @@ export default {
       this.drawerVisible = false
     },
     handleEdit (record) {
-      this.drawerTitle = '编辑模型'
+      this.drawerTitle = this.$t('ciType.editCIType')
       this.drawerVisible = true
 
       this.$nextTick(() => {
@@ -228,7 +227,7 @@ export default {
     handleDelete (record) {
       deleteCIType(record.id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.getCITypes()
         })
         .catch(err => this.requestFailed(err))
@@ -252,7 +251,7 @@ export default {
     createCIType (data) {
       createCIType(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.drawerVisible = false
           this.getCITypes()
         })
@@ -262,14 +261,14 @@ export default {
     updateCIType (CITypeId, data) {
       updateCIType(CITypeId, data)
         .then(res => {
-          this.$message.success(`修改成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.drawerVisible = false
           this.getCITypes()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue
index 5c076f5..e64dc00 100644
--- a/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <a-button class="action-btn" @click="handleCreate" type="primary">新增关系</a-button>
+    <a-button class="action-btn" @click="handleCreate" type="primary">{{ $t('ciType.newRelation') }}</a-button>
     <s-table
       :alert="options.alert"
       :columns="columns"
@@ -38,21 +38,23 @@
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="源模型"
+          :label="$t('ciType.sourceCIType')"
         >
           <a-select
             name="source_ci_type_id"
             style="width: 120px"
             v-decorator="['source_ci_type_id', {rules: [], } ]"
           >
-            <a-select-option :value="CIType.id" :key="CIType.id" v-for="CIType in CITypes" v-if="CITypeId === CIType.id">{{ CIType.alias }}</a-select-option>
+            <template v-for="CIType in CITypes">
+              <a-select-option :value="CIType.id" :key="CIType.id" v-if="CITypeId == CIType.id">{{ CIType.alias }}</a-select-option>
+            </template>
           </a-select>
 
         </a-form-item>
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="目标模型"
+          :label="$t('ciType.targetCIType')"
         >
           <a-select
             name="ci_type_id"
@@ -66,7 +68,7 @@
         <a-form-item
           :label-col="formItemLayout.labelCol"
           :wrapper-col="formItemLayout.wrapperCol"
-          label="关联关系"
+          :label="$t('ciType.relationType')"
         >
           <a-select
             name="relation_type_id"
@@ -138,27 +140,27 @@ export default {
       showPagination: false,
       columns: [
         {
-          title: '源模型英文名',
+          title: this.$t('ciType.sourceCIType') + this.$t('ciType.name'),
           dataIndex: 'source_ci_type_name',
           sorter: false,
           width: 200,
           scopedSlots: { customRender: 'source_ci_type_name' }
         },
         {
-          title: '关联类型',
+          title: this.$t('ciType.relationType'),
           dataIndex: 'relation_type',
           sorter: false,
           width: 100,
           scopedSlots: { customRender: 'name' }
         },
         {
-          title: '目标模型名',
+          title: this.$t('ciType.targetCIType') + this.$t('ciType.alias'),
           dataIndex: 'alias',
           sorter: false,
           scopedSlots: { customRender: 'alias' }
         },
         {
-          title: '操作',
+          title: this.$t('tip.operate'),
           dataIndex: 'action',
           width: 100,
           fixed: 'right',
@@ -189,9 +191,7 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
       // custom table alert & rowSelection
       options: {
@@ -254,7 +254,7 @@ export default {
 
       deleteRelation(record.source_ci_type_id, record.id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
 
           this.handleOk()
         }).catch(err => this.requestFailed(err))
@@ -264,7 +264,7 @@ export default {
     },
 
     handleCreate () {
-      this.drawerTitle = '新增关系'
+      this.drawerTitle = this.$t('ciType.newRelation')
       this.visible = true
       this.$nextTick(() => {
         this.form.setFieldsValue({
@@ -292,7 +292,7 @@ export default {
 
           createRelation(values.source_ci_type_id, values.ci_type_id, values.relation_type_id)
             .then(res => {
-              this.$message.success(`添加成功`)
+              this.$message.success(this.$t('tip.addSuccess'))
               this.onClose()
               this.handleOk()
             }).catch(err => this.requestFailed(err))
@@ -301,7 +301,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue b/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue
index fcc333f..fe12b77 100644
--- a/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue
@@ -1,8 +1,8 @@
 <template>
   <div>
-    <a-card :bordered="true" title="关系视图定义面板">
-      <a-card-meta description="方法1. 右键选择树节点(推荐)"></a-card-meta>
-      <a-card-meta description="方法2. 先打开右上角的开关,再选择树的节点"></a-card-meta>
+    <a-card :bordered="true" :title="$t('ciType.relationViewDefinePanel')">
+      <a-card-meta :description="$t('ciType.relationViewDefinePanelTip1')"></a-card-meta>
+      <a-card-meta :description="$t('ciType.relationViewDefinePanelTip2')"></a-card-meta>
       <a-switch
         slot="extra"
         @change="toggleSelect"
@@ -330,8 +330,8 @@ export default {
     deleteView (viewName) {
       const that = this
       this.$confirm({
-        title: '警告',
-        content: '确认要删除吗 ?',
+        title: that.$t('tip.warning'),
+        content: that.$t('tip.confirmDelete'),
         onOk () {
           deleteRelationView(viewName).then(res => {
             that.create()
diff --git a/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue b/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue
index 7607b97..a17bf40 100644
--- a/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue
@@ -13,12 +13,12 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="关系视图名"
+        :label="$t('ciType.RealtionViewName')"
       >
         <a-input
           name="name"
           placeholder=""
-          v-decorator="['name', {rules: [{ required: true, message: '请输入 关系视图名'}]} ]"
+          v-decorator="['name', {rules: [{ required: true, message: $t('ciType.RealtionViewNameRequired')}]} ]"
         />
       </a-form-item>
 
@@ -59,7 +59,7 @@ export default {
   name: 'RelationViewForm',
   data () {
     return {
-      drawerTitle: '新增关系视图',
+      drawerTitle: this.$t('ciType.newRealtionView'),
       drawerVisible: false,
       formLayout: 'vertical',
       crIds: []
@@ -117,7 +117,7 @@ export default {
       data.cr_ids = this.crIds
       subscribeRelationView(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.onClose()
           this.$emit('refresh')
         })
@@ -126,7 +126,7 @@ export default {
 
     requestFailed (err) {
       console.log(err, 'error')
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue b/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue
index 570ed1d..1affd40 100644
--- a/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue
@@ -2,14 +2,14 @@
   <a-card :bordered="false">
 
     <div class="action-btn">
-      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ btnName }}</a-button>
+      <a-button @click="handleCreate" type="primary" style="margin-right: 0.3rem;">{{ $t('ciType.newRelationType') }}</a-button>
     </div>
 
     <s-table
       :alert="options.alert"
       :columns="columns"
       :data="loadData"
-      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条记录`, pageSizeOptions: pageSizeOptions}"
+      :pagination="{ showTotal: (total, range) => `${range[0]}-${range[1]} ${total} records in total`, pageSizeOptions: pageSizeOptions}"
       :showPagination="false"
       :pageSize="25"
       :rowKey="record=>record.id"
@@ -34,7 +34,7 @@
           icon="search"
           size="small"
           style="width: 90px; margin-right: 8px"
-        >搜索</a-button>
+        >{{ $t('button.query') }}</a-button>
         <a-button
           @click="() => handleReset(clearFilters, column)"
           size="small"
@@ -61,11 +61,11 @@
           <a-divider type="vertical"/>
 
           <a-popconfirm
-            title="确认删除?"
+            :title="$t('tip.confirmDelete')"
             @confirm="handleDelete(record)"
             @cancel="cancel"
-            okText="是"
-            cancelText="否"
+            :okText="$t('button.yes')"
+            :cancelText="$t('button.no')"
           >
             <a>{{ $t('tip.delete') }}</a>
           </a-popconfirm>
@@ -92,7 +92,6 @@ export default {
   data () {
     return {
       scroll: { x: 1000, y: 500 },
-      btnName: '新增关系类型',
 
       formLayout: 'vertical',
 
@@ -104,7 +103,7 @@ export default {
       columns: [
         {
           width: 150,
-          title: '类型名',
+          title: this.$t('ciType.name'),
           dataIndex: 'name',
           sorter: false,
           scopedSlots: {
@@ -123,7 +122,7 @@ export default {
         },
         {
           width: 150,
-          title: '操作',
+          title: this.$t('tip.operate'),
           key: 'operation',
           scopedSlots: { customRender: 'action' }
         }
@@ -139,11 +138,8 @@ export default {
       },
 
       mdl: {},
-      // 高级搜索 展开/关闭
       advanced: false,
-      // 查询参数
       queryParam: {},
-      // 表头
 
       selectedRowKeys: [],
       selectedRows: [],
@@ -226,13 +222,13 @@ export default {
     deleteRelationType (id) {
       deleteRelationType(id)
         .then(res => {
-          this.$message.success(`删除成功`)
+          this.$message.success(this.$t('tip.deleteSuccess'))
           this.handleOk()
         })
         .catch(err => this.requestFailed(err))
     },
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requestFailed')
       this.$message.error(`${msg}`)
     },
     cancel () {
diff --git a/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue b/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue
index 03021c5..4ea219b 100644
--- a/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue
+++ b/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue
@@ -13,12 +13,12 @@
       <a-form-item
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
-        label="类型名"
+        :label="$t('ciType.name')"
       >
         <a-input
           name="name"
           placeholder=""
-          v-decorator="['name', {rules: [{ required: true, message: '请输入类型名'}]} ]"
+          v-decorator="['name', {rules: [{ required: true, message: $t('ciType.relationTypeNameRequired')}]} ]"
         />
       </a-form-item>
 
@@ -59,7 +59,7 @@ export default {
   name: 'RelationTypeForm',
   data () {
     return {
-      drawerTitle: '新增关系类型',
+      drawerTitle: this.$t('ciType.newRelationType'),
       drawerVisible: false,
       formLayout: 'vertical'
     }
@@ -134,7 +134,7 @@ export default {
     updateRelationType (id, data) {
       updateRelationType(id, data)
         .then(res => {
-          this.$message.success(`更新成功`)
+          this.$message.success(this.$t('tip.updateSuccess'))
           this.handleOk()
           this.onClose()
         }).catch(err => this.requestFailed(err))
@@ -143,7 +143,7 @@ export default {
     createRelationType (data) {
       addRelationType(data)
         .then(res => {
-          this.$message.success(`添加成功`)
+          this.$message.success(this.$t('tip.addSuccess'))
           this.handleOk()
           this.onClose()
         })
@@ -151,7 +151,7 @@ export default {
     },
 
     requestFailed (err) {
-      const msg = ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试'
+      const msg = ((err.response || {}).data || {}).message || this.$t('tip.requsetFailed')
       this.$message.error(`${msg}`)
     }
 
diff --git a/cmdb-ui/src/views/user/Login.vue b/cmdb-ui/src/views/user/Login.vue
index ed02c44..3bd13c4 100644
--- a/cmdb-ui/src/views/user/Login.vue
+++ b/cmdb-ui/src/views/user/Login.vue
@@ -12,15 +12,15 @@
         :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }"
         @change="handleTabClick"
       >
-        <a-tab-pane key="tab1" tab="账号密码登录">
+        <a-tab-pane key="tab1" :tab="$t('login.loginHeader')">
           <a-form-item>
             <a-input
               size="large"
               type="text"
-              placeholder="用户名或者邮箱"
+              :placeholder="$t('login.loginName')"
               v-decorator="[
                 'username',
-                {rules: [{ required: true, message: '请输入帐户名或邮箱地址' }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
+                {rules: [{ required: true, message: $t('login.loginNameRequired') }, { validator: handleUsernameOrEmail }], validateTrigger: 'change'}
               ]"
             >
               <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -32,10 +32,10 @@
               size="large"
               type="password"
               autocomplete="false"
-              placeholder="密码"
+              :placeholder="$t('login.password')"
               v-decorator="[
                 'password',
-                {rules: [{ required: true, message: '请输入密码' }], validateTrigger: 'blur'}
+                {rules: [{ required: true, message: $t('login.passwordRequired') }], validateTrigger: 'blur'}
               ]"
             >
               <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -45,7 +45,7 @@
       </a-tabs>
 
       <a-form-item>
-        <a-checkbox v-decorator="['rememberMe']">自动登录</a-checkbox>
+        <a-checkbox v-decorator="['rememberMe']">{{ $t('login.autoLogin') }}</a-checkbox>
       </a-form-item>
 
       <a-form-item style="margin-top:24px">
@@ -142,18 +142,17 @@ export default {
 
     loginSuccess (res) {
       this.$router.push({ path: this.$route.query.redirect })
-      // 延迟 1 秒显示欢迎信息
       setTimeout(() => {
         this.$notification.success({
-          message: '欢迎',
-          description: `${timeFix()},欢迎回来`
+          message: this.$t('login.welcome'),
+          description: `${timeFix()},` + this.$t('login.welcomeBack')
         })
       }, 1000)
     },
     requestFailed (err) {
       this.$notification['error']({
-        message: '错误',
-        description: ((err.response || {}).data || {}).message || '请求出现错误,请稍后再试',
+        message: this.$t('tip.error'),
+        description: ((err.response || {}).data || {}).message || this.$t('tip.requestFailed'),
         duration: 4
       })
     }