Commit 084755107455a099f148bf9ede6534dec0e76904

Authored by Andrew Shvayka
Committed by GitHub
2 parents 611c970f 67d1c37d

Merge pull request #127 from pudoj/release-1.2

Adding Chineese locale
  1 +*.toDelete
1 2 output/**
2 3 *.class
3 4 *~
... ...
... ... @@ -16,6 +16,7 @@
16 16 import injectTapEventPlugin from 'react-tap-event-plugin';
17 17 import UrlHandler from './url.handler';
18 18 import addLocaleKorean from './locale/locale.constant-ko';
  19 +import addLocaleChinese from './locale/locale.constant-zh';
19 20
20 21 /* eslint-disable import/no-unresolved, import/default */
21 22
... ... @@ -50,11 +51,16 @@ export default function AppConfig($provide,
50 51 $translateProvider.addInterpolation('$translateMessageFormatInterpolation');
51 52
52 53 addLocaleKorean(locales);
  54 + addLocaleChinese(locales);
  55 +
53 56 var $window = angular.injector(['ng']).get('$window');
54 57 var lang = $window.navigator.language || $window.navigator.userLanguage;
55 58 if (lang === 'ko') {
56 59 $translateProvider.useSanitizeValueStrategy(null);
57 60 $translateProvider.preferredLanguage('ko_KR');
  61 + } else if (lang === 'zh') {
  62 + $translateProvider.useSanitizeValueStrategy(null);
  63 + $translateProvider.preferredLanguage('zh_CN');
58 64 }
59 65
60 66 for (var langKey in locales) {
... ...
... ... @@ -775,7 +775,8 @@ export default function addLocaleKorean(locales) {
775 775 "language": {
776 776 "language": "언어",
777 777 "en_US": "영어",
778   - "ko_KR": "한글"
  778 + "ko_KR": "한글",
  779 + "zh_CN": "중국말"
779 780 }
780 781 };
781 782 angular.extend(locales, {'ko_KR': ko_KR});
... ...
  1 +/*
  2 + * Copyright © 2016-2017 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +
  17 +export default function addLocaleChinese(locales) {
  18 + var zh_CN = {
  19 + "access" : {
  20 + "unauthorized" : "未授权",
  21 + "unauthorized-access" : "未授权访问",
  22 + "unauthorized-access-text" : "您应该登录以访问此资源!",
  23 + "access-forbidden" : "禁止访问",
  24 + "access-forbidden-text" : "您没有访问此位置的权限! <br/> 如果您仍希望访问此位置,请尝试使用其他用户登录。",
  25 + "refresh-token-expired" : "会话已过期",
  26 + "refresh-token-failed" : "无法刷新会话"
  27 + },
  28 + "action" : {
  29 + "activate" : "激活",
  30 + "suspend" : "挂起",
  31 + "save" : "保存",
  32 + "saveAs" : "另存为",
  33 + "cancel" : "取消",
  34 + "ok" : "确定",
  35 + "delete" : "删除",
  36 + "add" : "添加",
  37 + "yes" : "是",
  38 + "no" : "否",
  39 + "update" : "更新",
  40 + "remove" : "移出",
  41 + "search" : "检索",
  42 + "assign" : "分配",
  43 + "unassign" : "取消分配",
  44 + "apply" : "应用",
  45 + "apply-changes" : "应用更改",
  46 + "edit-mode" : "编辑模式",
  47 + "enter-edit-mode" : "进入编辑模式",
  48 + "decline-changes" : "取消更改",
  49 + "close" : "关闭",
  50 + "back" : "后退",
  51 + "run" : "运行",
  52 + "sign-in" : "登录!",
  53 + "edit" : "编辑",
  54 + "view" : "查看",
  55 + "create" : "创建",
  56 + "drag" : "拖拽",
  57 + "refresh" : "刷新",
  58 + "undo" : "撤销",
  59 + "copy" : "复制",
  60 + "paste" : "粘贴",
  61 + "import" : "导入",
  62 + "export" : "导出"
  63 + },
  64 + "aggregation" : {
  65 + "aggregation" : "聚合",
  66 + "function" : "数据聚合函数",
  67 + "limit" : "上限",
  68 + "group-interval" : "按组分隔",
  69 + "min" : "最小值",
  70 + "max" : "最大值",
  71 + "avg" : "平均值",
  72 + "sum" : "总数",
  73 + "count" : "计数",
  74 + "none" : "空"
  75 + },
  76 + "admin" : {
  77 + "general" : "常规",
  78 + "general-settings" : "常规设置",
  79 + "outgoing-mail" : "发送邮件",
  80 + "outgoing-mail-settings" : "发送邮件设置",
  81 + "system-settings" : "系统设置",
  82 + "test-mail-sent" : "测试邮件已成功发送!",
  83 + "base-url" : "基本URL",
  84 + "base-url-required" : "基本URL是必需的。",
  85 + "mail-from" : "邮件来自",
  86 + "mail-from-required" : "需要邮件发件人。",
  87 + "smtp-protocol" : "SMTP协议",
  88 + "smtp-host" : "SMTP主机",
  89 + "smtp-host-required" : "SMTP主机是必需的。",
  90 + "smtp-port" : "SMTP端口",
  91 + "smtp-port-required" : "您必须提供smtp端口。",
  92 + "smtp-port-invalid" : "这看起来不是有效的smtp端口。",
  93 + "timeout-msec" : "超时 (ms)",
  94 + "timeout-required" : "超时值是必需的。",
  95 + "timeout-invalid" : "这看起来不像有效的超时值。",
  96 + "enable-tls" : "启用TLS",
  97 + "send-test-mail" : "发送测试邮件"
  98 + },
  99 + "attribute" : {
  100 + "attributes" : "属性",
  101 + "latest-telemetry" : "最新遥测",
  102 + "attributes-scope" : "设备属性范围",
  103 + "scope-latest-telemetry" : "最新遥测",
  104 + "scope-client" : "客户端属性",
  105 + "scope-server" : "服务端属性",
  106 + "scope-shared" : "共享属性",
  107 + "add" : "添加属性",
  108 + "key" : "键",
  109 + "key-required" : "属性键是必需的。",
  110 + "value" : "值",
  111 + "value-required" : "属性值是必需的。",
  112 + "delete-attributes-title" : "您确定要删除 { count, select, 1 {1 attribute} other {# attributes} } 吗?",
  113 + "delete-attributes-text" : "注意,确认后所有选中的属性都会被删除。",
  114 + "delete-attributes" : "删除属性",
  115 + "enter-attribute-value" : "输入属性值",
  116 + "show-on-widget" : "在窗口小部件上显示",
  117 + "widget-mode" : "小部件模式",
  118 + "next-widget" : "下一个小部件",
  119 + "prev-widget" : "上一个小部件",
  120 + "add-to-dashboard" : "添加到仪表板",
  121 + "add-widget-to-dashboard" : "将小部件添加到仪表板",
  122 + "selected-attributes" : "{ count, select, 1 {1 attribute} other {# attributes} } 被选中",
  123 + "selected-telemetry" : "{ count, select, 1 {1 telemetry unit} other {# telemetry units} } 被选中"
  124 + },
  125 + "confirm-on-exit" : {
  126 + "message" : "您有未保存的更改。确定要离开此页吗?",
  127 + "html-message" : "您有未保存的更改。 <br/> 确定要离开此页面吗?",
  128 + "title" : "未保存的更改"
  129 + },
  130 + "contact" : {
  131 + "country" : "国家",
  132 + "city" : "城市",
  133 + "state" : "州",
  134 + "postal-code" : "邮政编码",
  135 + "postal-code-invalid" : "只允许数字。",
  136 + "address" : "地址",
  137 + "address2" : "地址2",
  138 + "phone" : "手机",
  139 + "email" : "邮箱",
  140 + "no-address" : "无地址"
  141 + },
  142 + "common" : {
  143 + "username" : "用户名",
  144 + "password" : "密码",
  145 + "enter-username" : "输入用户名",
  146 + "enter-password" : "输入密码",
  147 + "enter-search" : "输入检索条件"
  148 + },
  149 + "customer" : {
  150 + "customers" : "客户",
  151 + "management" : "客户管理",
  152 + "dashboard" : "客户仪表板",
  153 + "dashboards" : "客户仪表板",
  154 + "devices" : "客户设备",
  155 + "add" : "添加客户",
  156 + "delete" : "删除客户",
  157 + "manage-customer-users" : "管理客户的用户",
  158 + "manage-customer-devices" : "管理客户设备",
  159 + "manage-customer-dashboards" : "管理客户仪表板",
  160 + "add-customer-text" : "添加新客户",
  161 + "no-customers-text" : "没有找到客户",
  162 + "customer-details" : "客户详情",
  163 + "delete-customer-title" : "您确定要删除客户'{{customerTitle}}'吗?",
  164 + "delete-customer-text" : "小心!确认后,客户及其所有相关数据将不可恢复。",
  165 + "delete-customers-title" : "您确定要删除 { count, select, 1 {1 customer} other {# customers} } 吗?",
  166 + "delete-customers-action-title" : "删除 { count, select, 1 {1 customer} other {# customers} }",
  167 + "delete-customers-text" : "小心!确认后,所有选定的客户将被删除,所有相关数据将不可恢复。",
  168 + "manage-users" : "管理用户",
  169 + "manage-devices" : "管理设备",
  170 + "manage-dashboards" : "管理仪表板",
  171 + "title" : "标题",
  172 + "title-required" : "需要标题。",
  173 + "description" : "描述"
  174 + },
  175 + "datetime" : {
  176 + "date-from" : "日期从",
  177 + "time-from" : "时间从",
  178 + "date-to" : "日期到",
  179 + "time-to" : "时间到"
  180 + },
  181 + "dashboard" : {
  182 + "dashboard" : "仪表板",
  183 + "dashboards" : "可视化库",
  184 + "management" : "仪表板管理",
  185 + "view-dashboards" : "查看仪表板",
  186 + "add" : "添加仪表板",
  187 + "assign-dashboard-to-customer" : "将仪表板分配给客户",
  188 + "assign-dashboard-to-customer-text" : "请选择要分配给客户的仪表板",
  189 + "assign-to-customer-text" : "请选择客户分配仪表板",
  190 + "assign-to-customer" : "分配给客户",
  191 + "unassign-from-customer" : "取消分配客户",
  192 + "no-dashboards-text" : "没有找到仪表板",
  193 + "no-widgets" : "没有配置小部件",
  194 + "add-widget" : "添加新的小部件",
  195 + "title" : "标题",
  196 + "select-widget-title" : "选择小部件",
  197 + "select-widget-subtitle" : "可用的小部件类型列表",
  198 + "delete" : "删除仪表板",
  199 + "title-required" : "需要标题。",
  200 + "description" : "描述",
  201 + "details" : "详情",
  202 + "dashboard-details" : "仪表板详情",
  203 + "add-dashboard-text" : "添加新的仪表板",
  204 + "assign-dashboards" : "分配仪表板",
  205 + "assign-new-dashboard" : "分配新的仪表板",
  206 + "assign-dashboards-text" : "分配 { count, select, 1 {1 dashboard} other {# dashboards} } 给客户",
  207 + "delete-dashboards" : "删除仪表板",
  208 + "unassign-dashboards" : "取消分配仪表板",
  209 + "unassign-dashboards-action-title" : "从客户取消分配 { count, select, 1 {1 dashboard} other {# dashboards} }",
  210 + "delete-dashboard-title" : "您确定要删除仪表板 '{{dashboardTitle}}'?",
  211 + "delete-dashboard-text" : "小心!确认后仪表板及其所有相关数据将不可恢复。",
  212 + "delete-dashboards-title" : "你确定要删除 { count, select, 1 {1 dashboard} other {# dashboards} } 吗?",
  213 + "delete-dashboards-action-title" : "删除 { count, select, 1 {1 dashboard} other {# dashboards} }",
  214 + "delete-dashboards-text" : "小心!确认后所有被选中的仪表板将被删除,所有相关数据将不可恢复。",
  215 + "unassign-dashboard-title" : "您确定要取消分配仪表板 '{{dashboardTitle}}'?",
  216 + "unassign-dashboard-text" : "确认后,仪表板将取消分配,客户将无法访问。",
  217 + "unassign-dashboard" : "取消分配仪表板",
  218 + "unassign-dashboards-title" : "您确定要取消分配 { count, select, 1 {1 dashboard} other {# dashboards} } 吗?",
  219 + "unassign-dashboards-text" : "确认后,所有选定的仪表板将被取消分配,并且用户将无法访问。",
  220 + "select-dashboard" : "选择仪表板",
  221 + "no-dashboards-matching" : "找不到符合 '{{dashboard}}' 的仪表板。",
  222 + "dashboard-required" : "仪表板是必需的。",
  223 + "select-existing" : "选择现有仪表板",
  224 + "create-new" : "创建新的仪表板",
  225 + "new-dashboard-title" : "新仪表板标题",
  226 + "open-dashboard" : "打开仪表板",
  227 + "set-background" : "设置背景",
  228 + "background-color" : "背景颜色",
  229 + "background-image" : "背景图片",
  230 + "background-size-mode" : "背景大小模式",
  231 + "no-image" : "无图像选择",
  232 + "drop-image" : "拖拽图像或单击以选择要上传的文件。",
  233 + "settings" : "设置",
  234 + "columns-count" : "列数",
  235 + "columns-count-required" : "需要列数。",
  236 + "min-columns-count-message" : "只允许最少10列",
  237 + "max-columns-count-message" : "只允许最多1000列",
  238 + "widgets-margins" : "部件间边距",
  239 + "horizontal-margin" : "水平边距",
  240 + "horizontal-margin-required" : "需要水平边距值。",
  241 + "min-horizontal-margin-message" : "只允许0作为最小水平边距值。",
  242 + "max-horizontal-margin-message" : "只允许50作为最大水平边距值。",
  243 + "vertical-margin" : "垂直边距",
  244 + "vertical-margin-required" : "需要垂直边距值。",
  245 + "min-vertical-margin-message" : "只允许0作为最小垂直边距值。",
  246 + "max-vertical-margin-message" : "只允许50作为最大垂直边距值。",
  247 + "display-title" : "显示仪表板标题",
  248 + "title-color" : "标题颜色",
  249 + "import" : "导入仪表板",
  250 + "export" : "导出仪表板",
  251 + "export-failed-error" : "无法导出仪表板: {{error}}",
  252 + "create-new-dashboard" : "创建新的仪表板",
  253 + "dashboard-file" : "仪表板文件",
  254 + "invalid-dashboard-file-error" : "无法导入仪表板: 仪表板数据结构无效。",
  255 + "dashboard-import-missing-aliases-title" : "配置导入仪表板使用的别名",
  256 + "create-new-widget" : "创建新小部件",
  257 + "import-widget" : "导入小部件",
  258 + "widget-file" : "小部件文件",
  259 + "invalid-widget-file-error" : "无法导入窗口小部件: 窗口小部件数据结构无效。",
  260 + "widget-import-missing-aliases-title" : "配置导入的窗口小部件使用的别名",
  261 + "open-toolbar" : "打开仪表板工具栏",
  262 + "close-toolbar" : "关闭工具栏",
  263 + "configuration-error" : "配置错误",
  264 + "alias-resolution-error-title" : "仪表板别名配置错误",
  265 + "invalid-aliases-config" : "无法找到与某些别名过滤器匹配的任何设备。 <br/>" +
  266 + "请联系您的管理员以解决此问题。",
  267 + "select-devices" : "选择设备",
  268 + "assignedToCustomer" : "分配给客户"
  269 + },
  270 + "datakey" : {
  271 + "settings": "设置",
  272 + "advanced": "高级",
  273 + "label": "标签",
  274 + "color": "颜色",
  275 + "data-generation-func": "数据生成功能",
  276 + "use-data-post-processing-func": "使用数据后处理功能",
  277 + "configuration": "数据键配置",
  278 + "timeseries": "时间序列",
  279 + "attributes": "属性",
  280 + "timeseries-required": "需要设备时间序列。",
  281 + "timeseries-or-attributes-required": "设备时间/属性是必需的。",
  282 + "function-types": "函数类型",
  283 + "function-types-required": "需要函数类型。"
  284 + },
  285 + "datasource" : {
  286 + "type": "数据源类型",
  287 + "add-datasource-prompt": "请添加数据源"
  288 + },
  289 + "details" : {
  290 + "edit-mode": "编辑模式",
  291 + "toggle-edit-mode": "切换编辑模式"
  292 + },
  293 + "device" : {
  294 + "device": "设备",
  295 + "device-required": "设备是必需的",
  296 + "devices": "设备",
  297 + "management": "设备管理",
  298 + "view-devices": "查看设备",
  299 + "device-alias": "设备别名",
  300 + "aliases": "设备别名",
  301 + "no-alias-matching" : "'{{alias}}' 没有找到。",
  302 + "no-aliases-found" : "找不到别名。",
  303 + "no-key-matching" : "'{{key}}' 没有找到。",
  304 + "no-keys-found" : "找不到密钥。",
  305 + "create-new-alias": "创建一个新的!",
  306 + "create-new-key": "创建一个新的!",
  307 + "duplicate-alias-error" : "找到重复别名 '{{alias}}'。 <br> 设备别名必须是唯一的。",
  308 + "configure-alias" : "配置 '{{alias}}' 别名",
  309 + "no-devices-matching" : "找不到与 '{{device}}' 匹配的设备。",
  310 + "alias" : "别名",
  311 + "alias-required" : "需要设备别名。",
  312 + "remove-alias": "删除设备别名",
  313 + "add-alias": "添加设备别名",
  314 + "name-starts-with" : "名称前缀",
  315 + "device-list" : "设备列表",
  316 + "use-device-name-filter" : "使用过滤器",
  317 + "device-list-empty" : "没有被选中的设备",
  318 + "device-name-filter-required" : "设备名称过滤器是必需得。",
  319 + "device-name-filter-no-device-matched" : "找不到以'{{device}}' 开头的设备。",
  320 + "add" : "添加设备",
  321 + "assign-to-customer": "分配给客户",
  322 + "assign-device-to-customer": "将设备分配给客户",
  323 + "assign-device-to-customer-text": "请选择要分配给客户的设备",
  324 + "no-devices-text": "找不到设备",
  325 + "assign-to-customer-text": "请选择客户分配设备",
  326 + "device-details": "设备详细信息",
  327 + "add-device-text": "添加新设备",
  328 + "credentials": "凭据",
  329 + "manage-credentials": "管理凭据",
  330 + "delete": "删除设备",
  331 + "assign-devices": "分配设备",
  332 + "assign-devices-text": "将{count,select,1 {1 device} other {# devices}}分配给客户",
  333 + "delete-devices": "删除设备",
  334 + "unassign-from-customer": "取消分配客户",
  335 + "unassign-devices": "取消分配设备",
  336 + "unassign-devices-action-title": "从客户处取消分配{count,select,1 {1 device} other {# devices}}",
  337 + "assign-new-device": "分配新设备",
  338 + "view-credentials": "查看凭据",
  339 + "delete-device-title": "您确定要删除设备的{{deviceName}}吗?",
  340 + "delete-device-text": "小心!确认后设备及其所有相关数据将不可恢复。",
  341 + "delete-devices-title": "您确定要删除{count,select,1 {1 device} other {# devices}} 吗?",
  342 + "delete-devices-action-title": "删除 {count,select,1 {1 device} other {# devices}}",
  343 + "delete-devices-text": "小心!确认后所有选定的设备将被删除,所有相关数据将不可恢复。",
  344 + "unassign-device-title": "您确定要取消分配设备 '{{deviceName}}'?",
  345 + "unassign-device-text": "确认后,设备将被取消分配,客户将无法访问。",
  346 + "unassign-device": "取消分配设备",
  347 + "unassign-devices-title": "您确定要取消分配{count,select,1 {1 device} other {# devices}} 吗?",
  348 + "unassign-devices-text": "确认后,所有选定的设备将被取消分配,并且客户将无法访问。",
  349 + "device-credentials": "设备凭据",
  350 + "credentials-type": "凭据类型",
  351 + "access-token": "访问令牌",
  352 + "access-token-required": "需要访问令牌",
  353 + "access-token-invalid": "访问令牌长度必须为1到20个字符。",
  354 + "rsa-key": "RSA公钥",
  355 + "rsa-key-required": "需要RSA公钥",
  356 + "secret": "密钥",
  357 + "secret-required": "密钥是必需的",
  358 + "name": "名称",
  359 + "name-required": "名称是必需的。",
  360 + "description": "说明",
  361 + "events": "事件",
  362 + "details": "详细信息",
  363 + "copyId": "复制设备ID",
  364 + "copyAccessToken": "复制访问令牌",
  365 + "idCopiedMessage": "设备ID已复制到剪贴板",
  366 + "accessTokenCopiedMessage": "设备访问令牌已复制到剪贴板",
  367 + "assignedToCustomer": "分配给客户",
  368 + "unable-delete-device-alias-title": "无法删除设备别名",
  369 + "unable-delete-device-alias-text": "设备别名 '{{deviceAlias}}' 不能够被删除,因为它被下列部件所使用: <br/> {{widgetsList}}",
  370 + "is-gateway": "是网关"
  371 + },
  372 + "dialog" : {
  373 + "close" : "关闭对话框"
  374 + },
  375 + "error" : {
  376 + "unable-to-connect": "无法连接到服务器!请检查您的互联网连接。",
  377 + "unhandled-error-code": "未处理的错误代码: {{errorCode}}",
  378 + "unknown-error": "未知错误"
  379 + },
  380 + "event" : {
  381 + "event-type": "事件类型",
  382 + "type-alarm": "报警",
  383 + "type-error": "错误",
  384 + "type-lc-event": "生命周期事件",
  385 + "type-stats": "类型统计",
  386 + "no-events-prompt": "找不到事件",
  387 + "error": "错误",
  388 + "alarm": "报警",
  389 + "event-time": "事件时间",
  390 + "server": "服务器",
  391 + "body": "整体",
  392 + "method": "方法",
  393 + "event": "事件",
  394 + "status": "状态",
  395 + "success": "成功",
  396 + "failed": "失败",
  397 + "messages-processed": "消息处理",
  398 + "errors-occurred": "错误发生"
  399 + },
  400 + "fullscreen" : {
  401 + "expand": "展开到全屏",
  402 + "exit": "退出全屏",
  403 + "toggle": "切换全屏模式",
  404 + "fullscreen": "全屏"
  405 + },
  406 + "function" : {
  407 + "function" : "函数"
  408 + },
  409 + "grid" : {
  410 + "delete-item-title": "您确定要删除此项吗?",
  411 + "delete-item-text": "注意,确认后此项和所有相关数据将变得不可恢复。",
  412 + "delete-items-title": "您确定要删除{count, select, 1 {1 item} other {# items}} 吗?",
  413 + "delete-items-action-title": "删除{count, select, 1 {1 item} other {# items}}",
  414 + "delete-items-text": "注意,确认后所有选择的项目将被删除,所有相关数据将变得不可恢复。",
  415 + "add-item-text": "添加新项目",
  416 + "no-items-text": "没有找到项目",
  417 + "item-details": "项目详细信息",
  418 + "delete-item": "删除项目",
  419 + "delete-items": "删除项目",
  420 + "scroll-to-top": "滚动到顶部"
  421 + },
  422 + "help" : {
  423 + "goto-help-page" : "转到帮助页面"
  424 + },
  425 + "home" : {
  426 + "home": "首页",
  427 + "profile": "属性",
  428 + "logout": "注销",
  429 + "menu": "菜单",
  430 + "avatar": "化身",
  431 + "open-user-menu": "打开用户菜单"
  432 + },
  433 + "import" : {
  434 + "no-file": "没有选择文件",
  435 + "drop-file": "删除JSON文件或单击以选择要上传的文件。"
  436 + },
  437 + "item" : {
  438 + "selected" : "选择"
  439 + },
  440 + "js-func" : {
  441 + "no-return-error": "函数必须返回值!",
  442 + "return-type-mismatch": "函数必须返回'{{type}}'类型的值!"
  443 + },
  444 + "legend" : {
  445 + "position" : "图例位置",
  446 + "show-max" : "显示最大值",
  447 + "show-min" : "显示最小值",
  448 + "show-avg" : "显示平均值",
  449 + "show-total" : "显示总数",
  450 + "settings" : "图例设置",
  451 + "min" : "最小值",
  452 + "max" : "最大值",
  453 + "avg" : "平均值",
  454 + "total" : "总数"
  455 + },
  456 + "login" : {
  457 + "login": "登录",
  458 + "request-password-reset": "请求密码重置",
  459 + "reset-password": "重置密码",
  460 + "create-password": "创建密码",
  461 + "passwords-mismatch-error": "输入的密码必须相同!",
  462 + "password-again": "密码再次",
  463 + "sign-in": "登录 ",
  464 + "username": "用户名(电子邮件)",
  465 + "remember-me": "记住我",
  466 + "forgot-password": "忘记密码?",
  467 + "password-reset": "密码重置",
  468 + "new-password": "新密码",
  469 + "new-password-again": "新密码再次",
  470 + "password-link-sent-message": "密码重置链接已成功发送!",
  471 + "email": "电子邮件"
  472 + },
  473 + "plugin" : {
  474 + "plugins" : "插件",
  475 + "delete" : "删除插件",
  476 + "activate" : "激活插件",
  477 + "suspend" : "暂停插件",
  478 + "active" : "激活",
  479 + "suspended" : "暂停",
  480 + "name" : "名称",
  481 + "name-required" : "名称是必填项。",
  482 + "description" : "描述",
  483 + "add" : "添加插件",
  484 + "delete-plugin-title" : "你确定要删除插件 '{{pluginName}}' 吗?",
  485 + "delete-plugin-text" : "小心!确认后,插件和所有相关数据将不可恢复。",
  486 + "delete-plugins-title" : "你确定你要删除 { count, select, 1 {1 plugin} other {# plugins} } 吗?",
  487 + "delete-plugins-action-title" : "删除 { count, select, 1 {1 plugin} other {# plugins} }",
  488 + "delete-plugins-text" : "小心!确认后,所有选定的插件将被删除,所有相关数据将不可恢复。",
  489 + "add-plugin-text" : "添加新的插件",
  490 + "no-plugins-text" : "没有找到插件",
  491 + "plugin-details" : "插件详细信息",
  492 + "api-token" : "API令牌",
  493 + "api-token-required" : "API令牌是必需的。",
  494 + "type" : "插件类型",
  495 + "type-required" : "插件类型是必需的。",
  496 + "configuration" : "插件配置",
  497 + "system" : "系统",
  498 + "select-plugin" : "选择插件",
  499 + "plugin" : "插件",
  500 + "no-plugins-matching" : "没有找到匹配'{{plugin}}'的插件。",
  501 + "plugin-required" : "插件是必需的。",
  502 + "plugin-require-match" : "请选择一个现有的插件。",
  503 + "events" : "事件",
  504 + "details" : "详情",
  505 + "import" : "导入插件",
  506 + "export" : "导出插件",
  507 + "export-failed-error" : "无法导出插件:{{error}}",
  508 + "create-new-plugin" : "创建新的插件",
  509 + "plugin-file" : "插件文件",
  510 + "invalid-plugin-file-error" : "无法导入插件:插件数据结构无效。"
  511 + },
  512 + "position" : {
  513 + "top" : "顶部",
  514 + "bottom" : "底部",
  515 + "left" : "左侧",
  516 + "right" : "右侧"
  517 + },
  518 + "profile" : {
  519 + "profile": "属性",
  520 + "change-password": "更改密码",
  521 + "current-password": "当前密码"
  522 + },
  523 + "rule" : {
  524 + "rules" : "规则",
  525 + "delete" : "删除规则",
  526 + "activate" : "激活规则",
  527 + "suspend" : "暂停规则",
  528 + "active" : "激活",
  529 + "suspended" : "暂停",
  530 + "name" : "名称",
  531 + "name-required" : "名称是必填项。",
  532 + "description" : "描述",
  533 + "add" : "添加规则",
  534 + "delete-rule-title" : "您确定要删除规则'{{ruleName}}'吗?",
  535 + "delete-rule-text" : "小心!确认后,规则和所有相关数据将不可恢复。",
  536 + "delete-rules-title" : "你确定要删除 {count, select, 1 {1 rule} other {# rules}} 吗?",
  537 + "delete-rules-action-title" : "删除 { count, select, 1 {1 rule} other {# rules} }",
  538 + "delete-rules-text" : "小心!确认后,所有选定的规则将被删除,所有相关数据将不可恢复。",
  539 + "add-rule-text" : "添加新规则",
  540 + "no-rules-text" : "没有找到规则",
  541 + "rule-details" : "规则详情",
  542 + "filters" : "过滤器",
  543 + "filter" : "过滤器",
  544 + "add-filter-prompt" : "请添加过滤器",
  545 + "remove-filter" : "删除过滤器",
  546 + "add-filter" : "添加过滤器",
  547 + "filter-name" : "过滤器名称",
  548 + "filter-type" : "过滤器类型",
  549 + "edit-filter" : "编辑过滤器",
  550 + "view-filter" : "查看过滤器",
  551 + "component-name" : "名称",
  552 + "component-name-required" : "名称是必填项。",
  553 + "component-type" : "类型",
  554 + "component-type-required" : "类型是必填项。",
  555 + "processor" : "处理器",
  556 + "no-processor-configured" : "未配置处理器",
  557 + "create-processor" : "创建处理器",
  558 + "processor-name" : "处理器名称",
  559 + "processor-type" : "处理器类型",
  560 + "plugin-action" : "插件动作",
  561 + "action-name" : "动作名称",
  562 + "action-type" : "动作类型",
  563 + "create-action-prompt" : "请创建动作",
  564 + "create-action" : "创建动作",
  565 + "details" : "详情",
  566 + "events" : "事件",
  567 + "system" : "系统",
  568 + "import" : "导入规则",
  569 + "export" : "导出规则",
  570 + "export-failed-error" : "无法导出规则:{{error}}",
  571 + "create-new-rule" : "创建新规则",
  572 + "rule-file" : "规则文件",
  573 + "invalid-rule-file-error" : "无法导入规则:规则数据结构无效。"
  574 + },
  575 + "rule-plugin" : {
  576 + "management" : "规则和插件管理"
  577 + },
  578 + "tenant" : {
  579 + "tenants" : "租户",
  580 + "management" : "租户管理",
  581 + "add" : "添加租户",
  582 + "admins" : "管理员",
  583 + "manage-tenant-admins" : "管理租户管理员",
  584 + "delete" : "删除租户",
  585 + "add-tenant-text" : "添加新租户",
  586 + "no-tenants-text" : "没有找到租户",
  587 + "tenant-details" : "租客详情",
  588 + "delete-tenant-title" : "您确定要删除租户'{{tenantTitle}}'?",
  589 + "delete-tenant-text" : "小心!确认后,租户和所有相关数据将不可恢复。",
  590 + "delete-tenants-title" : "您确定要删除 {count,select,1 {1 tenant} other {# tenants}} 吗?",
  591 + "delete-tenants-action-title" : "删除 { count, select, 1 {1 tenant} other {# tenants} }",
  592 + "delete-tenants-text" : "小心!确认后,所有选定的租户将被删除,所有相关数据将不可恢复。",
  593 + "title" : "标题",
  594 + "title-required" : "标题是必填项。",
  595 + "description" : "描述"
  596 + },
  597 + "timeinterval" : {
  598 + "seconds-interval" : "{ seconds, select, 1 {1 second} other {# seconds} }",
  599 + "minutes-interval" : "{ minutes, select, 1 {1 minute} other {# minutes} }",
  600 + "hours-interval" : "{ hours, select, 1 {1 hour} other {# hours} }",
  601 + "days-interval" : "{ days, select, 1 {1 day} other {# days} }",
  602 + "days" : "天",
  603 + "hours" : "时",
  604 + "minutes" : "分",
  605 + "seconds" : "秒",
  606 + "advanced" : "高级"
  607 + },
  608 + "timewindow" : {
  609 + "days" : "{ days, select, 1 { day } other {# days } }",
  610 + "hours" : "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
  611 + "minutes" : "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
  612 + "seconds" : "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
  613 + "realtime" : "实时",
  614 + "history" : "历史",
  615 + "last-prefix" : "最后",
  616 + "period" : "从 {{ startTime }} 到 {{ endTime }}",
  617 + "edit" : "编辑时间窗口",
  618 + "date-range" : "日期范围",
  619 + "last" : "最后",
  620 + "time-period" : "时间段"
  621 + },
  622 + "user" : {
  623 + "users" : "用户",
  624 + "customer-users" : "客户用户",
  625 + "tenant-admins" : "租户管理员",
  626 + "sys-admin" : "系统管理员",
  627 + "tenant-admin" : "租户管理员",
  628 + "customer" : "客户",
  629 + "anonymous" : "匿名",
  630 + "add" : "添加用户",
  631 + "delete" : "删除用户",
  632 + "add-user-text" : "添加新用户",
  633 + "no-users-text" : "找不到用户",
  634 + "user-details" : "用户详细信息",
  635 + "delete-user-title" : "您确定要删除用户 '{{userEmail}}' 吗?",
  636 + "delete-user-text" : "小心!确认后,用户和所有相关数据将不可恢复。",
  637 + "delete-users-title" : "你确定你要删除 { count, select, 1 {1 user} other {# users} }吗?",
  638 + "delete-users-action-title" : "删除 { count, select, 1 {1 user} other {# users} }",
  639 + "delete-users-text" : "小心!确认后,所有选定的用户将被删除,所有相关数据将不可恢复。",
  640 + "activation-email-sent-message" : "激活电子邮件已成功发送!",
  641 + "resend-activation" : "重新发送激活",
  642 + "email" : "电子邮件",
  643 + "email-required" : "电子邮件是必需的。",
  644 + "first-name" : "名字",
  645 + "last-name" : "姓",
  646 + "description" : "描述",
  647 + "default-dashboard" : "默认面板",
  648 + "always-fullscreen" : "始终全屏"
  649 + },
  650 + "value" : {
  651 + "type" : "值类型",
  652 + "string" : "字符串",
  653 + "string-value" : "字符串值",
  654 + "integer" : "数字",
  655 + "integer-value" : "数字值",
  656 + "invalid-integer-value" : "整数值无效",
  657 + "double" : "双精度小数",
  658 + "double-value" : "双精度小数值",
  659 + "boolean" : "布尔",
  660 + "boolean-value" : "布尔值",
  661 + "false" : "假",
  662 + "true" : "真"
  663 + },
  664 + "widget" : {
  665 + "widget-library" : "小部件库",
  666 + "widget-bundle" : "小部件包",
  667 + "select-widgets-bundle" : "选择小部件包",
  668 + "management" : "小部件管理",
  669 + "editor" : "小部件编辑器",
  670 + "widget-type-not-found" : "加载小部件配置时出现问题。<br> 可能关联的\n 小部件类型已删除。",
  671 + "widget-type-load-error" : "由于以下错误,小工具未加载:",
  672 + "remove" : "删除小部件",
  673 + "edit" : "编辑小部件",
  674 + "remove-widget-title" : "您确定要删除小部件 '{{widgetTitle}}' 吗?",
  675 + "remove-widget-text" : "确认后,窗口小部件和所有相关数据将不可恢复。",
  676 + "timeseries" : "时间序列",
  677 + "latest-values" : "最新值",
  678 + "rpc" : "控件小部件",
  679 + "static" : "静态小部件",
  680 + "select-widget-type" : "选择窗口小部件类型",
  681 + "missing-widget-title-error" : "小部件标题必须指定!",
  682 + "widget-saved" : "小部件已保存",
  683 + "unable-to-save-widget-error" : "无法保存窗口小部件! 小部件有错误!",
  684 + "save" : "保存小部件",
  685 + "saveAs" : "将小部件另存为",
  686 + "save-widget-type-as" : "将小部件类型另存为",
  687 + "save-widget-type-as-text" : "请输入新的小部件标题和/或选择目标小部件包",
  688 + "toggle-fullscreen" : "切换全屏",
  689 + "run" : "运行小部件",
  690 + "title" : "小部件标题",
  691 + "title-required" : "需要小部件标题。",
  692 + "type" : "小部件类型",
  693 + "resources" : "资源",
  694 + "resource-url" : "JavaScript/CSS URL",
  695 + "remove-resource" : "删除资源",
  696 + "add-resource" : "添加资源",
  697 + "html" : "HTML",
  698 + "tidy" : "整理",
  699 + "css" : "CSS",
  700 + "settings-schema" : "设置模式",
  701 + "datakey-settings-schema" : "数据键设置模式",
  702 + "javascript" : "Javascript",
  703 + "remove-widget-type-title" : "您确定要删除小部件类型 '{{widgetName}}'吗?",
  704 + "remove-widget-type-text" : "确认后,窗口小部件类型和所有相关数据将不可恢复。",
  705 + "remove-widget-type" : "删除小部件类型",
  706 + "add-widget-type" : "添加新的小部件类型",
  707 + "widget-type-load-failed-error" : "无法加载小部件类型!",
  708 + "widget-template-load-failed-error" : "无法加载小部件模板!",
  709 + "add" : "添加小部件",
  710 + "undo" : "撤消小部件更改",
  711 + "export" : "导出小部件"
  712 + },
  713 + "widgets-bundle" : {
  714 + "current" : "当前包",
  715 + "widgets-bundles" : "小部件包",
  716 + "add" : "添加小部件包",
  717 + "delete" : "删除小部件包",
  718 + "title" : "标题",
  719 + "title-required" : "标题是必填项。",
  720 + "add-widgets-bundle-text" : "添加新的小部件包",
  721 + "no-widgets-bundles-text" : "找不到小工具包",
  722 + "empty" : "小部件包是空的",
  723 + "details" : "详情",
  724 + "widgets-bundle-details" : "小部件包详细信息",
  725 + "delete-widgets-bundle-title" : "您确定要删除小部件包 '{{widgetsBundleTitle}}'吗?",
  726 + "delete-widgets-bundle-text" : "小心!确认后,小部件包和所有相关数据将不可恢复。",
  727 + "delete-widgets-bundles-title" : "你确定你要删除 { count, select, 1 {1 widgets bundle} other {# widgets bundles} } 吗?",
  728 + "delete-widgets-bundles-action-title" : "删除 { count, select, 1 {1 widgets bundle} other {# widgets bundles} }",
  729 + "delete-widgets-bundles-text" : "小心!确认后,所有选定的小部件包将被删除,所有相关数据将不可恢复。",
  730 + "no-widgets-bundles-matching" : "没有找到与 '{{widgetsBundle}}' 匹配的小部件包。",
  731 + "widgets-bundle-required" : "需要小部件包。",
  732 + "system" : "系统",
  733 + "import" : "导入小部件包",
  734 + "export" : "导出小部件包",
  735 + "export-failed-error" : "无法导出小部件包: {{error}}",
  736 + "create-new-widgets-bundle" : "创建新的小部件包",
  737 + "widgets-bundle-file" : "小部件包文件",
  738 + "invalid-widgets-bundle-file-error" : "无法导入小部件包:无效的小部件包数据结构。"
  739 + },
  740 + "widget-config" : {
  741 + "data" : "数据",
  742 + "settings" : "设置",
  743 + "advanced" : "高级",
  744 + "title" : "标题",
  745 + "general-settings" : "常规设置",
  746 + "display-title" : "显示标题",
  747 + "drop-shadow" : "阴影",
  748 + "enable-fullscreen" : "启用全屏",
  749 + "background-color" : "背景颜色",
  750 + "text-color" : "文字颜色",
  751 + "padding" : "填充",
  752 + "title-style" : "标题风格",
  753 + "mobile-mode-settings" : "移动模式设置",
  754 + "order" : "顺序",
  755 + "height" : "高度",
  756 + "units" : "特殊符号展示值",
  757 + "decimals" : "浮点数后的位数",
  758 + "timewindow" : "时间窗口",
  759 + "use-dashboard-timewindow" : "使用仪表板的时间窗口",
  760 + "display-legend" : "显示图例",
  761 + "datasources" : "数据源",
  762 + "datasource-type" : "类型",
  763 + "datasource-parameters" : "参数",
  764 + "remove-datasource" : "移除数据源",
  765 + "add-datasource" : "添加数据源",
  766 + "target-device" : "目标设备"
  767 + },
  768 + "widget-type" : {
  769 + "import" : "导入小部件类型",
  770 + "export" : "导出小部件类型",
  771 + "export-failed-error" : "无法导出小部件类型: {{error}}",
  772 + "create-new-widget-type" : "创建新的小部件类型",
  773 + "widget-type-file" : "小部件类型文件",
  774 + "invalid-widget-type-file-error" : "无法导入小部件类型:无效的小部件类型数据结构。"
  775 + },
  776 + "language" : {
  777 + "language" : "语言",
  778 + "en_US" : "英语",
  779 + "ko_KR" : "韩语",
  780 + "zh_CN" : "汉语"
  781 + }
  782 + };
  783 + angular.extend(locales, {
  784 + 'zh_CN' : zh_CN
  785 + });
  786 +}
\ No newline at end of file
... ...
... ... @@ -810,7 +810,8 @@ export default angular.module('thingsboard.locale', [])
810 810 "language": {
811 811 "language": "Language",
812 812 "en_US": "English",
813   - "ko_KR": "Korean"
  813 + "ko_KR": "Korean",
  814 + "zh_CN": "Chinese"
814 815 }
815 816 }
816 817 }
... ...
... ... @@ -27,7 +27,11 @@ export default function ProfileController(userService, $scope, $document, $mdDia
27 27
28 28 vm.save = save;
29 29 vm.changePassword = changePassword;
30   - vm.languageList = {en_US: {value: "en_US", name: "language.en_US"}, ko_KR: {value : "ko_KR", name: "language.ko_KR"}};
  30 + vm.languageList = {
  31 + en_US: {value: "en_US", name: "language.en_US"},
  32 + ko_KR: {value : "ko_KR", name: "language.ko_KR"},
  33 + zh_CN: {value : "zh_CN", name: "language.zh_CN"}
  34 +};
31 35
32 36 loadProfile();
33 37
... ...