thingsboard-aplcache

Details

diff --git a/ui/src/app/app.config.js b/ui/src/app/app.config.js
index 12e6b15..0cd9a9c 100644
--- a/ui/src/app/app.config.js
+++ b/ui/src/app/app.config.js
@@ -46,18 +46,21 @@ export default function AppConfig($provide,
 
     $translateProvider.useSanitizeValueStrategy('sce');
     $translateProvider.preferredLanguage('en_US');
+    //$translateProvider.preferredLanguage('zh_CN');
     $translateProvider.useLocalStorage();
     $translateProvider.useMissingTranslationHandlerLog();
     $translateProvider.addInterpolation('$translateMessageFormatInterpolation');
 
     addLocaleKorean(locales);
     addLocaleChinese(locales);
+    
     var $window = angular.injector(['ng']).get('$window');
     var lang = $window.navigator.language || $window.navigator.userLanguage;
+    //$log.log("----====User language ====----"+lang);
     if (lang === 'ko') {
         $translateProvider.useSanitizeValueStrategy(null);
         $translateProvider.preferredLanguage('ko_KR');
-    }else if(lang === 'zh') {
+    } else if (lang === 'zh') {
         $translateProvider.useSanitizeValueStrategy(null);
         $translateProvider.preferredLanguage('zh_CN');
     }
diff --git a/ui/src/app/locale/locale.constant-zh.js b/ui/src/app/locale/locale.constant-zh.js
index 3175f9c..050f423 100644
--- a/ui/src/app/locale/locale.constant-zh.js
+++ b/ui/src/app/locale/locale.constant-zh.js
@@ -21,7 +21,7 @@ export default function addLocaleChinese(locales) {
 			"unauthorized-access" : "未授权访问",
 			"unauthorized-access-text" : "您应该登录以访问此资源!",
 			"access-forbidden" : "禁止访问",
-			"access-forbidden-text" : "您没有访问此位置的权限<br/>如果您仍希望访问此位置,请尝试使用其他用户登录。",
+			"access-forbidden-text" : "您没有访问此位置的权限! <br/> 如果您仍希望访问此位置,请尝试使用其他用户登录。",
 			"refresh-token-expired" : "会话已过期",
 			"refresh-token-failed" : "无法刷新会话"
 		},
@@ -109,7 +109,7 @@ export default function addLocaleChinese(locales) {
 			"key-required" : "属性键是必需的。",
 			"value" : "值",
 			"value-required" : "属性值是必需的。",
-			"delete-attributes-title" : "您确定要删除 { count, select, 1 {1 attribute} other {# attributes} }?",
+			"delete-attributes-title" : "您确定要删除 { count, select, 1 {1 attribute} other {# attributes} } 吗?",
 			"delete-attributes-text" : "注意,确认后所有选中的属性都会被删除。",
 			"delete-attributes" : "删除属性",
 			"enter-attribute-value" : "输入属性值",
@@ -124,7 +124,7 @@ export default function addLocaleChinese(locales) {
 		},
 		"confirm-on-exit" : {
 			"message" : "您有未保存的更改。确定要离开此页吗?",
-			"html-message" : "您有未保存的更改。<br/>确定要离开此页面吗?",
+			"html-message" : "您有未保存的更改。 <br/> 确定要离开此页面吗?",
 			"title" : "未保存的更改"
 		},
 		"contact" : {
@@ -162,7 +162,7 @@ export default function addLocaleChinese(locales) {
 			"customer-details" : "客户详情",
 			"delete-customer-title" : "您确定要删除客户'{{customerTitle}}'吗?",
 			"delete-customer-text" : "小心!确认后,客户及其所有相关数据将不可恢复。",
-			"delete-customers-title" : "您确定要删除 { count, select, 1 {1 customer} other {# customers} }?",
+			"delete-customers-title" : "您确定要删除 { count, select, 1 {1 customer} other {# customers} } 吗?",
 			"delete-customers-action-title" : "删除 { count, select, 1 {1 customer} other {# customers} }",
 			"delete-customers-text" : "小心!确认后,所有选定的客户将被删除,所有相关数据将不可恢复。",
 			"manage-users" : "管理用户",
@@ -209,13 +209,13 @@ export default function addLocaleChinese(locales) {
 			"unassign-dashboards-action-title" : "从客户取消分配 { count, select, 1 {1 dashboard} other {# dashboards} }",
 			"delete-dashboard-title" : "您确定要删除仪表板 '{{dashboardTitle}}'?",
 			"delete-dashboard-text" : "小心!确认后仪表板及其所有相关数据将不可恢复。",
-			"delete-dashboards-title" : "你确定要删除 { count, select, 1 {1 dashboard} other {# dashboards} }?",
+			"delete-dashboards-title" : "你确定要删除 { count, select, 1 {1 dashboard} other {# dashboards} } 吗?",
 			"delete-dashboards-action-title" : "删除 { count, select, 1 {1 dashboard} other {# dashboards} }",
 			"delete-dashboards-text" : "小心!确认后所有被选中的仪表板将被删除,所有相关数据将不可恢复。",
 			"unassign-dashboard-title" : "您确定要取消分配仪表板 '{{dashboardTitle}}'?",
 			"unassign-dashboard-text" : "确认后,仪表板将取消分配,客户将无法访问。",
 			"unassign-dashboard" : "取消分配仪表板",
-			"unassign-dashboards-title" : "您确定要取消分配 { count, select, 1 {1 dashboard} other {# dashboards} }?",
+			"unassign-dashboards-title" : "您确定要取消分配 { count, select, 1 {1 dashboard} other {# dashboards} } 吗?",
 			"unassign-dashboards-text" : "确认后,所有选定的仪表板将被取消分配,并且用户将无法访问。",
 			"select-dashboard" : "选择仪表板",
 			"no-dashboards-matching" : "找不到符合 '{{dashboard}}' 的仪表板。",
@@ -234,7 +234,7 @@ export default function addLocaleChinese(locales) {
 			"columns-count" : "列数",
 			"columns-count-required" : "需要列数。",
 			"min-columns-count-message" : "只允许最少10列",
-			"max-columns-count-message" : "只允许最大1000列",
+			"max-columns-count-message" : "只允许最多1000列",
 			"widgets-margins" : "部件间边距",
 			"horizontal-margin" : "水平边距",
 			"horizontal-margin-required" : "需要水平边距值。",
@@ -262,7 +262,7 @@ export default function addLocaleChinese(locales) {
 			"close-toolbar" : "关闭工具栏",
 			"configuration-error" : "配置错误",
 			"alias-resolution-error-title" : "仪表板别名配置错误",
-			"invalid-aliases-config" : "无法找到与某些别名过滤器匹配的任何设备。<br/>" +
+			"invalid-aliases-config" : "无法找到与某些别名过滤器匹配的任何设备。 <br/>" +
 				"请联系您的管理员以解决此问题。",
 			"select-devices" : "选择设备",
 			"assignedToCustomer" : "分配给客户"
@@ -304,7 +304,7 @@ export default function addLocaleChinese(locales) {
 			"no-keys-found" : "找不到密钥。",
 			"create-new-alias": "创建一个新的!",
 			"create-new-key": "创建一个新的!",
-			"duplicate-alias-error" : "找到重复别名 '{{alias}}'.<br>设备别名必须是唯一的。",
+			"duplicate-alias-error" : "找到重复别名 '{{alias}}'。 <br> 设备别名必须是唯一的。",
 			"configure-alias" : "配置 '{{alias}}' 别名",
 			"no-devices-matching" : "找不到与 '{{device}}' 匹配的设备。",
 			"alias" : "别名",
@@ -329,22 +329,22 @@ export default function addLocaleChinese(locales) {
 			"manage-credentials": "管理凭据",
 			"delete": "删除设备",
 			"assign-devices": "分配设备",
-			"assign-devices-text": "将{count,select,1 {1 device} other {#devices}}分配给客户",
+			"assign-devices-text": "将{count,select,1 {1 device} other {# devices}}分配给客户",
 			"delete-devices": "删除设备",
 			"unassign-from-customer": "取消分配客户",
 			"unassign-devices": "取消分配设备",
-			"unassign-devices-action-title": "从客户处取消分配{count,select,1 {1 device} other {#devices}}",
+			"unassign-devices-action-title": "从客户处取消分配{count,select,1 {1 device} other {# devices}}",
 			"assign-new-device": "分配新设备",
 			"view-credentials": "查看凭据",
 			"delete-device-title": "您确定要删除设备的{{deviceName}}吗?",
 			"delete-device-text": "小心!确认后设备及其所有相关数据将不可恢复。",
-			"delete-devices-title": "您确定要删除{count,select,1 {1 device} other {#devices}}?",
-			"delete-devices-action-title": "删除 {count,select,1 {1 device} other {#devices}}",
+			"delete-devices-title": "您确定要删除{count,select,1 {1 device} other {# devices}} 吗?",
+			"delete-devices-action-title": "删除 {count,select,1 {1 device} other {# devices}}",
 			"delete-devices-text": "小心!确认后所有选定的设备将被删除,所有相关数据将不可恢复。",
 			"unassign-device-title": "您确定要取消分配设备 '{{deviceName}}'?",
 			"unassign-device-text": "确认后,设备将被取消分配,客户将无法访问。",
 			"unassign-device": "取消分配设备",
-			"unassign-devices-title": "您确定要取消分配{count,select,1 {1 device} other {#devices}}?",
+			"unassign-devices-title": "您确定要取消分配{count,select,1 {1 device} other {# devices}} 吗?",
 			"unassign-devices-text": "确认后,所有选定的设备将被取消分配,并且客户将无法访问。",
 			"device-credentials": "设备凭据",
 			"credentials-type": "凭据类型",
@@ -366,7 +366,7 @@ export default function addLocaleChinese(locales) {
 			"accessTokenCopiedMessage": "设备访问令牌已复制到剪贴板",
 			"assignedToCustomer": "分配给客户",
 			"unable-delete-device-alias-title": "无法删除设备别名",
-			"unable-delete-device-alias-text": "设备别名 '{{deviceAlias}}' 不能够被删除,因为它被下列部件所使用:<br/>{{widgetsList}}",
+			"unable-delete-device-alias-text": "设备别名 '{{deviceAlias}}' 不能够被删除,因为它被下列部件所使用: <br/> {{widgetsList}}",
 			"is-gateway": "是网关"
 		},
 		"dialog" : {
@@ -404,13 +404,13 @@ export default function addLocaleChinese(locales) {
 			"fullscreen": "全屏"
 		},
 		"function" : {
-			"function" : "功能"
+			"function" : "函数"
 		},
 		"grid" : {
 			"delete-item-title": "您确定要删除此项吗?",
 			"delete-item-text": "注意,确认后此项和所有相关数据将变得不可恢复。",
-			"delete-items-title": "您确定要删除{count,select,1 {1 item} other {#items}}?",
-			"delete-items-action-title": "删除{count,select,1 {1 item} other {#items}}",
+			"delete-items-title": "您确定要删除{count, select, 1 {1 item} other {# items}} 吗?",
+			"delete-items-action-title": "删除{count, select, 1 {1 item} other {# items}}",
 			"delete-items-text": "注意,确认后所有选择的项目将被删除,所有相关数据将变得不可恢复。",
 			"add-item-text": "添加新项目",
 			"no-items-text": "没有找到项目",
@@ -442,16 +442,16 @@ export default function addLocaleChinese(locales) {
 			"return-type-mismatch": "函数必须返回'{{type}}'类型的值!"
 		},
 		"legend" : {
-			"position" : "Legend position",
-			"show-max" : "Show max value",
-			"show-min" : "Show min value",
-			"show-avg" : "Show average value",
-			"show-total" : "Show total value",
-			"settings" : "Legend settings",
-			"min" : "min",
-			"max" : "max",
-			"avg" : "avg",
-			"total" : "total"
+			"position" : "图例位置",
+			"show-max" : "显示最大值",
+			"show-min" : "显示最小值",
+			"show-avg" : "显示平均值",
+			"show-total" : "显示总数",
+			"settings" : "图例设置",
+			"min" : "最小值",
+			"max" : "最大值",
+			"avg" : "平均值",
+			"total" : "总数"
 		},
 		"login" : {
 			"login": "登录",
@@ -471,49 +471,49 @@ export default function addLocaleChinese(locales) {
 			"email": "电子邮件"
 		},
 		"plugin" : {
-			"plugins" : "Plugins",
-			"delete" : "Delete plugin",
-			"activate" : "Activate plugin",
-			"suspend" : "Suspend plugin",
-			"active" : "Active",
-			"suspended" : "Suspended",
-			"name" : "Name",
-			"name-required" : "Name is required.",
-			"description" : "Description",
-			"add" : "Add Plugin",
-			"delete-plugin-title" : "Are you sure you want to delete the plugin '{{pluginName}}'?",
-			"delete-plugin-text" : "Be careful, after the confirmation the plugin and all related data will become unrecoverable.",
-			"delete-plugins-title" : "Are you sure you want to delete { count, select, 1 {1 plugin} other {# plugins} }?",
-			"delete-plugins-action-title" : "Delete { count, select, 1 {1 plugin} other {# plugins} }",
-			"delete-plugins-text" : "Be careful, after the confirmation all selected plugins will be removed and all related data will become unrecoverable.",
-			"add-plugin-text" : "Add new plugin",
-			"no-plugins-text" : "No plugins found",
-			"plugin-details" : "Plugin details",
-			"api-token" : "API token",
-			"api-token-required" : "API token is required.",
-			"type" : "Plugin type",
-			"type-required" : "Plugin type is required.",
-			"configuration" : "Plugin configuration",
-			"system" : "System",
-			"select-plugin" : "Select plugin",
-			"plugin" : "Plugin",
-			"no-plugins-matching" : "No plugins matching '{{plugin}}' were found.",
-			"plugin-required" : "Plugin is required.",
-			"plugin-require-match" : "Please select an existing plugin.",
-			"events" : "Events",
-			"details" : "Details",
-			"import" : "Import plugin",
-			"export" : "Export plugin",
-			"export-failed-error" : "Unable to export plugin: {{error}}",
-			"create-new-plugin" : "Create new plugin",
-			"plugin-file" : "Plugin file",
-			"invalid-plugin-file-error" : "Unable to import plugin: Invalid plugin data structure."
+			"plugins" : "插件",
+			"delete" : "删除插件",
+			"activate" : "激活插件",
+			"suspend" : "暂停插件",
+			"active" : "激活",
+			"suspended" : "暂停",
+			"name" : "名称",
+			"name-required" : "名称是必填项。",
+			"description" : "描述",
+			"add" : "添加插件",
+			"delete-plugin-title" : "你确定要删除插件 '{{pluginName}}' 吗?",
+			"delete-plugin-text" : "小心!确认后,插件和所有相关数据将不可恢复。",
+			"delete-plugins-title" : "你确定你要删除 { count, select, 1 {1 plugin} other {# plugins} } 吗?",
+			"delete-plugins-action-title" : "删除 { count, select, 1 {1 plugin} other {# plugins} }",
+			"delete-plugins-text" : "小心!确认后,所有选定的插件将被删除,所有相关数据将不可恢复。",
+			"add-plugin-text" : "添加新的插件",
+			"no-plugins-text" : "没有找到插件",
+			"plugin-details" : "插件详细信息",
+			"api-token" : "API令牌",
+			"api-token-required" : "API令牌是必需的。",
+			"type" : "插件类型",
+			"type-required" : "插件类型是必需的。",
+			"configuration" : "插件配置",
+			"system" : "系统",
+			"select-plugin" : "选择插件",
+			"plugin" : "插件",
+			"no-plugins-matching" : "没有找到匹配'{{plugin}}'的插件。",
+			"plugin-required" : "插件是必需的。",
+			"plugin-require-match" : "请选择一个现有的插件。",
+			"events" : "事件",
+			"details" : "详情",
+			"import" : "导入插件",
+			"export" : "导出插件",
+			"export-failed-error" : "无法导出插件:{{error}}",
+			"create-new-plugin" : "创建新的插件",
+			"plugin-file" : "插件文件",
+			"invalid-plugin-file-error" : "无法导入插件:插件数据结构无效。"
 		},
 		"position" : {
-			"top" : "Top",
-			"bottom" : "Bottom",
-			"left" : "Left",
-			"right" : "Right"
+			"top" : "顶部",
+			"bottom" : "底部",
+			"left" : "左侧",
+			"right" : "右侧"
 		},
 		"profile" : {
 			"profile": "属性",
@@ -521,263 +521,263 @@ export default function addLocaleChinese(locales) {
 			"current-password": "当前密码"
 		},
 		"rule" : {
-			"rules" : "Rules",
-			"delete" : "Delete rule",
-			"activate" : "Activate rule",
-			"suspend" : "Suspend rule",
-			"active" : "Active",
-			"suspended" : "Suspended",
-			"name" : "Name",
-			"name-required" : "Name is required.",
-			"description" : "Description",
-			"add" : "Add Rule",
-			"delete-rule-title" : "Are you sure you want to delete the rule '{{ruleName}}'?",
-			"delete-rule-text" : "Be careful, after the confirmation the rule and all related data will become unrecoverable.",
-			"delete-rules-title" : "Are you sure you want to delete { count, select, 1 {1 rule} other {# rules} }?",
-			"delete-rules-action-title" : "Delete { count, select, 1 {1 rule} other {# rules} }",
-			"delete-rules-text" : "Be careful, after the confirmation all selected rules will be removed and all related data will become unrecoverable.",
-			"add-rule-text" : "Add new rule",
-			"no-rules-text" : "No rules found",
-			"rule-details" : "Rule details",
-			"filters" : "Filters",
-			"filter" : "Filter",
-			"add-filter-prompt" : "Please add filter",
-			"remove-filter" : "Remove filter",
-			"add-filter" : "Add filter",
-			"filter-name" : "Filter name",
-			"filter-type" : "Filter type",
-			"edit-filter" : "Edit filter",
-			"view-filter" : "View filter",
-			"component-name" : "Name",
-			"component-name-required" : "Name is required.",
-			"component-type" : "Type",
-			"component-type-required" : "Type is required.",
-			"processor" : "Processor",
-			"no-processor-configured" : "No processor configured",
-			"create-processor" : "Create processor",
-			"processor-name" : "Processor name",
-			"processor-type" : "Processor type",
-			"plugin-action" : "Plugin action",
-			"action-name" : "Action name",
-			"action-type" : "Action type",
-			"create-action-prompt" : "Please create action",
-			"create-action" : "Create action",
-			"details" : "Details",
-			"events" : "Events",
-			"system" : "System",
-			"import" : "Import rule",
-			"export" : "Export rule",
-			"export-failed-error" : "Unable to export rule: {{error}}",
-			"create-new-rule" : "Create new rule",
-			"rule-file" : "Rule file",
-			"invalid-rule-file-error" : "Unable to import rule: Invalid rule data structure."
+			"rules" : "规则",
+			"delete" : "删除规则",
+			"activate" : "激活规则",
+			"suspend" : "暂停规则",
+			"active" : "激活",
+			"suspended" : "暂停",
+			"name" : "名称",
+			"name-required" : "名称是必填项。",
+			"description" : "描述",
+			"add" : "添加规则",
+			"delete-rule-title" : "您确定要删除规则'{{ruleName}}'吗?",
+			"delete-rule-text" : "小心!确认后,规则和所有相关数据将不可恢复。",
+			"delete-rules-title" : "你确定要删除 {count, select, 1 {1 rule} other {# rules}} 吗?",
+			"delete-rules-action-title" : "删除 { count, select, 1 {1 rule} other {# rules} }",
+			"delete-rules-text" : "小心!确认后,所有选定的规则将被删除,所有相关数据将不可恢复。",
+			"add-rule-text" : "添加新规则",
+			"no-rules-text" : "没有找到规则",
+			"rule-details" : "规则详情",
+			"filters" : "过滤器",
+			"filter" : "过滤器",
+			"add-filter-prompt" : "请添加过滤器",
+			"remove-filter" : "删除过滤器",
+			"add-filter" : "添加过滤器",
+			"filter-name" : "过滤器名称",
+			"filter-type" : "过滤器类型",
+			"edit-filter" : "编辑过滤器",
+			"view-filter" : "查看过滤器",
+			"component-name" : "名称",
+			"component-name-required" : "名称是必填项。",
+			"component-type" : "类型",
+			"component-type-required" : "类型是必填项。",
+			"processor" : "处理器",
+			"no-processor-configured" : "未配置处理器",
+			"create-processor" : "创建处理器",
+			"processor-name" : "处理器名称",
+			"processor-type" : "处理器类型",
+			"plugin-action" : "插件动作",
+			"action-name" : "动作名称",
+			"action-type" : "动作类型",
+			"create-action-prompt" : "请创建动作",
+			"create-action" : "创建动作",
+			"details" : "详情",
+			"events" : "事件",
+			"system" : "系统",
+			"import" : "导入规则",
+			"export" : "导出规则",
+			"export-failed-error" : "无法导出规则:{{error}}",
+			"create-new-rule" : "创建新规则",
+			"rule-file" : "规则文件",
+			"invalid-rule-file-error" : "无法导入规则:规则数据结构无效。"
 		},
 		"rule-plugin" : {
-			"management" : "Rules and plugins management"
+			"management" : "规则和插件管理"
 		},
 		"tenant" : {
-			"tenants" : "Tenants",
-			"management" : "Tenant management",
-			"add" : "Add Tenant",
-			"admins" : "Admins",
-			"manage-tenant-admins" : "Manage tenant admins",
-			"delete" : "Delete tenant",
-			"add-tenant-text" : "Add new tenant",
-			"no-tenants-text" : "No tenants found",
-			"tenant-details" : "Tenant details",
-			"delete-tenant-title" : "Are you sure you want to delete the tenant '{{tenantTitle}}'?",
-			"delete-tenant-text" : "Be careful, after the confirmation the tenant and all related data will become unrecoverable.",
-			"delete-tenants-title" : "Are you sure you want to delete { count, select, 1 {1 tenant} other {# tenants} }?",
-			"delete-tenants-action-title" : "Delete { count, select, 1 {1 tenant} other {# tenants} }",
-			"delete-tenants-text" : "Be careful, after the confirmation all selected tenants will be removed and all related data will become unrecoverable.",
-			"title" : "Title",
-			"title-required" : "Title is required.",
-			"description" : "Description"
+			"tenants" : "租户",
+			"management" : "租户管理",
+			"add" : "添加租户",
+			"admins" : "管理员",
+			"manage-tenant-admins" : "管理租户管理员",
+			"delete" : "删除租户",
+			"add-tenant-text" : "添加新租户",
+			"no-tenants-text" : "没有找到租户",
+			"tenant-details" : "租客详情",
+			"delete-tenant-title" : "您确定要删除租户'{{tenantTitle}}'?",
+			"delete-tenant-text" : "小心!确认后,租户和所有相关数据将不可恢复。",
+			"delete-tenants-title" : "您确定要删除 {count,select,1 {1 tenant} other {# tenants}} 吗?",
+			"delete-tenants-action-title" : "删除 { count, select, 1 {1 tenant} other {# tenants} }",
+			"delete-tenants-text" : "小心!确认后,所有选定的租户将被删除,所有相关数据将不可恢复。",
+			"title" : "标题",
+			"title-required" : "标题是必填项。",
+			"description" : "描述"
 		},
 		"timeinterval" : {
 			"seconds-interval" : "{ seconds, select, 1 {1 second} other {# seconds} }",
 			"minutes-interval" : "{ minutes, select, 1 {1 minute} other {# minutes} }",
 			"hours-interval" : "{ hours, select, 1 {1 hour} other {# hours} }",
 			"days-interval" : "{ days, select, 1 {1 day} other {# days} }",
-			"days" : "Days",
-			"hours" : "Hours",
-			"minutes" : "Minutes",
-			"seconds" : "Seconds",
-			"advanced" : "Advanced"
+			"days" : "天",
+			"hours" : "时",
+			"minutes" : "分",
+			"seconds" : "秒",
+			"advanced" : "高级"
 		},
 		"timewindow" : {
 			"days" : "{ days, select, 1 { day } other {# days } }",
 			"hours" : "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
 			"minutes" : "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
 			"seconds" : "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
-			"realtime" : "Realtime",
-			"history" : "History",
-			"last-prefix" : "last",
-			"period" : "from {{ startTime }} to {{ endTime }}",
-			"edit" : "Edit timewindow",
-			"date-range" : "Date range",
-			"last" : "Last",
-			"time-period" : "Time period"
+			"realtime" : "实时",
+			"history" : "历史",
+			"last-prefix" : "最后",
+			"period" : "从 {{ startTime }} 到 {{ endTime }}",
+			"edit" : "编辑时间窗口",
+			"date-range" : "日期范围",
+			"last" : "最后",
+			"time-period" : "时间段"
 		},
 		"user" : {
-			"users" : "Users",
-			"customer-users" : "Customer Users",
-			"tenant-admins" : "Tenant Admins",
-			"sys-admin" : "System administrator",
-			"tenant-admin" : "Tenant administrator",
-			"customer" : "Customer",
-			"anonymous" : "Anonymous",
-			"add" : "Add User",
-			"delete" : "Delete user",
-			"add-user-text" : "Add new user",
-			"no-users-text" : "No users found",
-			"user-details" : "User details",
-			"delete-user-title" : "Are you sure you want to delete the user '{{userEmail}}'?",
-			"delete-user-text" : "Be careful, after the confirmation the user and all related data will become unrecoverable.",
-			"delete-users-title" : "Are you sure you want to delete { count, select, 1 {1 user} other {# users} }?",
-			"delete-users-action-title" : "Delete { count, select, 1 {1 user} other {# users} }",
-			"delete-users-text" : "Be careful, after the confirmation all selected users will be removed and all related data will become unrecoverable.",
-			"activation-email-sent-message" : "Activation email was successfully sent!",
-			"resend-activation" : "Resend activation",
-			"email" : "Email",
-			"email-required" : "Email is required.",
-			"first-name" : "First Name",
-			"last-name" : "Last Name",
-			"description" : "Description",
-			"default-dashboard" : "Default dashboard",
-			"always-fullscreen" : "Always fullscreen"
+			"users" : "用户",
+			"customer-users" : "客户用户",
+			"tenant-admins" : "租户管理员",
+			"sys-admin" : "系统管理员",
+			"tenant-admin" : "租户管理员",
+			"customer" : "客户",
+			"anonymous" : "匿名",
+			"add" : "添加用户",
+			"delete" : "删除用户",
+			"add-user-text" : "添加新用户",
+			"no-users-text" : "找不到用户",
+			"user-details" : "用户详细信息",
+			"delete-user-title" : "您确定要删除用户 '{{userEmail}}' 吗?",
+			"delete-user-text" : "小心!确认后,用户和所有相关数据将不可恢复。",
+			"delete-users-title" : "你确定你要删除 { count, select, 1 {1 user} other {# users} }吗?",
+			"delete-users-action-title" : "删除  { count, select, 1 {1 user} other {# users} }",
+			"delete-users-text" : "小心!确认后,所有选定的用户将被删除,所有相关数据将不可恢复。",
+			"activation-email-sent-message" : "激活电子邮件已成功发送!",
+			"resend-activation" : "重新发送激活",
+			"email" : "电子邮件",
+			"email-required" : "电子邮件是必需的。",
+			"first-name" : "名字",
+			"last-name" : "姓",
+			"description" : "描述",
+			"default-dashboard" : "默认面板",
+			"always-fullscreen" : "始终全屏"
 		},
 		"value" : {
-			"type" : "Value type",
-			"string" : "String",
-			"string-value" : "String value",
-			"integer" : "Integer",
-			"integer-value" : "Integer value",
-			"invalid-integer-value" : "Invalid integer value",
-			"double" : "Double",
-			"double-value" : "Double value",
-			"boolean" : "Boolean",
-			"boolean-value" : "Boolean value",
-			"false" : "False",
-			"true" : "True"
+			"type" : "值类型",
+			"string" : "字符串",
+			"string-value" : "字符串值",
+			"integer" : "数字",
+			"integer-value" : "数字值",
+			"invalid-integer-value" : "整数值无效",
+			"double" : "双精度小数",
+			"double-value" : "双精度小数值",
+			"boolean" : "布尔",
+			"boolean-value" : "布尔值",
+			"false" : "假",
+			"true" : "真"
 		},
 		"widget" : {
-			"widget-library" : "Widgets Library",
-			"widget-bundle" : "Widgets Bundle",
-			"select-widgets-bundle" : "Select widgets bundle",
-			"management" : "Widget management",
-			"editor" : "Widget Editor",
-			"widget-type-not-found" : "Problem loading widget configuration.<br>Probably associated\n    widget type was removed.",
-			"widget-type-load-error" : "Widget wasn't loaded due to the following errors:",
-			"remove" : "Remove widget",
-			"edit" : "Edit widget",
-			"remove-widget-title" : "Are you sure you want to remove the widget '{{widgetTitle}}'?",
-			"remove-widget-text" : "After the confirmation the widget and all related data will become unrecoverable.",
-			"timeseries" : "Time series",
-			"latest-values" : "Latest values",
-			"rpc" : "Control widget",
-			"static" : "Static widget",
-			"select-widget-type" : "Select widget type",
-			"missing-widget-title-error" : "Widget title must be specified!",
-			"widget-saved" : "Widget saved",
-			"unable-to-save-widget-error" : "Unable to save widget! Widget has errors!",
-			"save" : "Save widget",
-			"saveAs" : "Save widget as",
-			"save-widget-type-as" : "Save widget type as",
-			"save-widget-type-as-text" : "Please enter new widget title and/or select target widgets bundle",
-			"toggle-fullscreen" : "Toggle fullscreen",
-			"run" : "Run widget",
-			"title" : "Widget title",
-			"title-required" : "Widget title is required.",
-			"type" : "Widget type",
-			"resources" : "Resources",
+			"widget-library" : "小部件库",
+			"widget-bundle" : "小部件包",
+			"select-widgets-bundle" : "选择小部件包",
+			"management" : "小部件管理",
+			"editor" : "小部件编辑器",
+			"widget-type-not-found" : "加载小部件配置时出现问题。<br> 可能关联的\n 小部件类型已删除。",
+			"widget-type-load-error" : "由于以下错误,小工具未加载:",
+			"remove" : "删除小部件",
+			"edit" : "编辑小部件",
+			"remove-widget-title" : "您确定要删除小部件 '{{widgetTitle}}' 吗?",
+			"remove-widget-text" : "确认后,窗口小部件和所有相关数据将不可恢复。",
+			"timeseries" : "时间序列",
+			"latest-values" : "最新值",
+			"rpc" : "控件小部件",
+			"static" : "静态小部件",
+			"select-widget-type" : "选择窗口小部件类型",
+			"missing-widget-title-error" : "小部件标题必须指定!",
+			"widget-saved" : "小部件已保存",
+			"unable-to-save-widget-error" : "无法保存窗口小部件! 小部件有错误!",
+			"save" : "保存小部件",
+			"saveAs" : "将小部件另存为",
+			"save-widget-type-as" : "将小部件类型另存为",
+			"save-widget-type-as-text" : "请输入新的小部件标题和/或选择目标小部件包",
+			"toggle-fullscreen" : "切换全屏",
+			"run" : "运行小部件",
+			"title" : "小部件标题",
+			"title-required" : "需要小部件标题。",
+			"type" : "小部件类型",
+			"resources" : "资源",
 			"resource-url" : "JavaScript/CSS URL",
-			"remove-resource" : "Remove resource",
-			"add-resource" : "Add resource",
+			"remove-resource" : "删除资源",
+			"add-resource" : "添加资源",
 			"html" : "HTML",
-			"tidy" : "Tidy",
+			"tidy" : "整理",
 			"css" : "CSS",
-			"settings-schema" : "Settings schema",
-			"datakey-settings-schema" : "Data key settings schema",
+			"settings-schema" : "设置模式",
+			"datakey-settings-schema" : "数据键设置模式",
 			"javascript" : "Javascript",
-			"remove-widget-type-title" : "Are you sure you want to remove the widget type '{{widgetName}}'?",
-			"remove-widget-type-text" : "After the confirmation the widget type and all related data will become unrecoverable.",
-			"remove-widget-type" : "Remove widget type",
-			"add-widget-type" : "Add new widget type",
-			"widget-type-load-failed-error" : "Failed to load widget type!",
-			"widget-template-load-failed-error" : "Failed to load widget template!",
-			"add" : "Add Widget",
-			"undo" : "Undo widget changes",
-			"export" : "Export widget"
+			"remove-widget-type-title" : "您确定要删除小部件类型 '{{widgetName}}'吗?",
+			"remove-widget-type-text" : "确认后,窗口小部件类型和所有相关数据将不可恢复。",
+			"remove-widget-type" : "删除小部件类型",
+			"add-widget-type" : "添加新的小部件类型",
+			"widget-type-load-failed-error" : "无法加载小部件类型!",
+			"widget-template-load-failed-error" : "无法加载小部件模板!",
+			"add" : "添加小部件",
+			"undo" : "撤消小部件更改",
+			"export" : "导出小部件"
 		},
 		"widgets-bundle" : {
-			"current" : "Current bundle",
-			"widgets-bundles" : "Widgets Bundles",
-			"add" : "Add Widgets Bundle",
-			"delete" : "Delete widgets bundle",
-			"title" : "Title",
-			"title-required" : "Title is required.",
-			"add-widgets-bundle-text" : "Add new widgets bundle",
-			"no-widgets-bundles-text" : "No widgets bundles found",
-			"empty" : "Widgets bundle is empty",
-			"details" : "Details",
-			"widgets-bundle-details" : "Widgets bundle details",
-			"delete-widgets-bundle-title" : "Are you sure you want to delete the widgets bundle '{{widgetsBundleTitle}}'?",
-			"delete-widgets-bundle-text" : "Be careful, after the confirmation the widgets bundle and all related data will become unrecoverable.",
-			"delete-widgets-bundles-title" : "Are you sure you want to delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }?",
-			"delete-widgets-bundles-action-title" : "Delete { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
-			"delete-widgets-bundles-text" : "Be careful, after the confirmation all selected widgets bundles will be removed and all related data will become unrecoverable.",
-			"no-widgets-bundles-matching" : "No widgets bundles matching '{{widgetsBundle}}' were found.",
-			"widgets-bundle-required" : "Widgets bundle is required.",
-			"system" : "System",
-			"import" : "Import widgets bundle",
-			"export" : "Export widgets bundle",
-			"export-failed-error" : "Unable to export widgets bundle: {{error}}",
-			"create-new-widgets-bundle" : "Create new widgets bundle",
-			"widgets-bundle-file" : "Widgets bundle file",
-			"invalid-widgets-bundle-file-error" : "Unable to import widgets bundle: Invalid widgets bundle data structure."
+			"current" : "当前包",
+			"widgets-bundles" : "小部件包",
+			"add" : "添加小部件包",
+			"delete" : "删除小部件包",
+			"title" : "标题",
+			"title-required" : "标题是必填项。",
+			"add-widgets-bundle-text" : "添加新的小部件包",
+			"no-widgets-bundles-text" : "找不到小工具包",
+			"empty" : "小部件包是空的",
+			"details" : "详情",
+			"widgets-bundle-details" : "小部件包详细信息",
+			"delete-widgets-bundle-title" : "您确定要删除小部件包 '{{widgetsBundleTitle}}'吗?",
+			"delete-widgets-bundle-text" : "小心!确认后,小部件包和所有相关数据将不可恢复。",
+			"delete-widgets-bundles-title" : "你确定你要删除 { count, select, 1 {1 widgets bundle} other {# widgets bundles} } 吗?",
+			"delete-widgets-bundles-action-title" : "删除  { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
+			"delete-widgets-bundles-text" : "小心!确认后,所有选定的小部件包将被删除,所有相关数据将不可恢复。",
+			"no-widgets-bundles-matching" : "没有找到与 '{{widgetsBundle}}' 匹配的小部件包。",
+			"widgets-bundle-required" : "需要小部件包。",
+			"system" : "系统",
+			"import" : "导入小部件包",
+			"export" : "导出小部件包",
+			"export-failed-error" : "无法导出小部件包: {{error}}",
+			"create-new-widgets-bundle" : "创建新的小部件包",
+			"widgets-bundle-file" : "小部件包文件",
+			"invalid-widgets-bundle-file-error" : "无法导入小部件包:无效的小部件包数据结构。"
 		},
 		"widget-config" : {
-			"data" : "Data",
-			"settings" : "Settings",
-			"advanced" : "Advanced",
-			"title" : "Title",
-			"general-settings" : "General settings",
-			"display-title" : "Display title",
-			"drop-shadow" : "Drop shadow",
-			"enable-fullscreen" : "Enable fullscreen",
-			"background-color" : "Background color",
-			"text-color" : "Text color",
-			"padding" : "Padding",
-			"title-style" : "Title style",
-			"mobile-mode-settings" : "Mobile mode settings",
-			"order" : "Order",
-			"height" : "Height",
-			"units" : "Special symbol to show next to value",
-			"decimals" : "Number of digits after floating point",
-			"timewindow" : "Timewindow",
-			"use-dashboard-timewindow" : "Use dashboard timewindow",
-			"display-legend" : "Display legend",
-			"datasources" : "Datasources",
-			"datasource-type" : "Type",
-			"datasource-parameters" : "Parameters",
-			"remove-datasource" : "Remove datasource",
-			"add-datasource" : "Add datasource",
-			"target-device" : "Target device"
+			"data" : "数据",
+			"settings" : "设置",
+			"advanced" : "高级",
+			"title" : "标题",
+			"general-settings" : "常规设置",
+			"display-title" : "显示标题",
+			"drop-shadow" : "阴影",
+			"enable-fullscreen" : "启用全屏",
+			"background-color" : "背景颜色",
+			"text-color" : "文字颜色",
+			"padding" : "填充",
+			"title-style" : "标题风格",
+			"mobile-mode-settings" : "移动模式设置",
+			"order" : "顺序",
+			"height" : "高度",
+			"units" : "特殊符号展示值",
+			"decimals" : "浮点数后的位数",
+			"timewindow" : "时间窗口",
+			"use-dashboard-timewindow" : "使用仪表板的时间窗口",
+			"display-legend" : "显示图例",
+			"datasources" : "数据源",
+			"datasource-type" : "类型",
+			"datasource-parameters" : "参数",
+			"remove-datasource" : "移除数据源",
+			"add-datasource" : "添加数据源",
+			"target-device" : "目标设备"
 		},
 		"widget-type" : {
-			"import" : "Import widget type",
-			"export" : "Export widget type",
-			"export-failed-error" : "Unable to export widget type: {{error}}",
-			"create-new-widget-type" : "Create new widget type",
-			"widget-type-file" : "Widget type file",
-			"invalid-widget-type-file-error" : "Unable to import widget type: Invalid widget type data structure."
+			"import" : "导入小部件类型",
+			"export" : "导出小部件类型",
+			"export-failed-error" : "无法导出小部件类型: {{error}}",
+			"create-new-widget-type" : "创建新的小部件类型",
+			"widget-type-file" : "小部件类型文件",
+			"invalid-widget-type-file-error" : "无法导入小部件类型:无效的小部件类型数据结构。"
 		},
 		"language" : {
 			"language" : "语言",
 			"en_US" : "英语",
 			"ko_KR" : "韩语",
-            "zh_CN": "汉语"
+            "zh_CN" : "汉语"
 		}
 	};
 	angular.extend(locales, {
diff --git a/ui/src/app/profile/profile.controller.js b/ui/src/app/profile/profile.controller.js
index 19a16da..53fa265 100644
--- a/ui/src/app/profile/profile.controller.js
+++ b/ui/src/app/profile/profile.controller.js
@@ -27,7 +27,11 @@ export default function ProfileController(userService, $scope, $document, $mdDia
 
     vm.save = save;
     vm.changePassword = changePassword;
-    vm.languageList = {en_US: {value: "en_US", name: "language.en_US"}, ko_KR: {value : "ko_KR", name: "language.ko_KR"}};
+    vm.languageList = {
+        en_US: {value: "en_US", name: "language.en_US"}, 
+        ko_KR: {value : "ko_KR", name: "language.ko_KR"},
+        zh_CN: {value : "zh_CN", name: "language.zh_CN"}
+};
 
     loadProfile();