Commit 7cd8b2b34645d7913caca06501eceb74d86e550b

Authored by Andrew Shvayka
Committed by GitHub
2 parents 98e83408 7490e108

Merge pull request #88 from OutOfBedlam/PR/sel_locale_ui

Add ui feature in user profile for selecting preferred language
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 */ 15 */
16 import injectTapEventPlugin from 'react-tap-event-plugin'; 16 import injectTapEventPlugin from 'react-tap-event-plugin';
17 import UrlHandler from './url.handler'; 17 import UrlHandler from './url.handler';
  18 +import addLocaleKorean from './locale/locale.constant-ko';
18 19
19 /* eslint-disable import/no-unresolved, import/default */ 20 /* eslint-disable import/no-unresolved, import/default */
20 21
@@ -48,6 +49,14 @@ export default function AppConfig($provide, @@ -48,6 +49,14 @@ export default function AppConfig($provide,
48 $translateProvider.useMissingTranslationHandlerLog(); 49 $translateProvider.useMissingTranslationHandlerLog();
49 $translateProvider.addInterpolation('$translateMessageFormatInterpolation'); 50 $translateProvider.addInterpolation('$translateMessageFormatInterpolation');
50 51
  52 + addLocaleKorean(locales);
  53 + var $window = angular.injector(['ng']).get('$window');
  54 + var lang = $window.navigator.language || $window.navigator.userLanguage;
  55 + if (lang === 'ko') {
  56 + $translateProvider.useSanitizeValueStrategy(null);
  57 + $translateProvider.preferredLanguage('ko_KR');
  58 + }
  59 +
51 for (var langKey in locales) { 60 for (var langKey in locales) {
52 var translationTable = locales[langKey]; 61 var translationTable = locales[langKey];
53 $translateProvider.translations(langKey, translationTable); 62 $translateProvider.translations(langKey, translationTable);
@@ -14,767 +14,769 @@ @@ -14,767 +14,769 @@
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 16
17 -export default angular.module('thingsboard.locale', [])  
18 - .constant('locales',  
19 - {  
20 - 'ko_KR': {  
21 - "access": {  
22 - "unauthorized": "권한 없음.",  
23 - "unauthorized-access": "허가되지 않은 접근",  
24 - "unauthorized-access-text": "이 리소스에 접근하려면 로그인해야 합니다!",  
25 - "access-forbidden": "접근 금지",  
26 - "access-forbidden-text": "접근 권한이 없습니다.!<br/> 만일 이 페이지에 계속 접근하려면 다른 사용자로 로그인 하세요.",  
27 - "refresh-token-expired": "세션이 만료되었습니다.",  
28 - "refresh-token-failed": "세션을 새로 고칠 수 없습니다."  
29 - },  
30 - "action": {  
31 - "activate": "활설화",  
32 - "suspend": "비활성화",  
33 - "save": "저장",  
34 - "saveAs": "다른 이름으로 저장",  
35 - "cancel": "취소",  
36 - "ok": "확인",  
37 - "delete": "삭제",  
38 - "add": "추가",  
39 - "yes": "네",  
40 - "no": "아니오",  
41 - "update": "업데이트",  
42 - "remove": "제거",  
43 - "search": "검색",  
44 - "assign": "할당",  
45 - "unassign": "비할당",  
46 - "apply": "적용",  
47 - "apply-changes": "변경사항 적용",  
48 - "edit-mode": "수정 모드",  
49 - "enter-edit-mode": "수정 모드 진입",  
50 - "decline-changes": "변경사항 포기",  
51 - "close": "닫기",  
52 - "back": "뒤로",  
53 - "run": "실행",  
54 - "sign-in": "로그인!",  
55 - "edit": "수정",  
56 - "view": "보기",  
57 - "create": "만들기",  
58 - "drag": "끌기",  
59 - "refresh": "새로고침",  
60 - "undo": "취소",  
61 - "copy": "복사",  
62 - "paste": "붙여넣기",  
63 - "import": "가져오기",  
64 - "export": "내보내기"  
65 - },  
66 - "aggregation": {  
67 - "aggregation": "집합",  
68 - "function": "데이터 집합 함수",  
69 - "limit": "최대 값",  
70 - "group-interval": "그룹 간격",  
71 - "min": "최소",  
72 - "max": "최대",  
73 - "avg": "평균",  
74 - "sum": "합계",  
75 - "count": "숫자",  
76 - "none": "없음"  
77 - },  
78 - "admin": {  
79 - "general": "일반",  
80 - "general-settings": "일반 설정",  
81 - "outgoing-mail": "메일 전송",  
82 - "outgoing-mail-settings": "메일 전송 설정",  
83 - "system-settings": "시스템 설정",  
84 - "test-mail-sent": "테스트 메일이 성공적으로 전송되었습니다!",  
85 - "base-url": "기본 URL",  
86 - "base-url-required": "기본 URL을 입력해야 합니다.",  
87 - "mail-from": "보내는 사람",  
88 - "mail-from-required": "보내는 사람을 입력해야 합니다.",  
89 - "smtp-protocol": "SMTP 프로토콜",  
90 - "smtp-host": "SMTP 호스트",  
91 - "smtp-host-required": "SMTP 호스트를 입력해야 합니다.",  
92 - "smtp-port": "SMTP 포트",  
93 - "smtp-port-required": "SMTP 포트를 입력해야 합니다.",  
94 - "smtp-port-invalid": "올바른 SMTP 포트가 아닙니다.",  
95 - "timeout-msec": "제한시간 (msec)",  
96 - "timeout-required": "제한시간을 입력해야 합니다.",  
97 - "timeout-invalid": "올바른 제한시간이 아닙니다.",  
98 - "enable-tls": "TLS 사용",  
99 - "send-test-mail": "테스트 메일 보내기"  
100 - },  
101 - "attribute": {  
102 - "attributes": "속성",  
103 - "latest-telemetry": "최근 데이터",  
104 - "attributes-scope": "디바이스 속성 범위",  
105 - "scope-latest-telemetry": "최근 데이터",  
106 - "scope-client": "클라이언트 속성",  
107 - "scope-server": "서버 속성",  
108 - "scope-shared": "공유 속성",  
109 - "add": "속성 추가",  
110 - "key": "Key",  
111 - "key-required": "속성 key를 입력하세요.",  
112 - "value": "Value",  
113 - "value-required": "속성 value를 입력하세요.",  
114 - "delete-attributes-title": "{ count, select, 1 {속성} other {여러 속성들을} } 삭제하시겠습니까??",  
115 - "delete-attributes-text": "모든 선택된 속성들이 제거 될 것이므로 주의하십시오.",  
116 - "delete-attributes": "속성 삭제",  
117 - "enter-attribute-value": "속성 값 입력",  
118 - "show-on-widget": "위젯 보기",  
119 - "widget-mode": "위젯 모드",  
120 - "next-widget": "다음 위젯",  
121 - "prev-widget": "이전 위젯",  
122 - "add-to-dashboard": "대시보드에 추가",  
123 - "add-widget-to-dashboard": "대시보드에 위젯 추가",  
124 - "selected-attributes": "{ count, select, 1 {속성 1개} other {속성 #개} } 선택됨",  
125 - "selected-telemetry": "{ count, select, 1 {최근 데이터 1개} other {최근 데이터 #개} } 선택됨"  
126 - },  
127 - "confirm-on-exit": {  
128 - "message": "변경 사항을 저장하지 않았습니다. 이 페이지를 나가시겠습니까?",  
129 - "html-message": "변경 사항을 저장하지 않았습니다.<br/>이 페이지를 나가시겠습니까?",  
130 - "title": "저장되지 않은 변경사항"  
131 - },  
132 - "contact": {  
133 - "country": "국가",  
134 - "city": "시",  
135 - "state": "도",  
136 - "postal-code": "우편 번호",  
137 - "postal-code-invalid": "숫자만 입력하세요.",  
138 - "address": "주소",  
139 - "address2": "상세주소",  
140 - "phone": "전화번호",  
141 - "email": "Email",  
142 - "no-address": "주소 정보 없음"  
143 - },  
144 - "common": {  
145 - "username": "사용자명",  
146 - "password": "비밀번호",  
147 - "enter-username": "사용자명을 입력하세요.",  
148 - "enter-password": "비밀번호를 입력하세요.",  
149 - "enter-search": "검색어 입력"  
150 - },  
151 - "customer": {  
152 - "customers": "커스터머",  
153 - "management": "커스터머 관리",  
154 - "dashboard": "커스터머 대시보드",  
155 - "dashboards": "커스터머 대시보드",  
156 - "devices": "커스터머 디바이스",  
157 - "add": "커스터머 추가",  
158 - "delete": "커스터머 삭제",  
159 - "manage-customer-users": "커스터머 사용자 관리",  
160 - "manage-customer-devices": "커스터머 디바이스 관리",  
161 - "manage-customer-dashboards": "커스터머 대시보드 관리",  
162 - "add-customer-text": "커스터머 추가",  
163 - "no-customers-text": "커스터머가 없습니다.",  
164 - "customer-details": "커스터머 상세정보",  
165 - "delete-customer-title": "'{{customerTitle}}' 커스터머를 삭제하시겠습니까?",  
166 - "delete-customer-text": "커스터머 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
167 - "delete-customers-title": "{ count, select, 1 {커스터머 1개} other {커스터머 #개} }를 삭제하시겠습니까?",  
168 - "delete-customers-action-title": "{ count, select, 1 {커스터머 1개} other {커스터머 #개} } 삭제",  
169 - "delete-customers-text": "선택된 커스터머는 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
170 - "manage-users": "사용자 관리",  
171 - "manage-devices": "디바이스 관리",  
172 - "manage-dashboards": "대시보드 관리",  
173 - "title": "타이틀",  
174 - "title-required": "타이틀을 입력하세요.",  
175 - "description": "설명"  
176 - },  
177 - "datetime": {  
178 - "date-from": "시작 날짜",  
179 - "time-from": "시작 시간",  
180 - "date-to": "종료 날짜",  
181 - "time-to": "종료 시간"  
182 - },  
183 - "dashboard": {  
184 - "dashboard": "대시보드",  
185 - "dashboards": "대시보드",  
186 - "management": "대시보드 관리",  
187 - "view-dashboards": "대시보드 보기",  
188 - "add": "대시보드 추가",  
189 - "assign-dashboard-to-customer": "대시보드 커스터머 선택",  
190 - "assign-dashboard-to-customer-text": "대시보드 커스터머를 선택하세요.",  
191 - "assign-to-customer-text": "대시보드 커스터머를 선택하세요.",  
192 - "assign-to-customer": "커스터머 선택",  
193 - "unassign-from-customer": "커스터머 해제",  
194 - "no-dashboards-text": "대시보드가 없습니다",  
195 - "no-widgets": "설정된 위젯 없음",  
196 - "add-widget": "위젯 추가",  
197 - "title": "타이틀",  
198 - "select-widget-title": "위젯 선택",  
199 - "select-widget-subtitle": "사용가능한 위젯 타입 목록",  
200 - "delete": "대시보드 삭제",  
201 - "title-required": "타이틀을 입력하세요.",  
202 - "description": "설명",  
203 - "details": "상세",  
204 - "dashboard-details": "대시보드 상세정보",  
205 - "add-dashboard-text": "대시보드 추가",  
206 - "assign-dashboards": "대시보드 지정",  
207 - "assign-new-dashboard": "새 대시보드 할당",  
208 - "assign-dashboards-text": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당",  
209 - "delete-dashboards": "대시보드 삭제",  
210 - "unassign-dashboards": "대시보드 할당 취소",  
211 - "unassign-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당 취소",  
212 - "delete-dashboard-title": "'{{dashboardTitle}}' 대시보드를 삭제하시겠습니까?",  
213 - "delete-dashboard-text": "대시보드 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
214 - "delete-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 삭제하시겠습니까?",  
215 - "delete-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} } 삭제",  
216 - "delete-dashboards-text": "선택된 대시보드가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
217 - "unassign-dashboard-title": "'{{dashboardTitle}}' 대시보드 할당을 해제하시겠습니까?",  
218 - "unassign-dashboard-text": "대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",  
219 - "unassign-dashboard": "대시보드 할달 취소",  
220 - "unassign-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }의 할당을 취소하시겠습니까?",  
221 - "unassign-dashboards-text": "선택된 대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",  
222 - "select-dashboard": "대시보드 선택",  
223 - "no-dashboards-matching": "'{{dashboard}}'와 일치하는 대시보드가 없습니다.",  
224 - "dashboard-required": "대시보드를 입력하세요.",  
225 - "select-existing": "기존 대시보드 선택",  
226 - "create-new": "대시보드 생성",  
227 - "new-dashboard-title": "새로운 대시보드 타이틀",  
228 - "open-dashboard": "대시보드 열기",  
229 - "set-background": "대시보드 설정",  
230 - "background-color": "배경색",  
231 - "background-image": "배경 이미지",  
232 - "background-size-mode": "배경 사이즈 모드",  
233 - "no-image": "이미지 없음",  
234 - "drop-image": "이곳에 이미지를 끌어다놓거나 이곳을 클릭하여 파일을 선택하고 업로드하세요.",  
235 - "settings": "설정",  
236 - "columns-count": "열 개수",  
237 - "columns-count-required": "열 개수를 입력하세요.",  
238 - "min-columns-count-message": "열 개수를 최소 10 이상 입력하세요.",  
239 - "max-columns-count-message": "열 개수를 최대 100 이하로 입력하세요.",  
240 - "widgets-margins": "위젯 사이 여백 크기",  
241 - "horizontal-margin": "세로 여백",  
242 - "horizontal-margin-required": "세로 여백 값을 입력하세요.",  
243 - "min-horizontal-margin-message": "세로 여백 값을 최소 0 이상 입력하세요.",  
244 - "max-horizontal-margin-message": "세로 여백 값을 최대 50 이하로 입력하세요.",  
245 - "vertical-margin": "가로 여백",  
246 - "vertical-margin-required": "가로 여백 값을 입력하세요.",  
247 - "min-vertical-margin-message": "가로 여백 값을 최소 0 이상 입력하세요.",  
248 - "max-vertical-margin-message": "가로 여백 값을 최대 50 이하로 입력하세요.",  
249 - "display-title": "대시보드 타이틀 표시",  
250 - "title-color": "타이틀 색상",  
251 - "import": "대시보드 가져오기",  
252 - "export": "대시보드 내보내기",  
253 - "export-failed-error": "대시보드 내보내기를 할 수 없습니다.: {error}",  
254 - "create-new-dashboard": "대시보드 생성",  
255 - "dashboard-file": "대시보드 파일",  
256 - "invalid-dashboard-file-error": "대시보드 가져오기를 할 수 없습니다.: 대시보드 데이터 구조가 잘못되었습니다.",  
257 - "dashboard-import-missing-aliases-title": "대시보드 앨리어스를 위해 누락 된 디바이스 선택",  
258 - "create-new-widget": "새로운 위젯 생성",  
259 - "import-widget": "위젯 가져오기",  
260 - "widget-file": "위젯 파일",  
261 - "invalid-widget-file-error": "위젯 가져오기를 할 수 없습니다: 위젯 데이터 구조가 잘못되었습니다.",  
262 - "widget-import-missing-aliases-title": "위젯에서 사용하는 누락 된 디바이스 선택",  
263 - "open-toolbar": "대시보드 툴바 열기",  
264 - "close-toolbar": "툴바 닫기",  
265 - "configuration-error": "구성 오류",  
266 - "alias-resolution-error-title": "대시보드 앨리어스 구성 오류",  
267 - "invalid-aliases-config": "일부 앨리어스 필터와 일치하는 디바이스를 찾을 수 없습니다.<br/>" +  
268 - "이 문제를 해결하려면 관리자에게 문의하십시오.",  
269 - "select-devices": "디바이스 선택",  
270 - "assignedToCustomer": "커스터머에 할당됨"  
271 - },  
272 - "datakey": {  
273 - "settings": "설정",  
274 - "advanced": "고급",  
275 - "label": "Label",  
276 - "color": "색상",  
277 - "data-generation-func": "데이터 생성 기능",  
278 - "use-data-post-processing-func": "데이터 후처리 기능 사용",  
279 - "configuration": "데이터 key 구성",  
280 - "timeseries": "Timeseries",  
281 - "attributes": "Attributes",  
282 - "timeseries-required": "디바이스 timeseries 를 입력하세요.",  
283 - "timeseries-or-attributes-required": "디바이스 timeseries/attributes 를 입력하세요.",  
284 - "function-types": "함수 유형",  
285 - "function-types-required": "함수 유형을 입력하세요."  
286 - },  
287 - "datasource": {  
288 - "type": "데이터소스 유형",  
289 - "add-datasource-prompt": "데이터소스를 추가하세요."  
290 - },  
291 - "details": {  
292 - "edit-mode": "편집 모드",  
293 - "toggle-edit-mode": "편집 모드 전환"  
294 - },  
295 - "device": {  
296 - "device": "디바이스",  
297 - "device-required": "디바이스를 입력하세요.",  
298 - "devices": "디바이스",  
299 - "management": "디바이스 관리",  
300 - "view-devices": "디바이스 보기",  
301 - "device-alias": "디바이스 앨리어스",  
302 - "aliases": "디바이스 앨리어스",  
303 - "no-alias-matching": "'{{alias}}' 를 찾을 수 없습니다.",  
304 - "no-aliases-found": "앨리어스가 없습니다.",  
305 - "no-key-matching": "'{{key}}' 를 찾을 수 없습니다.",  
306 - "no-keys-found": "Key가 없습니다.",  
307 - "create-new-alias": "새로 만들기!",  
308 - "create-new-key": "새로 만들기!",  
309 - "duplicate-alias-error": "중복된 '{{alias}}' 앨리어스가 있습니다.<br> 디바이스 앨리어스는 대시보드 내에서 고유해야 합니다.",  
310 - "configure-alias": "'{{alias}}' 앨리어스 구성",  
311 - "no-devices-matching": "'{{device}}'와 일치하는 디바이스를 찾을 수 없습니다.",  
312 - "alias": "앨리어스",  
313 - "alias-required": "디바이스 앨리어스를 입력하세요.",  
314 - "remove-alias": "디바이스 앨리어스 삭제",  
315 - "add-alias": "디바이스 앨리어스 추가",  
316 - "name-starts-with": "시작되는 이름",  
317 - "device-list": "디바이스 리스트",  
318 - "use-device-name-filter": "필터 사용",  
319 - "device-list-empty": "선택된 디바이스가 없습니다.",  
320 - "device-name-filter-required": "디바이스 필터 이름을 입력하세요.",  
321 - "device-name-filter-no-device-matched": "'{{device}}' 로 시작되는 디바이스를 찾을 수 없습니다.",  
322 - "add": "디바이스 추가",  
323 - "assign-to-customer": "커스터머에게 할당",  
324 - "assign-device-to-customer": "디바이스를 커스터머에게 할당",  
325 - "assign-device-to-customer-text": "고객에게 할당할 디바이스를 선택하십시오.",  
326 - "no-devices-text": "디바이스 없음",  
327 - "assign-to-customer-text": "디바이스를 할당할 커스터머를 선택하세요.",  
328 - "device-details": "디바이스 상세정보",  
329 - "add-device-text": "디바이스 추가",  
330 - "credentials": "크리덴셜",  
331 - "manage-credentials": "크리덴셜 관리",  
332 - "delete": "디바이스 삭제",  
333 - "assign-devices": "디바이스 할당",  
334 - "assign-devices-text": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커서터머에 할당",  
335 - "delete-devices": "디바이스 삭제",  
336 - "unassign-from-customer": "커스터머 할당 해제",  
337 - "unassign-devices": "디바이스 할당 취소",  
338 - "unassign-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커스터머에게서 할당 해제",  
339 - "assign-new-device": "새로운 디바이스 할당",  
340 - "view-credentials": "크리덴셜 보기",  
341 - "delete-device-title": "'{{deviceName}}' 디바이스를 삭제하시겠습니까?",  
342 - "delete-device-text": "디바이스 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
343 - "delete-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 삭제하시겠습니까?",  
344 - "delete-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} } 삭제",  
345 - "delete-devices-text": "선택된 디바이스가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
346 - "unassign-device-title": "'{{deviceName}}' 디바이스 할당을 해제하시겠습니까?",  
347 - "unassign-device-text": "디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",  
348 - "unassign-device": "디바이스 할당 취소",  
349 - "unassign-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }의 할당을 해제하시겠습니까??",  
350 - "unassign-devices-text": "선택된 디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",  
351 - "device-credentials": "디바이스 크리덴셜",  
352 - "credentials-type": "크리덴셜 타입",  
353 - "access-token": "억세스 토큰",  
354 - "access-token-required": "액세스 토큰을 입력하세요.",  
355 - "access-token-invalid": "액세스 토큰 길이는 1 - 20 자 여야합니다.",  
356 - "rsa-key": "RSA public key",  
357 - "rsa-key-required": "RSA public key 를 입력하세요.",  
358 - "secret": "시크릿",  
359 - "secret-required": "시크릿을 입력하세요.",  
360 - "name": "이름",  
361 - "name-required": "이름을 입력하세요.",  
362 - "description": "설명",  
363 - "events": "이벤트",  
364 - "details": "상세",  
365 - "copyId": "디바이스 아이디 복사",  
366 - "copyAccessToken": "억세스 토큰 복사",  
367 - "idCopiedMessage": "디바이스 아이디가 클립보드에 복사되었습니다.",  
368 - "accessTokenCopiedMessage": "디바이스 억세스 토큰이 클립보드에 복사되었습니다.",  
369 - "assignedToCustomer": "커스터머에 할당됨",  
370 - "unable-delete-device-alias-title": "디바이스 앨리어스를 삭제할 수 없습니다.",  
371 - "unable-delete-device-alias-text": "'{{deviceAlias}}' 디바이스 앨리어스를 삭제할 수 없습니다. 다음 위젯에서 사용하고 있습니다.<br/>{{widgetsList}}",  
372 - "is-gateway": "게이트웨이 여부"  
373 - },  
374 - "dialog": {  
375 - "close": "다이얼로그 닫기"  
376 - },  
377 - "error": {  
378 - "unable-to-connect": "서버에 연결할 수 없습니다! 인터넷 연결을 확인하십시오.",  
379 - "unhandled-error-code": "처리되지 않은 오류 코드: {{errorCode}}",  
380 - "unknown-error": "알 수 없는 오류"  
381 - },  
382 - "event": {  
383 - "event-type": "이벤트 타입",  
384 - "type-alarm": "알람",  
385 - "type-error": "에러",  
386 - "type-lc-event": "주기적 이벤트",  
387 - "type-stats": "통계",  
388 - "no-events-prompt": "이벤트 없음",  
389 - "error": "에러",  
390 - "alarm": "알람",  
391 - "event-time": "이벤트 발생 시간",  
392 - "server": "서버",  
393 - "body": "Body",  
394 - "method": "Method",  
395 - "event": "이벤트",  
396 - "status": "상태",  
397 - "success": "성공",  
398 - "failed": "실패",  
399 - "messages-processed": "처리된 메시지",  
400 - "errors-occurred": "오류가 발생했습니다"  
401 - },  
402 - "fullscreen": {  
403 - "expand": "전체화면으로 확장",  
404 - "exit": "전체화면 종료",  
405 - "toggle": "전체화면 모드 전환",  
406 - "fullscreen": "전체화면"  
407 - },  
408 - "function": {  
409 - "function": "기능"  
410 - },  
411 - "grid": {  
412 - "delete-item-title": "이 항목을 삭제 하시겠습니까?",  
413 - "delete-item-text": "항목과 모든 관련 데이터를 복구 할 수 없으므로 주의하십시오.",  
414 - "delete-items-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} }를 삭제하시겠습니까?",  
415 - "delete-items-action-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} } 삭제",  
416 - "delete-items-text": "선택한 모든 아이템이 제거되고 관련된 모든 데이터는 복구 할 수 없으므로 주의하십시오.",  
417 - "add-item-text": "새로운 아이템 추가",  
418 - "no-items-text": "아이템이 없습니다.",  
419 - "item-details": "아이템 상세",  
420 - "delete-item": "아이템 삭제",  
421 - "delete-items": "아이템 삭제",  
422 - "scroll-to-top": "스크롤 맨 위로"  
423 - },  
424 - "help": {  
425 - "goto-help-page": "도움"  
426 - },  
427 - "home": {  
428 - "home": "홈",  
429 - "profile": "프로파일",  
430 - "logout": "로그아웃",  
431 - "menu": "메뉴",  
432 - "avatar": "Avatar",  
433 - "open-user-menu": "사용자 메뉴 열기"  
434 - },  
435 - "import": {  
436 - "no-file": "선택된 파일이 없습니다.",  
437 - "drop-file": "JSON 파일을 끌어다 놓거나 클릭하여 업로드 할 파일을 선택하십시오."  
438 - },  
439 - "item": {  
440 - "selected": "선택됨"  
441 - },  
442 - "js-func": {  
443 - "no-return-error": "함수는 값을 반환해야 합니다!",  
444 - "return-type-mismatch": "함수는 '{{type}}' 유형의 값을 반환해야 합니다!"  
445 - },  
446 - "legend": {  
447 - "position": "범례 위치",  
448 - "show-max": "최대값 표시",  
449 - "show-min": "최소값 표시",  
450 - "show-avg": "평균값 표시",  
451 - "show-total": "총합 표시",  
452 - "settings": "범례 설정",  
453 - "min": "최소",  
454 - "max": "최대",  
455 - "avg": "평균",  
456 - "total": "합계"  
457 - },  
458 - "login": {  
459 - "login": "로그인",  
460 - "request-password-reset": "비밀번호 재설정",  
461 - "reset-password": "비밀번호 재설정",  
462 - "create-password": "비밀번호 생성",  
463 - "passwords-mismatch-error": "입력된 비밀번호는 같아야 합니다!",  
464 - "password-again": "비밀번호 확인",  
465 - "sign-in": "로그인",  
466 - "username": "사용자명 (이메일)",  
467 - "remember-me": "아이디 저장",  
468 - "forgot-password": "비밀번호찾기",  
469 - "password-reset": "비밀번호 재설정",  
470 - "new-password": "새 비밀번호",  
471 - "new-password-again": "새 비밀번호 확인",  
472 - "password-link-sent-message": "비밀번호 재설정 링크가 성공적으로 전송되었습니다!",  
473 - "email": "이메일"  
474 - },  
475 - "plugin": {  
476 - "plugins": "플러그인",  
477 - "delete": "플러그인 삭제",  
478 - "activate": "플러그인 활성화",  
479 - "suspend": "플러그인 비활성화",  
480 - "active": "활성화",  
481 - "suspended": "비활성화",  
482 - "name": "이름",  
483 - "name-required": "이름을 입력하세요.",  
484 - "description": "설명",  
485 - "add": "플러그인 추가",  
486 - "delete-plugin-title": "'{{pluginName}}' 플러그인을 삭제하시겠습니까?",  
487 - "delete-plugin-text": "플러그인과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
488 - "delete-plugins-title": "{ count, select, 1 {플러그인 1개} other {플러그인 #개} }를 삭제하시겠습니까?",  
489 - "delete-plugins-action-title": "{ count, select, 1 {플러그인 1개} other {플러그인 #개} } 삭제",  
490 - "delete-plugins-text": "선택된 플러그인이 삭제되고 관련된 모든 데이터가 없어지므로 주의하십시오.",  
491 - "add-plugin-text": "새로운 플러그인 추가",  
492 - "no-plugins-text": "플러그인이 없습니다.",  
493 - "plugin-details": "플러그인 상세정보",  
494 - "api-token": "API 토큰",  
495 - "api-token-required": "API 토큰을 입력하세요.",  
496 - "type": "플러그인 종류",  
497 - "type-required": "플러그인 종류를 선택해주세요.",  
498 - "configuration": "플러그인 구성",  
499 - "system": "시스템",  
500 - "select-plugin": "플러그인 선택",  
501 - "plugin": "플러그인",  
502 - "no-plugins-matching": "'{{plugin}}'과 일치하는 플러그인을 찾을 수 없습니다.",  
503 - "plugin-required": "플러그인을 입력하세요.",  
504 - "plugin-require-match": "기존의 플러그인을 선택해주세요.",  
505 - "events": "이벤트",  
506 - "details": "상세",  
507 - "import": "플러그인 가져오기",  
508 - "export": "플러그인 내보내기",  
509 - "export-failed-error": "플러그인을 내보내기 할 수 없습니다.: {{error}}",  
510 - "create-new-plugin": "새로운 플러그인 생성",  
511 - "plugin-file": "플러그인 파일",  
512 - "invalid-plugin-file-error": "플러그인을 가져오기 할 수 없습니다.: 잘못된 플러그인 데이터 구조입니다."  
513 - },  
514 - "position": {  
515 - "top": "상단",  
516 - "bottom": "하단",  
517 - "left": "왼쪽",  
518 - "right": "오른쪽"  
519 - },  
520 - "profile": {  
521 - "profile": "프로파일",  
522 - "change-password": "비밀번호 변경",  
523 - "current-password": "현재 비밀번호"  
524 - },  
525 - "rule": {  
526 - "rules": "규칙",  
527 - "delete": "규칙 삭제",  
528 - "activate": "규칙 활성화",  
529 - "suspend": "규칙 비활성화",  
530 - "active": "활성화",  
531 - "suspended": "비활성화",  
532 - "name": "이름",  
533 - "name-required": "이름을 입력하세요.",  
534 - "description": "설명",  
535 - "add": "규칙 추가",  
536 - "delete-rule-title": "'{{ruleName}}' 규칙을 삭제하시겠습니까?",  
537 - "delete-rule-text": "규칙과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
538 - "delete-rules-title": "{ count, select, 1 {규칙 1개} other {규칙 #개} }를 삭제하시겠습니까?",  
539 - "delete-rules-action-title": "{ count, select, 1 {규칙 1개} other {규칙 #개} } 삭제",  
540 - "delete-rules-text": "선택된 규칙이 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
541 - "add-rule-text": "규칙 추가",  
542 - "no-rules-text": "규칙이 없습니다.",  
543 - "rule-details": "규칙 상세정보",  
544 - "filters": "필터",  
545 - "filter": "필터",  
546 - "add-filter-prompt": "필터를 추가해 주세요.",  
547 - "remove-filter": "필터 삭제",  
548 - "add-filter": "필터 추가",  
549 - "filter-name": "필터 이름",  
550 - "filter-type": "필터 종류",  
551 - "edit-filter": "필터 수정",  
552 - "view-filter": "필터 보기",  
553 - "component-name": "이름",  
554 - "component-name-required": "이름을 입력하세요.",  
555 - "component-type": "종류",  
556 - "component-type-required": "타입을 입력하세요.",  
557 - "processor": "프로세서",  
558 - "no-processor-configured": "프로세서가 구성되지 않았습니다.",  
559 - "create-processor": "프로세서 생성",  
560 - "processor-name": "프로세서 이름",  
561 - "processor-type": "프로세서 종류",  
562 - "plugin-action": "플러그인 액션",  
563 - "action-name": "액션 이름",  
564 - "action-type": "액션 종류",  
565 - "create-action-prompt": "액션을 만들어 주세요",  
566 - "create-action": "액션 생성",  
567 - "details": "상세",  
568 - "events": "이벤트",  
569 - "system": "시스템",  
570 - "import": "규칙 가져오기",  
571 - "export": "규칙 내보내기",  
572 - "export-failed-error": "규칙을 내보내기 할 수 없습니다.: {{error}}",  
573 - "create-new-rule": "새로운 규칙 생성",  
574 - "rule-file": "규칙 파일",  
575 - "invalid-rule-file-error": "규칙을 가져오기 할 수 없습니다.: 잘못된 데이터 구조입니다."  
576 - },  
577 - "rule-plugin": {  
578 - "management": "규칙 및 플러그인 관리"  
579 - },  
580 - "tenant": {  
581 - "tenants": "테넌트",  
582 - "management": "테넌트 관리",  
583 - "add": "테넌트 추가",  
584 - "admins": "Admins",  
585 - "manage-tenant-admins": "테넌트 관리자 관리",  
586 - "delete": "테넌트 삭제",  
587 - "add-tenant-text": "테넌트 추가",  
588 - "no-tenants-text": "테넌트가 없습니다.",  
589 - "tenant-details": "테넌트 상세정보",  
590 - "delete-tenant-title": "'{{tenantTitle}}' 테넌트를 삭제하시겠습니까?",  
591 - "delete-tenant-text": "테넌트와 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",  
592 - "delete-tenants-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} }를 삭제하시겠습니까?",  
593 - "delete-tenants-action-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} } 삭제",  
594 - "delete-tenants-text": "선택된 테넌트가 삭제되고 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",  
595 - "title": "타이틀",  
596 - "title-required": "타이틀을 입력하세요.",  
597 - "description": "설명"  
598 - },  
599 - "timeinterval": {  
600 - "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",  
601 - "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",  
602 - "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",  
603 - "days-interval": "{ days, select, 1 {1 day} other {# days} }",  
604 - "days": "Days",  
605 - "hours": "Hours",  
606 - "minutes": "Minutes",  
607 - "seconds": "Seconds",  
608 - "advanced": "고급"  
609 - },  
610 - "timewindow": {  
611 - "days": "{ days, select, 1 { day } other {# days } }",  
612 - "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",  
613 - "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",  
614 - "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",  
615 - "realtime": "Realtime",  
616 - "history": "History",  
617 - "last-prefix": "last",  
618 - "period": "from {{ startTime }} to {{ endTime }}",  
619 - "edit": "타임윈도우 편집",  
620 - "date-range": "날짜 범위",  
621 - "last": "Last",  
622 - "time-period": "기간"  
623 - },  
624 - "user": {  
625 - "users": "사용자",  
626 - "customer-users": "커스터머 사용자",  
627 - "tenant-admins": "테넌트 관리자",  
628 - "sys-admin": "시스템 관리자",  
629 - "tenant-admin": "테넌트 관리자",  
630 - "customer": "커스터머",  
631 - "anonymous": "Anonymous",  
632 - "add": "사용자 추가",  
633 - "delete": "사용자 삭제",  
634 - "add-user-text": "새로운 사용자 추가",  
635 - "no-users-text": "사용자가 없습니다.",  
636 - "user-details": "사용자 상세정보",  
637 - "delete-user-title": "'{{userEmail}}' 사용자를 삭제하시겠습니까?",  
638 - "delete-user-text": "사용자와 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
639 - "delete-users-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} }을 삭제하시겠니까?",  
640 - "delete-users-action-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} } 삭제",  
641 - "delete-users-text": "선택된 사용자가 삭제된고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
642 - "activation-email-sent-message": "활성화 이메일을 보냈습니다!",  
643 - "resend-activation": "활성화 재전송",  
644 - "email": "Email",  
645 - "email-required": "Email을 입력하세요.",  
646 - "first-name": "이름",  
647 - "last-name": "성",  
648 - "description": "설명",  
649 - "default-dashboard": "기본 대시보드",  
650 - "always-fullscreen": "항상 전체화면"  
651 - },  
652 - "value": {  
653 - "type": "Value type",  
654 - "string": "String",  
655 - "string-value": "String value",  
656 - "integer": "Integer",  
657 - "integer-value": "Integer value",  
658 - "invalid-integer-value": "Invalid integer value",  
659 - "double": "Double",  
660 - "double-value": "Double value",  
661 - "boolean": "Boolean",  
662 - "boolean-value": "Boolean value",  
663 - "false": "False",  
664 - "true": "True"  
665 - },  
666 - "widget": {  
667 - "widget-library": "위젯 저장소",  
668 - "widget-bundle": "위젯 번들",  
669 - "select-widgets-bundle": "위젯 번들 선택",  
670 - "management": "위젯 관리",  
671 - "editor": "위젯 편집기",  
672 - "widget-type-not-found": "위젯 구성을 로드하는 중 문제가 발생했습니다.<br>연결된 위젯 타입이 삭제되었습니다.",  
673 - "widget-type-load-error": "다음과 같은 오류로 인해 위젯이로드되지 않았습니다:",  
674 - "remove": "위젯 삭제",  
675 - "edit": "위젯 수정",  
676 - "remove-widget-title": "'{{widgetTitle}}' 위젯을 삭제하시겠습니까?",  
677 - "remove-widget-text": "위젯과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
678 - "timeseries": "Time series",  
679 - "latest-values": "Latest values",  
680 - "rpc": "Control 위젯",  
681 - "static": "Static 위젯",  
682 - "select-widget-type": "위젯 타입 선택",  
683 - "missing-widget-title-error": "위젯 타이틀을 입력하세요!",  
684 - "widget-saved": "위젯이 저장되었습니다.",  
685 - "unable-to-save-widget-error": "위젯을 저장할 수 없습니다! 위젯에 오류가 있습니다!",  
686 - "save": "위젯 저장",  
687 - "saveAs": "다른 이름으로 위젯 저장",  
688 - "save-widget-type-as": "다른 이름으로 위젯 타입 저장",  
689 - "save-widget-type-as-text": "새로운 위젯 이름과 위젯 번들을 선택하세요.",  
690 - "toggle-fullscreen": "전체화면 전환",  
691 - "run": "위젯 실행",  
692 - "title": "위젯 타이틀",  
693 - "title-required": "위젯 타이틀을 입력하세요.",  
694 - "type": "위젯 타입",  
695 - "resources": "리소스",  
696 - "resource-url": "JavaScript/CSS URI",  
697 - "remove-resource": "리소스 삭제",  
698 - "add-resource": "리소스 추가",  
699 - "html": "HTML",  
700 - "tidy": "Tidy",  
701 - "css": "CSS",  
702 - "settings-schema": "스키마 설정",  
703 - "datakey-settings-schema": "데이터 키 설정 스키마",  
704 - "javascript": "Javascript",  
705 - "remove-widget-type-title": "'{{widgetName}}' 위젯 타입을 삭제하시겠습니까?",  
706 - "remove-widget-type-text": "위젯 타입과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
707 - "remove-widget-type": "위젯 타입 삭제",  
708 - "add-widget-type": "새로운 위젯 타입 추가",  
709 - "widget-type-load-failed-error": "위젯 타입을 로드하지 못했습니다!",  
710 - "widget-template-load-failed-error": "위젯 템플릿을 로드하지 못했습니다!",  
711 - "add": "위젯 추가",  
712 - "undo": "위젯 변경사항 취소",  
713 - "export": "위젯 내보내기"  
714 - },  
715 - "widgets-bundle": {  
716 - "current": "현재 번들",  
717 - "widgets-bundles": "위젯 번들",  
718 - "add": "위젯 번들 추가",  
719 - "delete": "위젯 번들 삭제",  
720 - "title": "타이틀",  
721 - "title-required": "타이틀을 입력하세요.",  
722 - "add-widgets-bundle-text": "위젯 번들 추가",  
723 - "no-widgets-bundles-text": "위젯 번들이 없습니다.",  
724 - "empty": "위젯 번들이 비어있습니다.",  
725 - "details": "상세",  
726 - "widgets-bundle-details": "위젯 번들 상세정보",  
727 - "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' 위젯 번들을 삭제하시겠습니까?",  
728 - "delete-widgets-bundle-text": "위젯 번들과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
729 - "delete-widgets-bundles-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} }를 삭제하시겠습니까?",  
730 - "delete-widgets-bundles-action-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} } 삭제",  
731 - "delete-widgets-bundles-text": "선택된 위젯 번들이 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",  
732 - "no-widgets-bundles-matching": "'{{widgetsBundle}}' 와(과) 일치하는 위젯 번들을 찾을 수 없습니다.",  
733 - "widgets-bundle-required": "위젯 번들을 입력하세요.",  
734 - "system": "시스템",  
735 - "import": "위젯 번들 가져오기",  
736 - "export": "위젯 번들 내보내기",  
737 - "export-failed-error": "위젯 번들을 내보내기 할 수 없습니다.: {{error}}",  
738 - "create-new-widgets-bundle": "새로운 위젯 번들 생성",  
739 - "widgets-bundle-file": "위젯 번들 파일",  
740 - "invalid-widgets-bundle-file-error": "위젯 번들을 가져오기 할 수 없습니다.: 잘못된 위젯 번들 데이터 구조입니다."  
741 - },  
742 - "widget-config": {  
743 - "data": "데이터",  
744 - "settings": "설정",  
745 - "advanced": "고급",  
746 - "title": "타이틀",  
747 - "general-settings": "일반 설정",  
748 - "display-title": "타이틀 표시",  
749 - "drop-shadow": "그림자",  
750 - "enable-fullscreen": "전체화면 사용 ",  
751 - "background-color": "배경 색",  
752 - "text-color": "글자 색",  
753 - "padding": "패딩",  
754 - "title-style": "타이틀 스타일",  
755 - "mobile-mode-settings": "모바일 모드 설정",  
756 - "order": "순서",  
757 - "height": "높이",  
758 - "units": "값 옆에 표시할 특수 기호",  
759 - "decimals": "소수점 이하 자릿수",  
760 - "timewindow": "타임윈도우",  
761 - "use-dashboard-timewindow": "대시보드 타임윈도우",  
762 - "display-legend": "범례 표시",  
763 - "datasources": "데이터소스",  
764 - "datasource-type": "유형",  
765 - "datasource-parameters": "파라미터",  
766 - "remove-datasource": "데이터소스 삭제",  
767 - "add-datasource": "데이터소스 추가",  
768 - "target-device": "대상 디바이스"  
769 - },  
770 - "widget-type": {  
771 - "import": "위젯 타입 가져오기",  
772 - "export": "위젯 타입 내보내기",  
773 - "export-failed-error": "위젯 타입을 내보내기 할 수 없습니다.: {{error}}",  
774 - "create-new-widget-type": "새로운 위젯 타입 생성",  
775 - "widget-type-file": "위젯 타입 파일",  
776 - "invalid-widget-type-file-error": "위젯 타입을 가져오기 할 수 없습니다.: 잘못된 위젯 타입 데이터 구조입니다."  
777 - }  
778 - } 17 +export default function addLocaleKorean(locales) {
  18 + var ko_KR = {
  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": "제한시간 (msec)",
  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": "Key",
  109 + "key-required": "속성 key를 입력하세요.",
  110 + "value": "Value",
  111 + "value-required": "속성 value를 입력하세요.",
  112 + "delete-attributes-title": "{ count, select, 1 {속성} other {여러 속성들을} } 삭제하시겠습니까??",
  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개} other {속성 #개} } 선택됨",
  123 + "selected-telemetry": "{ count, select, 1 {최근 데이터 1개} other {최근 데이터 #개} } 선택됨"
  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": "상세주소",
  138 + "phone": "전화번호",
  139 + "email": "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개} other {커스터머 #개} }를 삭제하시겠습니까?",
  166 + "delete-customers-action-title": "{ count, select, 1 {커스터머 1개} other {커스터머 #개} } 삭제",
  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개} other {대시보드 #개} }를 커스터머 할당",
  207 + "delete-dashboards": "대시보드 삭제",
  208 + "unassign-dashboards": "대시보드 할당 취소",
  209 + "unassign-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 커스터머 할당 취소",
  210 + "delete-dashboard-title": "'{{dashboardTitle}}' 대시보드를 삭제하시겠습니까?",
  211 + "delete-dashboard-text": "대시보드 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  212 + "delete-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }를 삭제하시겠습니까?",
  213 + "delete-dashboards-action-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} } 삭제",
  214 + "delete-dashboards-text": "선택된 대시보드가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  215 + "unassign-dashboard-title": "'{{dashboardTitle}}' 대시보드 할당을 해제하시겠습니까?",
  216 + "unassign-dashboard-text": "대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
  217 + "unassign-dashboard": "대시보드 할달 취소",
  218 + "unassign-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }의 할당을 취소하시겠습니까?",
  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": "열 개수를 최대 100 이하로 입력하세요.",
  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 + "select-devices": "디바이스 선택",
  267 + "assignedToCustomer": "커스터머에 할당됨"
  268 + },
  269 + "datakey": {
  270 + "settings": "설정",
  271 + "advanced": "고급",
  272 + "label": "Label",
  273 + "color": "색상",
  274 + "data-generation-func": "데이터 생성 기능",
  275 + "use-data-post-processing-func": "데이터 후처리 기능 사용",
  276 + "configuration": "데이터 key 구성",
  277 + "timeseries": "Timeseries",
  278 + "attributes": "Attributes",
  279 + "timeseries-required": "디바이스 timeseries 를 입력하세요.",
  280 + "timeseries-or-attributes-required": "디바이스 timeseries/attributes 를 입력하세요.",
  281 + "function-types": "함수 유형",
  282 + "function-types-required": "함수 유형을 입력하세요."
  283 + },
  284 + "datasource": {
  285 + "type": "데이터소스 유형",
  286 + "add-datasource-prompt": "데이터소스를 추가하세요."
  287 + },
  288 + "details": {
  289 + "edit-mode": "편집 모드",
  290 + "toggle-edit-mode": "편집 모드 전환"
  291 + },
  292 + "device": {
  293 + "device": "디바이스",
  294 + "device-required": "디바이스를 입력하세요.",
  295 + "devices": "디바이스",
  296 + "management": "디바이스 관리",
  297 + "view-devices": "디바이스 보기",
  298 + "device-alias": "디바이스 앨리어스",
  299 + "aliases": "디바이스 앨리어스",
  300 + "no-alias-matching": "'{{alias}}' 를 찾을 수 없습니다.",
  301 + "no-aliases-found": "앨리어스가 없습니다.",
  302 + "no-key-matching": "'{{key}}' 를 찾을 수 없습니다.",
  303 + "no-keys-found": "Key가 없습니다.",
  304 + "create-new-alias": "새로 만들기!",
  305 + "create-new-key": "새로 만들기!",
  306 + "duplicate-alias-error": "중복된 '{{alias}}' 앨리어스가 있습니다.<br> 디바이스 앨리어스는 대시보드 내에서 고유해야 합니다.",
  307 + "configure-alias": "'{{alias}}' 앨리어스 구성",
  308 + "no-devices-matching": "'{{device}}'와 일치하는 디바이스를 찾을 수 없습니다.",
  309 + "alias": "앨리어스",
  310 + "alias-required": "디바이스 앨리어스를 입력하세요.",
  311 + "remove-alias": "디바이스 앨리어스 삭제",
  312 + "add-alias": "디바이스 앨리어스 추가",
  313 + "name-starts-with": "시작되는 이름",
  314 + "device-list": "디바이스 리스트",
  315 + "use-device-name-filter": "필터 사용",
  316 + "device-list-empty": "선택된 디바이스가 없습니다.",
  317 + "device-name-filter-required": "디바이스 필터 이름을 입력하세요.",
  318 + "device-name-filter-no-device-matched": "'{{device}}' 로 시작되는 디바이스를 찾을 수 없습니다.",
  319 + "add": "디바이스 추가",
  320 + "assign-to-customer": "커스터머에게 할당",
  321 + "assign-device-to-customer": "디바이스를 커스터머에게 할당",
  322 + "assign-device-to-customer-text": "고객에게 할당할 디바이스를 선택하십시오.",
  323 + "no-devices-text": "디바이스 없음",
  324 + "assign-to-customer-text": "디바이스를 할당할 커스터머를 선택하세요.",
  325 + "device-details": "디바이스 상세정보",
  326 + "add-device-text": "디바이스 추가",
  327 + "credentials": "크리덴셜",
  328 + "manage-credentials": "크리덴셜 관리",
  329 + "delete": "디바이스 삭제",
  330 + "assign-devices": "디바이스 할당",
  331 + "assign-devices-text": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커서터머에 할당",
  332 + "delete-devices": "디바이스 삭제",
  333 + "unassign-from-customer": "커스터머 할당 해제",
  334 + "unassign-devices": "디바이스 할당 취소",
  335 + "unassign-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 커스터머에게서 할당 해제",
  336 + "assign-new-device": "새로운 디바이스 할당",
  337 + "view-credentials": "크리덴셜 보기",
  338 + "delete-device-title": "'{{deviceName}}' 디바이스를 삭제하시겠습니까?",
  339 + "delete-device-text": "디바이스 및 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  340 + "delete-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }를 삭제하시겠습니까?",
  341 + "delete-devices-action-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} } 삭제",
  342 + "delete-devices-text": "선택된 디바이스가 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  343 + "unassign-device-title": "'{{deviceName}}' 디바이스 할당을 해제하시겠습니까?",
  344 + "unassign-device-text": "디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
  345 + "unassign-device": "디바이스 할당 취소",
  346 + "unassign-devices-title": "{ count, select, 1 {디바이스 1개} other {디바이스 #개} }의 할당을 해제하시겠습니까??",
  347 + "unassign-devices-text": "선택된 디바이스가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.",
  348 + "device-credentials": "디바이스 크리덴셜",
  349 + "credentials-type": "크리덴셜 타입",
  350 + "access-token": "억세스 토큰",
  351 + "access-token-required": "액세스 토큰을 입력하세요.",
  352 + "access-token-invalid": "액세스 토큰 길이는 1 - 20 자 여야합니다.",
  353 + "rsa-key": "RSA public key",
  354 + "rsa-key-required": "RSA public key 를 입력하세요.",
  355 + "secret": "시크릿",
  356 + "secret-required": "시크릿을 입력하세요.",
  357 + "name": "이름",
  358 + "name-required": "이름을 입력하세요.",
  359 + "description": "설명",
  360 + "events": "이벤트",
  361 + "details": "상세",
  362 + "copyId": "디바이스 아이디 복사",
  363 + "copyAccessToken": "억세스 토큰 복사",
  364 + "idCopiedMessage": "디바이스 아이디가 클립보드에 복사되었습니다.",
  365 + "accessTokenCopiedMessage": "디바이스 억세스 토큰이 클립보드에 복사되었습니다.",
  366 + "assignedToCustomer": "커스터머에 할당됨",
  367 + "unable-delete-device-alias-title": "디바이스 앨리어스를 삭제할 수 없습니다.",
  368 + "unable-delete-device-alias-text": "'{{deviceAlias}}' 디바이스 앨리어스를 삭제할 수 없습니다. 다음 위젯에서 사용하고 있습니다.<br/>{{widgetsList}}",
  369 + "is-gateway": "게이트웨이 여부"
  370 + },
  371 + "dialog": {
  372 + "close": "다이얼로그 닫기"
  373 + },
  374 + "error": {
  375 + "unable-to-connect": "서버에 연결할 수 없습니다! 인터넷 연결을 확인하십시오.",
  376 + "unhandled-error-code": "처리되지 않은 오류 코드: {{errorCode}}",
  377 + "unknown-error": "알 수 없는 오류"
  378 + },
  379 + "event": {
  380 + "event-type": "이벤트 타입",
  381 + "type-alarm": "알람",
  382 + "type-error": "에러",
  383 + "type-lc-event": "주기적 이벤트",
  384 + "type-stats": "통계",
  385 + "no-events-prompt": "이벤트 없음",
  386 + "error": "에러",
  387 + "alarm": "알람",
  388 + "event-time": "이벤트 발생 시간",
  389 + "server": "서버",
  390 + "body": "Body",
  391 + "method": "Method",
  392 + "event": "이벤트",
  393 + "status": "상태",
  394 + "success": "성공",
  395 + "failed": "실패",
  396 + "messages-processed": "처리된 메시지",
  397 + "errors-occurred": "오류가 발생했습니다"
  398 + },
  399 + "fullscreen": {
  400 + "expand": "전체화면으로 확장",
  401 + "exit": "전체화면 종료",
  402 + "toggle": "전체화면 모드 전환",
  403 + "fullscreen": "전체화면"
  404 + },
  405 + "function": {
  406 + "function": "기능"
  407 + },
  408 + "grid": {
  409 + "delete-item-title": "이 항목을 삭제 하시겠습니까?",
  410 + "delete-item-text": "항목과 모든 관련 데이터를 복구 할 수 없으므로 주의하십시오.",
  411 + "delete-items-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} }를 삭제하시겠습니까?",
  412 + "delete-items-action-title": "{ count, select, 1 {아이템 1개} other {아이템 #개} } 삭제",
  413 + "delete-items-text": "선택한 모든 아이템이 제거되고 관련된 모든 데이터는 복구 할 수 없으므로 주의하십시오.",
  414 + "add-item-text": "새로운 아이템 추가",
  415 + "no-items-text": "아이템이 없습니다.",
  416 + "item-details": "아이템 상세",
  417 + "delete-item": "아이템 삭제",
  418 + "delete-items": "아이템 삭제",
  419 + "scroll-to-top": "스크롤 맨 위로"
  420 + },
  421 + "help": {
  422 + "goto-help-page": "도움"
  423 + },
  424 + "home": {
  425 + "home": "홈",
  426 + "profile": "프로파일",
  427 + "logout": "로그아웃",
  428 + "menu": "메뉴",
  429 + "avatar": "Avatar",
  430 + "open-user-menu": "사용자 메뉴 열기"
  431 + },
  432 + "import": {
  433 + "no-file": "선택된 파일이 없습니다.",
  434 + "drop-file": "JSON 파일을 끌어다 놓거나 클릭하여 업로드 할 파일을 선택하십시오."
  435 + },
  436 + "item": {
  437 + "selected": "선택됨"
  438 + },
  439 + "js-func": {
  440 + "no-return-error": "함수는 값을 반환해야 합니다!",
  441 + "return-type-mismatch": "함수는 '{{type}}' 유형의 값을 반환해야 합니다!"
  442 + },
  443 + "legend": {
  444 + "position": "범례 위치",
  445 + "show-max": "최대값 표시",
  446 + "show-min": "최소값 표시",
  447 + "show-avg": "평균값 표시",
  448 + "show-total": "총합 표시",
  449 + "settings": "범례 설정",
  450 + "min": "최소",
  451 + "max": "최대",
  452 + "avg": "평균",
  453 + "total": "합계"
  454 + },
  455 + "login": {
  456 + "login": "로그인",
  457 + "request-password-reset": "비밀번호 재설정",
  458 + "reset-password": "비밀번호 재설정",
  459 + "create-password": "비밀번호 생성",
  460 + "passwords-mismatch-error": "입력된 비밀번호는 같아야 합니다!",
  461 + "password-again": "비밀번호 확인",
  462 + "sign-in": "로그인",
  463 + "username": "사용자명 (이메일)",
  464 + "remember-me": "아이디 저장",
  465 + "forgot-password": "비밀번호찾기",
  466 + "password-reset": "비밀번호 재설정",
  467 + "new-password": "새 비밀번호",
  468 + "new-password-again": "새 비밀번호 확인",
  469 + "password-link-sent-message": "비밀번호 재설정 링크가 성공적으로 전송되었습니다!",
  470 + "email": "이메일"
  471 + },
  472 + "plugin": {
  473 + "plugins": "플러그인",
  474 + "delete": "플러그인 삭제",
  475 + "activate": "플러그인 활성화",
  476 + "suspend": "플러그인 비활성화",
  477 + "active": "활성화",
  478 + "suspended": "비활성화",
  479 + "name": "이름",
  480 + "name-required": "이름을 입력하세요.",
  481 + "description": "설명",
  482 + "add": "플러그인 추가",
  483 + "delete-plugin-title": "'{{pluginName}}' 플러그인을 삭제하시겠습니까?",
  484 + "delete-plugin-text": "플러그인과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  485 + "delete-plugins-title": "{ count, select, 1 {플러그인 1개} other {플러그인 #개} }를 삭제하시겠습니까?",
  486 + "delete-plugins-action-title": "{ count, select, 1 {플러그인 1개} other {플러그인 #개} } 삭제",
  487 + "delete-plugins-text": "선택된 플러그인이 삭제되고 관련된 모든 데이터가 없어지므로 주의하십시오.",
  488 + "add-plugin-text": "새로운 플러그인 추가",
  489 + "no-plugins-text": "플러그인이 없습니다.",
  490 + "plugin-details": "플러그인 상세정보",
  491 + "api-token": "API 토큰",
  492 + "api-token-required": "API 토큰을 입력하세요.",
  493 + "type": "플러그인 종류",
  494 + "type-required": "플러그인 종류를 선택해주세요.",
  495 + "configuration": "플러그인 구성",
  496 + "system": "시스템",
  497 + "select-plugin": "플러그인 선택",
  498 + "plugin": "플러그인",
  499 + "no-plugins-matching": "'{{plugin}}'과 일치하는 플러그인을 찾을 수 없습니다.",
  500 + "plugin-required": "플러그인을 입력하세요.",
  501 + "plugin-require-match": "기존의 플러그인을 선택해주세요.",
  502 + "events": "이벤트",
  503 + "details": "상세",
  504 + "import": "플러그인 가져오기",
  505 + "export": "플러그인 내보내기",
  506 + "export-failed-error": "플러그인을 내보내기 할 수 없습니다.: {{error}}",
  507 + "create-new-plugin": "새로운 플러그인 생성",
  508 + "plugin-file": "플러그인 파일",
  509 + "invalid-plugin-file-error": "플러그인을 가져오기 할 수 없습니다.: 잘못된 플러그인 데이터 구조입니다."
  510 + },
  511 + "position": {
  512 + "top": "상단",
  513 + "bottom": "하단",
  514 + "left": "왼쪽",
  515 + "right": "오른쪽"
  516 + },
  517 + "profile": {
  518 + "profile": "프로파일",
  519 + "change-password": "비밀번호 변경",
  520 + "current-password": "현재 비밀번호"
  521 + },
  522 + "rule": {
  523 + "rules": "규칙",
  524 + "delete": "규칙 삭제",
  525 + "activate": "규칙 활성화",
  526 + "suspend": "규칙 비활성화",
  527 + "active": "활성화",
  528 + "suspended": "비활성화",
  529 + "name": "이름",
  530 + "name-required": "이름을 입력하세요.",
  531 + "description": "설명",
  532 + "add": "규칙 추가",
  533 + "delete-rule-title": "'{{ruleName}}' 규칙을 삭제하시겠습니까?",
  534 + "delete-rule-text": "규칙과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  535 + "delete-rules-title": "{ count, select, 1 {규칙 1개} other {규칙 #개} }를 삭제하시겠습니까?",
  536 + "delete-rules-action-title": "{ count, select, 1 {규칙 1개} other {규칙 #개} } 삭제",
  537 + "delete-rules-text": "선택된 규칙이 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  538 + "add-rule-text": "규칙 추가",
  539 + "no-rules-text": "규칙이 없습니다.",
  540 + "rule-details": "규칙 상세정보",
  541 + "filters": "필터",
  542 + "filter": "필터",
  543 + "add-filter-prompt": "필터를 추가해 주세요.",
  544 + "remove-filter": "필터 삭제",
  545 + "add-filter": "필터 추가",
  546 + "filter-name": "필터 이름",
  547 + "filter-type": "필터 종류",
  548 + "edit-filter": "필터 수정",
  549 + "view-filter": "필터 보기",
  550 + "component-name": "이름",
  551 + "component-name-required": "이름을 입력하세요.",
  552 + "component-type": "종류",
  553 + "component-type-required": "타입을 입력하세요.",
  554 + "processor": "프로세서",
  555 + "no-processor-configured": "프로세서가 구성되지 않았습니다.",
  556 + "create-processor": "프로세서 생성",
  557 + "processor-name": "프로세서 이름",
  558 + "processor-type": "프로세서 종류",
  559 + "plugin-action": "플러그인 액션",
  560 + "action-name": "액션 이름",
  561 + "action-type": "액션 종류",
  562 + "create-action-prompt": "액션을 만들어 주세요",
  563 + "create-action": "액션 생성",
  564 + "details": "상세",
  565 + "events": "이벤트",
  566 + "system": "시스템",
  567 + "import": "규칙 가져오기",
  568 + "export": "규칙 내보내기",
  569 + "export-failed-error": "규칙을 내보내기 할 수 없습니다.: {{error}}",
  570 + "create-new-rule": "새로운 규칙 생성",
  571 + "rule-file": "규칙 파일",
  572 + "invalid-rule-file-error": "규칙을 가져오기 할 수 없습니다.: 잘못된 데이터 구조입니다."
  573 + },
  574 + "rule-plugin": {
  575 + "management": "규칙 및 플러그인 관리"
  576 + },
  577 + "tenant": {
  578 + "tenants": "테넌트",
  579 + "management": "테넌트 관리",
  580 + "add": "테넌트 추가",
  581 + "admins": "Admins",
  582 + "manage-tenant-admins": "테넌트 관리자 관리",
  583 + "delete": "테넌트 삭제",
  584 + "add-tenant-text": "테넌트 추가",
  585 + "no-tenants-text": "테넌트가 없습니다.",
  586 + "tenant-details": "테넌트 상세정보",
  587 + "delete-tenant-title": "'{{tenantTitle}}' 테넌트를 삭제하시겠습니까?",
  588 + "delete-tenant-text": "테넌트와 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",
  589 + "delete-tenants-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} }를 삭제하시겠습니까?",
  590 + "delete-tenants-action-title": "{ count, select, 1 {테넌트 1개} other {테넌트 #개} } 삭제",
  591 + "delete-tenants-text": "선택된 테넌트가 삭제되고 관련된 모든 정보를 복구할 수 없으므로 주의하십시오.",
  592 + "title": "타이틀",
  593 + "title-required": "타이틀을 입력하세요.",
  594 + "description": "설명"
  595 + },
  596 + "timeinterval": {
  597 + "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }",
  598 + "minutes-interval": "{ minutes, select, 1 {1 minute} other {# minutes} }",
  599 + "hours-interval": "{ hours, select, 1 {1 hour} other {# hours} }",
  600 + "days-interval": "{ days, select, 1 {1 day} other {# days} }",
  601 + "days": "Days",
  602 + "hours": "Hours",
  603 + "minutes": "Minutes",
  604 + "seconds": "Seconds",
  605 + "advanced": "고급"
  606 + },
  607 + "timewindow": {
  608 + "days": "{ days, select, 1 { day } other {# days } }",
  609 + "hours": "{ hours, select, 0 { hour } 1 {1 hour } other {# hours } }",
  610 + "minutes": "{ minutes, select, 0 { minute } 1 {1 minute } other {# minutes } }",
  611 + "seconds": "{ seconds, select, 0 { second } 1 {1 second } other {# seconds } }",
  612 + "realtime": "Realtime",
  613 + "history": "History",
  614 + "last-prefix": "last",
  615 + "period": "from {{ startTime }} to {{ endTime }}",
  616 + "edit": "타임윈도우 편집",
  617 + "date-range": "날짜 범위",
  618 + "last": "Last",
  619 + "time-period": "기간"
  620 + },
  621 + "user": {
  622 + "users": "사용자",
  623 + "customer-users": "커스터머 사용자",
  624 + "tenant-admins": "테넌트 관리자",
  625 + "sys-admin": "시스템 관리자",
  626 + "tenant-admin": "테넌트 관리자",
  627 + "customer": "커스터머",
  628 + "anonymous": "Anonymous",
  629 + "add": "사용자 추가",
  630 + "delete": "사용자 삭제",
  631 + "add-user-text": "새로운 사용자 추가",
  632 + "no-users-text": "사용자가 없습니다.",
  633 + "user-details": "사용자 상세정보",
  634 + "delete-user-title": "'{{userEmail}}' 사용자를 삭제하시겠습니까?",
  635 + "delete-user-text": "사용자와 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  636 + "delete-users-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} }을 삭제하시겠니까?",
  637 + "delete-users-action-title": "{ count, select, 1 {사용자 1명} other {사용자 #명} } 삭제",
  638 + "delete-users-text": "선택된 사용자가 삭제된고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  639 + "activation-email-sent-message": "활성화 이메일을 보냈습니다!",
  640 + "resend-activation": "활성화 재전송",
  641 + "email": "Email",
  642 + "email-required": "Email을 입력하세요.",
  643 + "first-name": "이름",
  644 + "last-name": "성",
  645 + "description": "설명",
  646 + "default-dashboard": "기본 대시보드",
  647 + "always-fullscreen": "항상 전체화면"
  648 + },
  649 + "value": {
  650 + "type": "Value type",
  651 + "string": "String",
  652 + "string-value": "String value",
  653 + "integer": "Integer",
  654 + "integer-value": "Integer value",
  655 + "invalid-integer-value": "Invalid integer value",
  656 + "double": "Double",
  657 + "double-value": "Double value",
  658 + "boolean": "Boolean",
  659 + "boolean-value": "Boolean value",
  660 + "false": "False",
  661 + "true": "True"
  662 + },
  663 + "widget": {
  664 + "widget-library": "위젯 저장소",
  665 + "widget-bundle": "위젯 번들",
  666 + "select-widgets-bundle": "위젯 번들 선택",
  667 + "management": "위젯 관리",
  668 + "editor": "위젯 편집기",
  669 + "widget-type-not-found": "위젯 구성을 로드하는 중 문제가 발생했습니다.<br>연결된 위젯 타입이 삭제되었습니다.",
  670 + "widget-type-load-error": "다음과 같은 오류로 인해 위젯이로드되지 않았습니다:",
  671 + "remove": "위젯 삭제",
  672 + "edit": "위젯 수정",
  673 + "remove-widget-title": "'{{widgetTitle}}' 위젯을 삭제하시겠습니까?",
  674 + "remove-widget-text": "위젯과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  675 + "timeseries": "Time series",
  676 + "latest-values": "Latest values",
  677 + "rpc": "Control 위젯",
  678 + "static": "Static 위젯",
  679 + "select-widget-type": "위젯 타입 선택",
  680 + "missing-widget-title-error": "위젯 타이틀을 입력하세요!",
  681 + "widget-saved": "위젯이 저장되었습니다.",
  682 + "unable-to-save-widget-error": "위젯을 저장할 수 없습니다! 위젯에 오류가 있습니다!",
  683 + "save": "위젯 저장",
  684 + "saveAs": "다른 이름으로 위젯 저장",
  685 + "save-widget-type-as": "다른 이름으로 위젯 타입 저장",
  686 + "save-widget-type-as-text": "새로운 위젯 이름과 위젯 번들을 선택하세요.",
  687 + "toggle-fullscreen": "전체화면 전환",
  688 + "run": "위젯 실행",
  689 + "title": "위젯 타이틀",
  690 + "title-required": "위젯 타이틀을 입력하세요.",
  691 + "type": "위젯 타입",
  692 + "resources": "리소스",
  693 + "resource-url": "JavaScript/CSS URI",
  694 + "remove-resource": "리소스 삭제",
  695 + "add-resource": "리소스 추가",
  696 + "html": "HTML",
  697 + "tidy": "Tidy",
  698 + "css": "CSS",
  699 + "settings-schema": "스키마 설정",
  700 + "datakey-settings-schema": "데이터 키 설정 스키마",
  701 + "javascript": "Javascript",
  702 + "remove-widget-type-title": "'{{widgetName}}' 위젯 타입을 삭제하시겠습니까?",
  703 + "remove-widget-type-text": "위젯 타입과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  704 + "remove-widget-type": "위젯 타입 삭제",
  705 + "add-widget-type": "새로운 위젯 타입 추가",
  706 + "widget-type-load-failed-error": "위젯 타입을 로드하지 못했습니다!",
  707 + "widget-template-load-failed-error": "위젯 템플릿을 로드하지 못했습니다!",
  708 + "add": "위젯 추가",
  709 + "undo": "위젯 변경사항 취소",
  710 + "export": "위젯 내보내기"
  711 + },
  712 + "widgets-bundle": {
  713 + "current": "현재 번들",
  714 + "widgets-bundles": "위젯 번들",
  715 + "add": "위젯 번들 추가",
  716 + "delete": "위젯 번들 삭제",
  717 + "title": "타이틀",
  718 + "title-required": "타이틀을 입력하세요.",
  719 + "add-widgets-bundle-text": "위젯 번들 추가",
  720 + "no-widgets-bundles-text": "위젯 번들이 없습니다.",
  721 + "empty": "위젯 번들이 비어있습니다.",
  722 + "details": "상세",
  723 + "widgets-bundle-details": "위젯 번들 상세정보",
  724 + "delete-widgets-bundle-title": "'{{widgetsBundleTitle}}' 위젯 번들을 삭제하시겠습니까?",
  725 + "delete-widgets-bundle-text": "위젯 번들과 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  726 + "delete-widgets-bundles-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} }를 삭제하시겠습니까?",
  727 + "delete-widgets-bundles-action-title": "{ count, select, 1 {위젯 번들 1개} other {위젯 번들 #개} } 삭제",
  728 + "delete-widgets-bundles-text": "선택된 위젯 번들이 삭제되고 관련된 모든 데이터를 복구할 수 없으므로 주의하십시오.",
  729 + "no-widgets-bundles-matching": "'{{widgetsBundle}}' 와(과) 일치하는 위젯 번들을 찾을 수 없습니다.",
  730 + "widgets-bundle-required": "위젯 번들을 입력하세요.",
  731 + "system": "시스템",
  732 + "import": "위젯 번들 가져오기",
  733 + "export": "위젯 번들 내보내기",
  734 + "export-failed-error": "위젯 번들을 내보내기 할 수 없습니다.: {{error}}",
  735 + "create-new-widgets-bundle": "새로운 위젯 번들 생성",
  736 + "widgets-bundle-file": "위젯 번들 파일",
  737 + "invalid-widgets-bundle-file-error": "위젯 번들을 가져오기 할 수 없습니다.: 잘못된 위젯 번들 데이터 구조입니다."
  738 + },
  739 + "widget-config": {
  740 + "data": "데이터",
  741 + "settings": "설정",
  742 + "advanced": "고급",
  743 + "title": "타이틀",
  744 + "general-settings": "일반 설정",
  745 + "display-title": "타이틀 표시",
  746 + "drop-shadow": "그림자",
  747 + "enable-fullscreen": "전체화면 사용 ",
  748 + "background-color": "배경 색",
  749 + "text-color": "글자 색",
  750 + "padding": "패딩",
  751 + "title-style": "타이틀 스타일",
  752 + "mobile-mode-settings": "모바일 모드 설정",
  753 + "order": "순서",
  754 + "height": "높이",
  755 + "units": "값 옆에 표시할 특수 기호",
  756 + "decimals": "소수점 이하 자릿수",
  757 + "timewindow": "타임윈도우",
  758 + "use-dashboard-timewindow": "대시보드 타임윈도우",
  759 + "display-legend": "범례 표시",
  760 + "datasources": "데이터소스",
  761 + "datasource-type": "유형",
  762 + "datasource-parameters": "파라미터",
  763 + "remove-datasource": "데이터소스 삭제",
  764 + "add-datasource": "데이터소스 추가",
  765 + "target-device": "대상 디바이스"
  766 + },
  767 + "widget-type": {
  768 + "import": "위젯 타입 가져오기",
  769 + "export": "위젯 타입 내보내기",
  770 + "export-failed-error": "위젯 타입을 내보내기 할 수 없습니다.: {{error}}",
  771 + "create-new-widget-type": "새로운 위젯 타입 생성",
  772 + "widget-type-file": "위젯 타입 파일",
  773 + "invalid-widget-type-file-error": "위젯 타입을 가져오기 할 수 없습니다.: 잘못된 위젯 타입 데이터 구조입니다."
  774 + },
  775 + "language": {
  776 + "language": "언어",
  777 + "en_US": "영어",
  778 + "ko_KR": "한글"
779 } 779 }
780 - ).name;  
  780 + };
  781 + angular.extend(locales, {'ko_KR': ko_KR});
  782 +}
@@ -774,6 +774,11 @@ export default angular.module('thingsboard.locale', []) @@ -774,6 +774,11 @@ export default angular.module('thingsboard.locale', [])
774 "create-new-widget-type": "Create new widget type", 774 "create-new-widget-type": "Create new widget type",
775 "widget-type-file": "Widget type file", 775 "widget-type-file": "Widget type file",
776 "invalid-widget-type-file-error": "Unable to import widget type: Invalid widget type data structure." 776 "invalid-widget-type-file-error": "Unable to import widget type: Invalid widget type data structure."
  777 + },
  778 + "language": {
  779 + "language": "Language",
  780 + "en_US": "English",
  781 + "ko_KR": "Korean"
777 } 782 }
778 } 783 }
779 } 784 }
@@ -20,25 +20,29 @@ import changePasswordTemplate from './change-password.tpl.html'; @@ -20,25 +20,29 @@ import changePasswordTemplate from './change-password.tpl.html';
20 /* eslint-enable import/no-unresolved, import/default */ 20 /* eslint-enable import/no-unresolved, import/default */
21 21
22 /*@ngInject*/ 22 /*@ngInject*/
23 -export default function ProfileController(userService, $scope, $document, $mdDialog) { 23 +export default function ProfileController(userService, $scope, $document, $mdDialog, $translate) {
24 var vm = this; 24 var vm = this;
25 25
26 vm.profileUser = {}; 26 vm.profileUser = {};
27 27
28 vm.save = save; 28 vm.save = save;
29 vm.changePassword = changePassword; 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 31
31 loadProfile(); 32 loadProfile();
32 33
33 function loadProfile() { 34 function loadProfile() {
34 userService.getUser(userService.getCurrentUser().userId).then(function success(user) { 35 userService.getUser(userService.getCurrentUser().userId).then(function success(user) {
35 vm.profileUser = user; 36 vm.profileUser = user;
  37 + vm.profileUser.lang = $translate.use();
36 }); 38 });
37 } 39 }
38 40
39 function save() { 41 function save() {
40 userService.saveUser(vm.profileUser).then(function success(user) { 42 userService.saveUser(vm.profileUser).then(function success(user) {
  43 + $translate.use(vm.profileUser.lang);
41 vm.profileUser = user; 44 vm.profileUser = user;
  45 + vm.profileUser.lang = $translate.use();
42 $scope.theForm.$setPristine(); 46 $scope.theForm.$setPristine();
43 }); 47 });
44 } 48 }
@@ -40,6 +40,14 @@ @@ -40,6 +40,14 @@
40 <label translate>user.last-name</label> 40 <label translate>user.last-name</label>
41 <input name="lastName" ng-model="vm.profileUser.lastName"> 41 <input name="lastName" ng-model="vm.profileUser.lastName">
42 </md-input-container> 42 </md-input-container>
  43 + <md-input-container class="md-block">
  44 + <label translate>language.language</label>
  45 + <md-select name="language" ng-model="vm.profileUser.lang">
  46 + <md-option ng-repeat="lang in vm.languageList" ng-value="lang.value">
  47 + {{lang.name | translate}}
  48 + </md-option>
  49 + </md-select>
  50 + </md-input-container>
43 <md-button ng-disabled="loading" ng-click="vm.changePassword($event)" 51 <md-button ng-disabled="loading" ng-click="vm.changePassword($event)"
44 class="md-raised md-primary">{{ 'profile.change-password' | translate }} 52 class="md-raised md-primary">{{ 'profile.change-password' | translate }}
45 </md-button> 53 </md-button>