timezone is implemented

This commit is contained in:
병준 박 2019-12-20 16:30:22 +09:00
parent f137f0a9e5
commit 2203e94a4e
26 changed files with 1778 additions and 99 deletions

75
package-lock.json generated
View File

@ -2406,6 +2406,15 @@
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true
},
"@types/moment-timezone": {
"version": "0.5.12",
"resolved": "https://registry.npmjs.org/@types/moment-timezone/-/moment-timezone-0.5.12.tgz",
"integrity": "sha512-hnHH2+Efg2vExr/dSz+IX860nSiyk9Sk4pJF2EmS11lRpMcNXeB4KBW5xcgw2QPsb9amTXdsVNEe5IoJXiT0uw==",
"dev": true,
"requires": {
"moment": ">=2.14.0"
}
},
"@types/node": {
"version": "10.14.22",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.22.tgz",
@ -2792,7 +2801,6 @@
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@ -4607,7 +4615,6 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/conf/-/conf-6.2.0.tgz",
"integrity": "sha512-fvl40R6YemHrFsNiyP7TD0tzOe3pQD2dfT2s20WvCaq57A1oV+RImbhn2Y4sQGDz1lB0wNSb7dPcPIvQB69YNA==",
"dev": true,
"requires": {
"ajv": "^6.10.2",
"debounce-fn": "^3.0.1",
@ -4625,7 +4632,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
"integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
"dev": true,
"requires": {
"is-obj": "^2.0.0"
}
@ -4633,14 +4639,12 @@
"is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"dev": true
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
},
"make-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
"integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
"dev": true,
"requires": {
"semver": "^6.0.0"
}
@ -4649,7 +4653,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz",
"integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
@ -5187,7 +5190,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-3.0.1.tgz",
"integrity": "sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
@ -5923,7 +5925,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/electron-store/-/electron-store-5.1.0.tgz",
"integrity": "sha512-uhAF/4+zDb+y0hWqlBirEPEAR4ciCZDp4fRWGFNV62bG+ArdQPpXk7jS0MEVj3CfcG5V7hx7Dpq5oD+1j6GD8Q==",
"dev": true,
"requires": {
"conf": "^6.2.0",
"type-fest": "^0.7.1"
@ -5932,8 +5933,7 @@
"type-fest": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
"integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
"dev": true
"integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="
}
}
},
@ -6168,8 +6168,7 @@
"env-paths": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
"dev": true
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA=="
},
"err-code": {
"version": "1.1.2",
@ -6663,14 +6662,12 @@
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fastparse": {
"version": "1.1.2",
@ -6871,7 +6868,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
"locate-path": "^3.0.0"
}
@ -7721,8 +7717,7 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
"indexof": {
"version": "0.0.1",
@ -8149,8 +8144,7 @@
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"is-windows": {
"version": "1.0.2",
@ -8541,14 +8535,12 @@
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-schema-typed": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.2.tgz",
"integrity": "sha512-40FRIcBSz4y0Ego3gMpbkhtIgebpxKRgW/7i1FfDNL4/xEPQKBM12tKSiCZFNQvad5K4IS3I5Sc8cxza/KSwog==",
"dev": true
"integrity": "sha512-40FRIcBSz4y0Ego3gMpbkhtIgebpxKRgW/7i1FfDNL4/xEPQKBM12tKSiCZFNQvad5K4IS3I5Sc8cxza/KSwog=="
},
"json-stable-stringify": {
"version": "1.0.1",
@ -9589,7 +9581,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@ -10015,8 +10006,7 @@
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"mimic-response": {
"version": "1.0.1",
@ -10142,6 +10132,15 @@
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
"dev": true
},
"moment-timezone": {
"version": "0.5.27",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz",
"integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==",
"dev": true,
"requires": {
"moment": ">= 2.9.0"
}
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -10833,7 +10832,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
"integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
@ -10950,7 +10948,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
"integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
@ -10959,7 +10956,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
@ -10982,8 +10978,7 @@
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
"package-json": {
"version": "6.5.0",
@ -11232,8 +11227,7 @@
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
},
"path-is-absolute": {
"version": "1.0.1",
@ -11358,7 +11352,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
"integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
"dev": true,
"requires": {
"find-up": "^3.0.0"
}
@ -11826,8 +11819,7 @@
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"q": {
"version": "1.4.1",
@ -12951,8 +12943,7 @@
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"slash": {
"version": "1.0.0",
@ -14253,7 +14244,6 @@
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
"requires": {
"is-typedarray": "^1.0.0"
}
@ -14465,7 +14455,6 @@
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
}

View File

@ -83,6 +83,7 @@
"@types/filesize": "^4.1.0",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"@types/moment-timezone": "^0.5.12",
"@types/node": "^10.14.22",
"@types/semver": "^6.0.2",
"@types/webpack": "^4.39.5",
@ -118,6 +119,7 @@
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"moment": "^2.24.0",
"moment-timezone": "^0.5.27",
"ng-packagr": "^5.4.0",
"ngrx-store-freeze": "^0.2.4",
"ngx-logger": "^4.0.5",

View File

@ -79,7 +79,7 @@
</li>
<li>
<span class="text-accent-color">date :</span>
{{ selectedFile.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}
{{ selectedFile.info.sendDate | ucapDate: 'YYYY.MM.DD' }}
</li>
</ul>
</ng-container>

View File

@ -50,13 +50,12 @@
</li>
<li>
<span class="text-accent-color">date :</span>
{{ selectedFile.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}
{{ selectedFile.info.sendDate | ucapDate: 'YYYY.MM.DD' }}
<span *ngIf="loginRes.fileRetentionPeriod > 0">
~
{{
selectedFile.info.sendDate
| dateDistanceToDay: loginRes.fileRetentionPeriod
| dateToStringFormat: 'YYYY.MM.DD'
| ucapDate: 'YYYY.MM.DD':fileRetentionPeriodOptions
}}
</span>
</li>
@ -185,13 +184,12 @@
</div>
<div class="download-period text-accent-color">
<!--{{ element.info.size | ucapBytes }}-->
{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}
{{ element.info.sendDate | ucapDate: 'YYYY.MM.DD' }}
<span *ngIf="loginRes.fileRetentionPeriod > 0">
~
{{
element.info.sendDate
| dateDistanceToDay: loginRes.fileRetentionPeriod
| dateToStringFormat: 'YYYY.MM.DD'
| ucapDate: 'YYYY.MM.DD':fileRetentionPeriodOptions
}}
</span>
</div>
@ -209,7 +207,7 @@
<ng-container matColumnDef="sendDate" class="date">
<th mat-header-cell *matHeaderCellDef mat-sort-header>sendDate</th>
<td mat-cell *matCellDef="let element">
<!--{{ element.info.sendDate | dateToStringFormat: 'YYYY.MM.DD' }}-->
<!--{{ element.info.sendDate | ucapDate: 'YYYY.MM.DD' }}-->
{{ element.info.size | ucapBytes }}
</td>
</ng-container>

View File

@ -23,7 +23,8 @@ import {
DialogService,
ConfirmDialogComponent,
ConfirmDialogResult,
ConfirmDialogData
ConfirmDialogData,
DateOptions
} from '@ucap-webmessenger/ui';
import { CommonApiService } from '@ucap-webmessenger/api-common';
import { EventType } from '@ucap-webmessenger/protocol-event';
@ -397,4 +398,10 @@ export class FileBoxComponent implements OnInit, OnDestroy {
this.onSelectedIndexChange(this.currentTabIndex);
}
}
get fileRetentionPeriodOptions(): DateOptions {
return {
manipulate: { amount: this.loginRes.fileRetentionPeriod, unit: 'days' }
};
}
}

View File

@ -56,12 +56,11 @@
>발송예정시간</span
>
<span *ngIf="messageInfo.type !== MessageType.Reservation">{{
messageInfo.regDate
| dateToStringFormat: 'YYYY.MM.dd (KS) a/p HH:mm'
messageInfo.regDate | ucapDate: 'YYYY.MM.DD (ddd) a hh:mm'
}}</span>
<span *ngIf="messageInfo.type === MessageType.Reservation">{{
messageInfo.reservationTime
| dateToStringFormat: 'YYYY.MM.dd (KS) a/p HH:mm'
| ucapDate: 'YYYY.MM.DD (ddd) a hh:mm'
}}</span>
</li>
</ul>
@ -130,7 +129,7 @@
<mat-list-item *ngIf="user.readYn">
<span>{{ user.userName }}</span>
<span>{{
user.readDate | dateToStringFormat: 'YYYY-MM-DD HH:mm:ss'
user.readDate | ucapDate: 'YYYY-MM-DD HH:mm:ss'
}}</span>
</mat-list-item>
</ng-container>

View File

@ -10,7 +10,8 @@ import { Store } from '@ngrx/store';
import {
DialogService,
TranslateService as UCapTranslateService
TranslateService as UCapTranslateService,
DateService as UCapDateService
} from '@ucap-webmessenger/ui';
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
@ -50,6 +51,7 @@ export class MessengerSettingsDialogComponent implements OnInit {
private sessionStorageService: SessionStorageService,
private localStorageService: LocalStorageService,
private ucapTranslateService: UCapTranslateService,
private ucapDateService: UCapDateService,
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
private translateService: TranslateService,
private store: Store<any>,
@ -87,6 +89,11 @@ export class MessengerSettingsDialogComponent implements OnInit {
) {
this.ucapTranslateService.use(setting.hrInfoLocale);
}
if (this.appUserInfo.settings.general.timezone !== setting.timezone) {
this.ucapDateService.use(setting.timezone);
}
if (this.appUserInfo.settings.general.autoLaunch !== setting.autoLaunch) {
this.nativeService.changeAutoLaunch(setting.autoLaunch);
}

View File

@ -7,6 +7,7 @@ import { AppNotificationService } from './notification.service';
import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
import { AppNativeService } from './native.service';
import { TranslateService as UCapTranslateService } from '@ucap-webmessenger/ui';
import { DateService as UCapDateService } from '@ucap-webmessenger/ui';
import { TranslateService } from '@ngx-translate/core';
@Injectable()
@ -18,6 +19,7 @@ export class AppService {
private appNativeService: AppNativeService,
private translateService: TranslateService,
private ucapTranslateService: UCapTranslateService,
private ucapDateService: UCapDateService,
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService
) {
this.translateService.setDefaultLang('ko');
@ -25,6 +27,10 @@ export class AppService {
this.ucapTranslateService.setDefaultLang('ko');
this.ucapTranslateService.use('ko');
this.ucapDateService.setDefaultTimezone('Asia/Seoul');
this.ucapDateService.use('Asia/Seoul');
this.ucapDateService.setLocale(this.translateService.currentLang);
}
public postInit(): Promise<any> {

View File

@ -1,15 +1,17 @@
import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { TranslateService as UCapTranslateService } from '@ucap-webmessenger/ui';
import { map, tap } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core';
import { TranslateService as UCapTranslateService } from '@ucap-webmessenger/ui';
import { DateService as UCapDateService } from '@ucap-webmessenger/ui';
import * as AuthenticationStore from '@app/store/account/authentication';
import { LocalStorageService } from '@ucap-webmessenger/web-storage';
import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
import { environment } from '../../../../environments/environment';
import { TranslateService } from '@ngx-translate/core';
@Injectable()
export class Effects {
@ -29,6 +31,7 @@ export class Effects {
this.ucapTranslateService.use(
appUserInfo.settings.general.hrInfoLocale
);
this.ucapDateService.use(appUserInfo.settings.general.timezone);
})
),
{ dispatch: false }
@ -37,6 +40,7 @@ export class Effects {
private actions$: Actions,
private translateService: TranslateService,
private ucapTranslateService: UCapTranslateService,
private ucapDateService: UCapDateService,
private localStorageService: LocalStorageService
) {}
}

View File

@ -2,7 +2,602 @@
"common": {
"search": "Search",
"searchWord": "Search word",
"useOnlyForSpecialCharacter": "Can only use Special characters: {{0}}"
"useOnlyForSpecialCharacter": "Can only use Special characters: {{0}}",
"timezone": {
"Africa/Abidjan": "Africa/Abidjan",
"Africa/Accra": "Africa/Accra",
"Africa/Addis_Ababa": "Africa/Addis_Ababa",
"Africa/Algiers": "Africa/Algiers",
"Africa/Asmara": "Africa/Asmara",
"Africa/Asmera": "Africa/Asmera",
"Africa/Bamako": "Africa/Bamako",
"Africa/Bangui": "Africa/Bangui",
"Africa/Banjul": "Africa/Banjul",
"Africa/Bissau": "Africa/Bissau",
"Africa/Blantyre": "Africa/Blantyre",
"Africa/Brazzaville": "Africa/Brazzaville",
"Africa/Bujumbura": "Africa/Bujumbura",
"Africa/Cairo": "Africa/Cairo",
"Africa/Casablanca": "Africa/Casablanca",
"Africa/Ceuta": "Africa/Ceuta",
"Africa/Conakry": "Africa/Conakry",
"Africa/Dakar": "Africa/Dakar",
"Africa/Dar_es_Salaam": "Africa/Dar_es_Salaam",
"Africa/Djibouti": "Africa/Djibouti",
"Africa/Douala": "Africa/Douala",
"Africa/El_Aaiun": "Africa/El_Aaiun",
"Africa/Freetown": "Africa/Freetown",
"Africa/Gaborone": "Africa/Gaborone",
"Africa/Harare": "Africa/Harare",
"Africa/Johannesburg": "Africa/Johannesburg",
"Africa/Juba": "Africa/Juba",
"Africa/Kampala": "Africa/Kampala",
"Africa/Khartoum": "Africa/Khartoum",
"Africa/Kigali": "Africa/Kigali",
"Africa/Kinshasa": "Africa/Kinshasa",
"Africa/Lagos": "Africa/Lagos",
"Africa/Libreville": "Africa/Libreville",
"Africa/Lome": "Africa/Lome",
"Africa/Luanda": "Africa/Luanda",
"Africa/Lubumbashi": "Africa/Lubumbashi",
"Africa/Lusaka": "Africa/Lusaka",
"Africa/Malabo": "Africa/Malabo",
"Africa/Maputo": "Africa/Maputo",
"Africa/Maseru": "Africa/Maseru",
"Africa/Mbabane": "Africa/Mbabane",
"Africa/Mogadishu": "Africa/Mogadishu",
"Africa/Monrovia": "Africa/Monrovia",
"Africa/Nairobi": "Africa/Nairobi",
"Africa/Ndjamena": "Africa/Ndjamena",
"Africa/Niamey": "Africa/Niamey",
"Africa/Nouakchott": "Africa/Nouakchott",
"Africa/Ouagadougou": "Africa/Ouagadougou",
"Africa/Porto-Novo": "Africa/Porto-Novo",
"Africa/Sao_Tome": "Africa/Sao_Tome",
"Africa/Timbuktu": "Africa/Timbuktu",
"Africa/Tripoli": "Africa/Tripoli",
"Africa/Tunis": "Africa/Tunis",
"Africa/Windhoek": "Africa/Windhoek",
"America/Adak": "America/Adak",
"America/Anchorage": "America/Anchorage",
"America/Anguilla": "America/Anguilla",
"America/Antigua": "America/Antigua",
"America/Araguaina": "America/Araguaina",
"America/Argentina/Buenos_Aires": "America/Argentina/Buenos_Aires",
"America/Argentina/Catamarca": "America/Argentina/Catamarca",
"America/Argentina/ComodRivadavia": "America/Argentina/ComodRivadavia",
"America/Argentina/Cordoba": "America/Argentina/Cordoba",
"America/Argentina/Jujuy": "America/Argentina/Jujuy",
"America/Argentina/La_Rioja": "America/Argentina/La_Rioja",
"America/Argentina/Mendoza": "America/Argentina/Mendoza",
"America/Argentina/Rio_Gallegos": "America/Argentina/Rio_Gallegos",
"America/Argentina/Salta": "America/Argentina/Salta",
"America/Argentina/San_Juan": "America/Argentina/San_Juan",
"America/Argentina/San_Luis": "America/Argentina/San_Luis",
"America/Argentina/Tucuman": "America/Argentina/Tucuman",
"America/Argentina/Ushuaia": "America/Argentina/Ushuaia",
"America/Aruba": "America/Aruba",
"America/Asuncion": "America/Asuncion",
"America/Atikokan": "America/Atikokan",
"America/Atka": "America/Atka",
"America/Bahia": "America/Bahia",
"America/Bahia_Banderas": "America/Bahia_Banderas",
"America/Barbados": "America/Barbados",
"America/Belem": "America/Belem",
"America/Belize": "America/Belize",
"America/Blanc-Sablon": "America/Blanc-Sablon",
"America/Boa_Vista": "America/Boa_Vista",
"America/Bogota": "America/Bogota",
"America/Boise": "America/Boise",
"America/Buenos_Aires": "America/Buenos_Aires",
"America/Cambridge_Bay": "America/Cambridge_Bay",
"America/Campo_Grande": "America/Campo_Grande",
"America/Cancun": "America/Cancun",
"America/Caracas": "America/Caracas",
"America/Catamarca": "America/Catamarca",
"America/Cayenne": "America/Cayenne",
"America/Cayman": "America/Cayman",
"America/Chicago": "America/Chicago",
"America/Chihuahua": "America/Chihuahua",
"America/Coral_Harbour": "America/Coral_Harbour",
"America/Cordoba": "America/Cordoba",
"America/Costa_Rica": "America/Costa_Rica",
"America/Creston": "America/Creston",
"America/Cuiaba": "America/Cuiaba",
"America/Curacao": "America/Curacao",
"America/Danmarkshavn": "America/Danmarkshavn",
"America/Dawson": "America/Dawson",
"America/Dawson_Creek": "America/Dawson_Creek",
"America/Denver": "America/Denver",
"America/Detroit": "America/Detroit",
"America/Dominica": "America/Dominica",
"America/Edmonton": "America/Edmonton",
"America/Eirunepe": "America/Eirunepe",
"America/El_Salvador": "America/El_Salvador",
"America/Ensenada": "America/Ensenada",
"America/Fort_Nelson": "America/Fort_Nelson",
"America/Fort_Wayne": "America/Fort_Wayne",
"America/Fortaleza": "America/Fortaleza",
"America/Glace_Bay": "America/Glace_Bay",
"America/Godthab": "America/Godthab",
"America/Goose_Bay": "America/Goose_Bay",
"America/Grand_Turk": "America/Grand_Turk",
"America/Grenada": "America/Grenada",
"America/Guadeloupe": "America/Guadeloupe",
"America/Guatemala": "America/Guatemala",
"America/Guayaquil": "America/Guayaquil",
"America/Guyana": "America/Guyana",
"America/Halifax": "America/Halifax",
"America/Havana": "America/Havana",
"America/Hermosillo": "America/Hermosillo",
"America/Indiana/Indianapolis": "America/Indiana/Indianapolis",
"America/Indiana/Knox": "America/Indiana/Knox",
"America/Indiana/Marengo": "America/Indiana/Marengo",
"America/Indiana/Petersburg": "America/Indiana/Petersburg",
"America/Indiana/Tell_City": "America/Indiana/Tell_City",
"America/Indiana/Vevay": "America/Indiana/Vevay",
"America/Indiana/Vincennes": "America/Indiana/Vincennes",
"America/Indiana/Winamac": "America/Indiana/Winamac",
"America/Indianapolis": "America/Indianapolis",
"America/Inuvik": "America/Inuvik",
"America/Iqaluit": "America/Iqaluit",
"America/Jamaica": "America/Jamaica",
"America/Jujuy": "America/Jujuy",
"America/Juneau": "America/Juneau",
"America/Kentucky/Louisville": "America/Kentucky/Louisville",
"America/Kentucky/Monticello": "America/Kentucky/Monticello",
"America/Knox_IN": "America/Knox_IN",
"America/Kralendijk": "America/Kralendijk",
"America/La_Paz": "America/La_Paz",
"America/Lima": "America/Lima",
"America/Los_Angeles": "America/Los_Angeles",
"America/Louisville": "America/Louisville",
"America/Lower_Princes": "America/Lower_Princes",
"America/Maceio": "America/Maceio",
"America/Managua": "America/Managua",
"America/Manaus": "America/Manaus",
"America/Marigot": "America/Marigot",
"America/Martinique": "America/Martinique",
"America/Matamoros": "America/Matamoros",
"America/Mazatlan": "America/Mazatlan",
"America/Mendoza": "America/Mendoza",
"America/Menominee": "America/Menominee",
"America/Merida": "America/Merida",
"America/Metlakatla": "America/Metlakatla",
"America/Mexico_City": "America/Mexico_City",
"America/Miquelon": "America/Miquelon",
"America/Moncton": "America/Moncton",
"America/Monterrey": "America/Monterrey",
"America/Montevideo": "America/Montevideo",
"America/Montreal": "America/Montreal",
"America/Montserrat": "America/Montserrat",
"America/Nassau": "America/Nassau",
"America/New_York": "America/New_York",
"America/Nipigon": "America/Nipigon",
"America/Nome": "America/Nome",
"America/Noronha": "America/Noronha",
"America/North_Dakota/Beulah": "America/North_Dakota/Beulah",
"America/North_Dakota/Center": "America/North_Dakota/Center",
"America/North_Dakota/New_Salem": "America/North_Dakota/New_Salem",
"America/Ojinaga": "America/Ojinaga",
"America/Panama": "America/Panama",
"America/Pangnirtung": "America/Pangnirtung",
"America/Paramaribo": "America/Paramaribo",
"America/Phoenix": "America/Phoenix",
"America/Port-au-Prince": "America/Port-au-Prince",
"America/Port_of_Spain": "America/Port_of_Spain",
"America/Porto_Acre": "America/Porto_Acre",
"America/Porto_Velho": "America/Porto_Velho",
"America/Puerto_Rico": "America/Puerto_Rico",
"America/Punta_Arenas": "America/Punta_Arenas",
"America/Rainy_River": "America/Rainy_River",
"America/Rankin_Inlet": "America/Rankin_Inlet",
"America/Recife": "America/Recife",
"America/Regina": "America/Regina",
"America/Resolute": "America/Resolute",
"America/Rio_Branco": "America/Rio_Branco",
"America/Rosario": "America/Rosario",
"America/Santa_Isabel": "America/Santa_Isabel",
"America/Santarem": "America/Santarem",
"America/Santiago": "America/Santiago",
"America/Santo_Domingo": "America/Santo_Domingo",
"America/Sao_Paulo": "America/Sao_Paulo",
"America/Scoresbysund": "America/Scoresbysund",
"America/Shiprock": "America/Shiprock",
"America/Sitka": "America/Sitka",
"America/St_Barthelemy": "America/St_Barthelemy",
"America/St_Johns": "America/St_Johns",
"America/St_Kitts": "America/St_Kitts",
"America/St_Lucia": "America/St_Lucia",
"America/St_Thomas": "America/St_Thomas",
"America/St_Vincent": "America/St_Vincent",
"America/Swift_Current": "America/Swift_Current",
"America/Tegucigalpa": "America/Tegucigalpa",
"America/Thule": "America/Thule",
"America/Thunder_Bay": "America/Thunder_Bay",
"America/Tijuana": "America/Tijuana",
"America/Toronto": "America/Toronto",
"America/Tortola": "America/Tortola",
"America/Vancouver": "America/Vancouver",
"America/Virgin": "America/Virgin",
"America/Whitehorse": "America/Whitehorse",
"America/Winnipeg": "America/Winnipeg",
"America/Yakutat": "America/Yakutat",
"America/Yellowknife": "America/Yellowknife",
"Antarctica/Casey": "Antarctica/Casey",
"Antarctica/Davis": "Antarctica/Davis",
"Antarctica/DumontDUrville": "Antarctica/DumontDUrville",
"Antarctica/Macquarie": "Antarctica/Macquarie",
"Antarctica/Mawson": "Antarctica/Mawson",
"Antarctica/McMurdo": "Antarctica/McMurdo",
"Antarctica/Palmer": "Antarctica/Palmer",
"Antarctica/Rothera": "Antarctica/Rothera",
"Antarctica/South_Pole": "Antarctica/South_Pole",
"Antarctica/Syowa": "Antarctica/Syowa",
"Antarctica/Troll": "Antarctica/Troll",
"Antarctica/Vostok": "Antarctica/Vostok",
"Arctic/Longyearbyen": "Arctic/Longyearbyen",
"Asia/Aden": "Asia/Aden",
"Asia/Almaty": "Asia/Almaty",
"Asia/Amman": "Asia/Amman",
"Asia/Anadyr": "Asia/Anadyr",
"Asia/Aqtau": "Asia/Aqtau",
"Asia/Aqtobe": "Asia/Aqtobe",
"Asia/Ashgabat": "Asia/Ashgabat",
"Asia/Ashkhabad": "Asia/Ashkhabad",
"Asia/Atyrau": "Asia/Atyrau",
"Asia/Baghdad": "Asia/Baghdad",
"Asia/Bahrain": "Asia/Bahrain",
"Asia/Baku": "Asia/Baku",
"Asia/Bangkok": "Asia/Bangkok",
"Asia/Barnaul": "Asia/Barnaul",
"Asia/Beirut": "Asia/Beirut",
"Asia/Bishkek": "Asia/Bishkek",
"Asia/Brunei": "Asia/Brunei",
"Asia/Calcutta": "Asia/Calcutta",
"Asia/Chita": "Asia/Chita",
"Asia/Choibalsan": "Asia/Choibalsan",
"Asia/Chongqing": "Asia/Chongqing",
"Asia/Chungking": "Asia/Chungking",
"Asia/Colombo": "Asia/Colombo",
"Asia/Dacca": "Asia/Dacca",
"Asia/Damascus": "Asia/Damascus",
"Asia/Dhaka": "Asia/Dhaka",
"Asia/Dili": "Asia/Dili",
"Asia/Dubai": "Asia/Dubai",
"Asia/Dushanbe": "Asia/Dushanbe",
"Asia/Famagusta": "Asia/Famagusta",
"Asia/Gaza": "Asia/Gaza",
"Asia/Harbin": "Asia/Harbin",
"Asia/Hebron": "Asia/Hebron",
"Asia/Ho_Chi_Minh": "Asia/Ho_Chi_Minh",
"Asia/Hong_Kong": "Asia/Hong_Kong",
"Asia/Hovd": "Asia/Hovd",
"Asia/Irkutsk": "Asia/Irkutsk",
"Asia/Istanbul": "Asia/Istanbul",
"Asia/Jakarta": "Asia/Jakarta",
"Asia/Jayapura": "Asia/Jayapura",
"Asia/Jerusalem": "Asia/Jerusalem",
"Asia/Kabul": "Asia/Kabul",
"Asia/Kamchatka": "Asia/Kamchatka",
"Asia/Karachi": "Asia/Karachi",
"Asia/Kashgar": "Asia/Kashgar",
"Asia/Kathmandu": "Asia/Kathmandu",
"Asia/Katmandu": "Asia/Katmandu",
"Asia/Khandyga": "Asia/Khandyga",
"Asia/Kolkata": "Asia/Kolkata",
"Asia/Krasnoyarsk": "Asia/Krasnoyarsk",
"Asia/Kuala_Lumpur": "Asia/Kuala_Lumpur",
"Asia/Kuching": "Asia/Kuching",
"Asia/Kuwait": "Asia/Kuwait",
"Asia/Macao": "Asia/Macao",
"Asia/Macau": "Asia/Macau",
"Asia/Magadan": "Asia/Magadan",
"Asia/Makassar": "Asia/Makassar",
"Asia/Manila": "Asia/Manila",
"Asia/Muscat": "Asia/Muscat",
"Asia/Nicosia": "Asia/Nicosia",
"Asia/Novokuznetsk": "Asia/Novokuznetsk",
"Asia/Novosibirsk": "Asia/Novosibirsk",
"Asia/Omsk": "Asia/Omsk",
"Asia/Oral": "Asia/Oral",
"Asia/Phnom_Penh": "Asia/Phnom_Penh",
"Asia/Pontianak": "Asia/Pontianak",
"Asia/Pyongyang": "Asia/Pyongyang",
"Asia/Qatar": "Asia/Qatar",
"Asia/Qostanay": "Asia/Qostanay",
"Asia/Qyzylorda": "Asia/Qyzylorda",
"Asia/Rangoon": "Asia/Rangoon",
"Asia/Riyadh": "Asia/Riyadh",
"Asia/Saigon": "Asia/Saigon",
"Asia/Sakhalin": "Asia/Sakhalin",
"Asia/Samarkand": "Asia/Samarkand",
"Asia/Seoul": "Asia/Seoul",
"Asia/Shanghai": "Asia/Shanghai",
"Asia/Singapore": "Asia/Singapore",
"Asia/Srednekolymsk": "Asia/Srednekolymsk",
"Asia/Taipei": "Asia/Taipei",
"Asia/Tashkent": "Asia/Tashkent",
"Asia/Tbilisi": "Asia/Tbilisi",
"Asia/Tehran": "Asia/Tehran",
"Asia/Tel_Aviv": "Asia/Tel_Aviv",
"Asia/Thimbu": "Asia/Thimbu",
"Asia/Thimphu": "Asia/Thimphu",
"Asia/Tokyo": "Asia/Tokyo",
"Asia/Tomsk": "Asia/Tomsk",
"Asia/Ujung_Pandang": "Asia/Ujung_Pandang",
"Asia/Ulaanbaatar": "Asia/Ulaanbaatar",
"Asia/Ulan_Bator": "Asia/Ulan_Bator",
"Asia/Urumqi": "Asia/Urumqi",
"Asia/Ust-Nera": "Asia/Ust-Nera",
"Asia/Vientiane": "Asia/Vientiane",
"Asia/Vladivostok": "Asia/Vladivostok",
"Asia/Yakutsk": "Asia/Yakutsk",
"Asia/Yangon": "Asia/Yangon",
"Asia/Yekaterinburg": "Asia/Yekaterinburg",
"Asia/Yerevan": "Asia/Yerevan",
"Atlantic/Azores": "Atlantic/Azores",
"Atlantic/Bermuda": "Atlantic/Bermuda",
"Atlantic/Canary": "Atlantic/Canary",
"Atlantic/Cape_Verde": "Atlantic/Cape_Verde",
"Atlantic/Faeroe": "Atlantic/Faeroe",
"Atlantic/Faroe": "Atlantic/Faroe",
"Atlantic/Jan_Mayen": "Atlantic/Jan_Mayen",
"Atlantic/Madeira": "Atlantic/Madeira",
"Atlantic/Reykjavik": "Atlantic/Reykjavik",
"Atlantic/South_Georgia": "Atlantic/South_Georgia",
"Atlantic/St_Helena": "Atlantic/St_Helena",
"Atlantic/Stanley": "Atlantic/Stanley",
"Australia/ACT": "Australia/ACT",
"Australia/Adelaide": "Australia/Adelaide",
"Australia/Brisbane": "Australia/Brisbane",
"Australia/Broken_Hill": "Australia/Broken_Hill",
"Australia/Canberra": "Australia/Canberra",
"Australia/Currie": "Australia/Currie",
"Australia/Darwin": "Australia/Darwin",
"Australia/Eucla": "Australia/Eucla",
"Australia/Hobart": "Australia/Hobart",
"Australia/LHI": "Australia/LHI",
"Australia/Lindeman": "Australia/Lindeman",
"Australia/Lord_Howe": "Australia/Lord_Howe",
"Australia/Melbourne": "Australia/Melbourne",
"Australia/NSW": "Australia/NSW",
"Australia/North": "Australia/North",
"Australia/Perth": "Australia/Perth",
"Australia/Queensland": "Australia/Queensland",
"Australia/South": "Australia/South",
"Australia/Sydney": "Australia/Sydney",
"Australia/Tasmania": "Australia/Tasmania",
"Australia/Victoria": "Australia/Victoria",
"Australia/West": "Australia/West",
"Australia/Yancowinna": "Australia/Yancowinna",
"Brazil/Acre": "Brazil/Acre",
"Brazil/DeNoronha": "Brazil/DeNoronha",
"Brazil/East": "Brazil/East",
"Brazil/West": "Brazil/West",
"CET": "CET",
"CST6CDT": "CST6CDT",
"Canada/Atlantic": "Canada/Atlantic",
"Canada/Central": "Canada/Central",
"Canada/Eastern": "Canada/Eastern",
"Canada/Mountain": "Canada/Mountain",
"Canada/Newfoundland": "Canada/Newfoundland",
"Canada/Pacific": "Canada/Pacific",
"Canada/Saskatchewan": "Canada/Saskatchewan",
"Canada/Yukon": "Canada/Yukon",
"Chile/Continental": "Chile/Continental",
"Chile/EasterIsland": "Chile/EasterIsland",
"Cuba": "Cuba",
"EET": "EET",
"EST": "EST",
"EST5EDT": "EST5EDT",
"Egypt": "Egypt",
"Eire": "Eire",
"Etc/GMT": "Etc/GMT",
"Etc/GMT+0": "Etc/GMT+0",
"Etc/GMT+1": "Etc/GMT+1",
"Etc/GMT+10": "Etc/GMT+10",
"Etc/GMT+11": "Etc/GMT+11",
"Etc/GMT+12": "Etc/GMT+12",
"Etc/GMT+2": "Etc/GMT+2",
"Etc/GMT+3": "Etc/GMT+3",
"Etc/GMT+4": "Etc/GMT+4",
"Etc/GMT+5": "Etc/GMT+5",
"Etc/GMT+6": "Etc/GMT+6",
"Etc/GMT+7": "Etc/GMT+7",
"Etc/GMT+8": "Etc/GMT+8",
"Etc/GMT+9": "Etc/GMT+9",
"Etc/GMT-0": "Etc/GMT-0",
"Etc/GMT-1": "Etc/GMT-1",
"Etc/GMT-10": "Etc/GMT-10",
"Etc/GMT-11": "Etc/GMT-11",
"Etc/GMT-12": "Etc/GMT-12",
"Etc/GMT-13": "Etc/GMT-13",
"Etc/GMT-14": "Etc/GMT-14",
"Etc/GMT-2": "Etc/GMT-2",
"Etc/GMT-3": "Etc/GMT-3",
"Etc/GMT-4": "Etc/GMT-4",
"Etc/GMT-5": "Etc/GMT-5",
"Etc/GMT-6": "Etc/GMT-6",
"Etc/GMT-7": "Etc/GMT-7",
"Etc/GMT-8": "Etc/GMT-8",
"Etc/GMT-9": "Etc/GMT-9",
"Etc/GMT0": "Etc/GMT0",
"Etc/Greenwich": "Etc/Greenwich",
"Etc/UCT": "Etc/UCT",
"Etc/UTC": "Etc/UTC",
"Etc/Universal": "Etc/Universal",
"Etc/Zulu": "Etc/Zulu",
"Europe/Amsterdam": "Europe/Amsterdam",
"Europe/Andorra": "Europe/Andorra",
"Europe/Astrakhan": "Europe/Astrakhan",
"Europe/Athens": "Europe/Athens",
"Europe/Belfast": "Europe/Belfast",
"Europe/Belgrade": "Europe/Belgrade",
"Europe/Berlin": "Europe/Berlin",
"Europe/Bratislava": "Europe/Bratislava",
"Europe/Brussels": "Europe/Brussels",
"Europe/Bucharest": "Europe/Bucharest",
"Europe/Budapest": "Europe/Budapest",
"Europe/Busingen": "Europe/Busingen",
"Europe/Chisinau": "Europe/Chisinau",
"Europe/Copenhagen": "Europe/Copenhagen",
"Europe/Dublin": "Europe/Dublin",
"Europe/Gibraltar": "Europe/Gibraltar",
"Europe/Guernsey": "Europe/Guernsey",
"Europe/Helsinki": "Europe/Helsinki",
"Europe/Isle_of_Man": "Europe/Isle_of_Man",
"Europe/Istanbul": "Europe/Istanbul",
"Europe/Jersey": "Europe/Jersey",
"Europe/Kaliningrad": "Europe/Kaliningrad",
"Europe/Kiev": "Europe/Kiev",
"Europe/Kirov": "Europe/Kirov",
"Europe/Lisbon": "Europe/Lisbon",
"Europe/Ljubljana": "Europe/Ljubljana",
"Europe/London": "Europe/London",
"Europe/Luxembourg": "Europe/Luxembourg",
"Europe/Madrid": "Europe/Madrid",
"Europe/Malta": "Europe/Malta",
"Europe/Mariehamn": "Europe/Mariehamn",
"Europe/Minsk": "Europe/Minsk",
"Europe/Monaco": "Europe/Monaco",
"Europe/Moscow": "Europe/Moscow",
"Europe/Nicosia": "Europe/Nicosia",
"Europe/Oslo": "Europe/Oslo",
"Europe/Paris": "Europe/Paris",
"Europe/Podgorica": "Europe/Podgorica",
"Europe/Prague": "Europe/Prague",
"Europe/Riga": "Europe/Riga",
"Europe/Rome": "Europe/Rome",
"Europe/Samara": "Europe/Samara",
"Europe/San_Marino": "Europe/San_Marino",
"Europe/Sarajevo": "Europe/Sarajevo",
"Europe/Saratov": "Europe/Saratov",
"Europe/Simferopol": "Europe/Simferopol",
"Europe/Skopje": "Europe/Skopje",
"Europe/Sofia": "Europe/Sofia",
"Europe/Stockholm": "Europe/Stockholm",
"Europe/Tallinn": "Europe/Tallinn",
"Europe/Tirane": "Europe/Tirane",
"Europe/Tiraspol": "Europe/Tiraspol",
"Europe/Ulyanovsk": "Europe/Ulyanovsk",
"Europe/Uzhgorod": "Europe/Uzhgorod",
"Europe/Vaduz": "Europe/Vaduz",
"Europe/Vatican": "Europe/Vatican",
"Europe/Vienna": "Europe/Vienna",
"Europe/Vilnius": "Europe/Vilnius",
"Europe/Volgograd": "Europe/Volgograd",
"Europe/Warsaw": "Europe/Warsaw",
"Europe/Zagreb": "Europe/Zagreb",
"Europe/Zaporozhye": "Europe/Zaporozhye",
"Europe/Zurich": "Europe/Zurich",
"GB": "GB",
"GB-Eire": "GB-Eire",
"GMT": "GMT",
"GMT+0": "GMT+0",
"GMT-0": "GMT-0",
"GMT0": "GMT0",
"Greenwich": "Greenwich",
"HST": "HST",
"Hongkong": "Hongkong",
"Iceland": "Iceland",
"Indian/Antananarivo": "Indian/Antananarivo",
"Indian/Chagos": "Indian/Chagos",
"Indian/Christmas": "Indian/Christmas",
"Indian/Cocos": "Indian/Cocos",
"Indian/Comoro": "Indian/Comoro",
"Indian/Kerguelen": "Indian/Kerguelen",
"Indian/Mahe": "Indian/Mahe",
"Indian/Maldives": "Indian/Maldives",
"Indian/Mauritius": "Indian/Mauritius",
"Indian/Mayotte": "Indian/Mayotte",
"Indian/Reunion": "Indian/Reunion",
"Iran": "Iran",
"Israel": "Israel",
"Jamaica": "Jamaica",
"Japan": "Japan",
"Kwajalein": "Kwajalein",
"Libya": "Libya",
"MET": "MET",
"MST": "MST",
"MST7MDT": "MST7MDT",
"Mexico/BajaNorte": "Mexico/BajaNorte",
"Mexico/BajaSur": "Mexico/BajaSur",
"Mexico/General": "Mexico/General",
"NZ": "NZ",
"NZ-CHAT": "NZ-CHAT",
"Navajo": "Navajo",
"PRC": "PRC",
"PST8PDT": "PST8PDT",
"Pacific/Apia": "Pacific/Apia",
"Pacific/Auckland": "Pacific/Auckland",
"Pacific/Bougainville": "Pacific/Bougainville",
"Pacific/Chatham": "Pacific/Chatham",
"Pacific/Chuuk": "Pacific/Chuuk",
"Pacific/Easter": "Pacific/Easter",
"Pacific/Efate": "Pacific/Efate",
"Pacific/Enderbury": "Pacific/Enderbury",
"Pacific/Fakaofo": "Pacific/Fakaofo",
"Pacific/Fiji": "Pacific/Fiji",
"Pacific/Funafuti": "Pacific/Funafuti",
"Pacific/Galapagos": "Pacific/Galapagos",
"Pacific/Gambier": "Pacific/Gambier",
"Pacific/Guadalcanal": "Pacific/Guadalcanal",
"Pacific/Guam": "Pacific/Guam",
"Pacific/Honolulu": "Pacific/Honolulu",
"Pacific/Johnston": "Pacific/Johnston",
"Pacific/Kiritimati": "Pacific/Kiritimati",
"Pacific/Kosrae": "Pacific/Kosrae",
"Pacific/Kwajalein": "Pacific/Kwajalein",
"Pacific/Majuro": "Pacific/Majuro",
"Pacific/Marquesas": "Pacific/Marquesas",
"Pacific/Midway": "Pacific/Midway",
"Pacific/Nauru": "Pacific/Nauru",
"Pacific/Niue": "Pacific/Niue",
"Pacific/Norfolk": "Pacific/Norfolk",
"Pacific/Noumea": "Pacific/Noumea",
"Pacific/Pago_Pago": "Pacific/Pago_Pago",
"Pacific/Palau": "Pacific/Palau",
"Pacific/Pitcairn": "Pacific/Pitcairn",
"Pacific/Pohnpei": "Pacific/Pohnpei",
"Pacific/Ponape": "Pacific/Ponape",
"Pacific/Port_Moresby": "Pacific/Port_Moresby",
"Pacific/Rarotonga": "Pacific/Rarotonga",
"Pacific/Saipan": "Pacific/Saipan",
"Pacific/Samoa": "Pacific/Samoa",
"Pacific/Tahiti": "Pacific/Tahiti",
"Pacific/Tarawa": "Pacific/Tarawa",
"Pacific/Tongatapu": "Pacific/Tongatapu",
"Pacific/Truk": "Pacific/Truk",
"Pacific/Wake": "Pacific/Wake",
"Pacific/Wallis": "Pacific/Wallis",
"Pacific/Yap": "Pacific/Yap",
"Poland": "Poland",
"Portugal": "Portugal",
"ROC": "ROC",
"ROK": "ROK",
"Singapore": "Singapore",
"Turkey": "Turkey",
"UCT": "UCT",
"US/Alaska": "US/Alaska",
"US/Aleutian": "US/Aleutian",
"US/Arizona": "US/Arizona",
"US/Central": "US/Central",
"US/East-Indiana": "US/East-Indiana",
"US/Eastern": "US/Eastern",
"US/Hawaii": "US/Hawaii",
"US/Indiana-Starke": "US/Indiana-Starke",
"US/Michigan": "US/Michigan",
"US/Mountain": "US/Mountain",
"US/Pacific": "US/Pacific",
"US/Pacific-New": "US/Pacific-New",
"US/Samoa": "US/Samoa",
"UTC": "UTC",
"Universal": "Universal",
"W-SU": "W-SU",
"WET": "WET",
"Zulu": "Zulu"
}
},
"group": {
"label": "Group",

View File

@ -2,7 +2,602 @@
"common": {
"search": "검색",
"searchWord": "검색어",
"useOnlyForSpecialCharacter": "특수문자는 {{0}}만 사용할 수 있습니다."
"useOnlyForSpecialCharacter": "특수문자는 {{0}}만 사용할 수 있습니다.",
"timezone": {
"Africa/Abidjan": "아프리카/아비 장",
"Africa/Accra": "아프리카/아크라",
"Africa/Addis_Ababa": "아프리카/아디스 아바바",
"Africa/Algiers": "아프리카/알제",
"Africa/Asmara": "아프리카/아스 마라",
"Africa/Asmera": "아프리카/아스 메라",
"Africa/Bamako": "아프리카/바마코",
"Africa/Bangui": "아프리카/반 귀이",
"Africa/Banjul": "아프리카/반줄",
"Africa/Bissau": "아프리카/비사우",
"Africa/Blantyre": "아프리카/블랜 타이어",
"Africa/Brazzaville": "아프리카/브라자빌",
"Africa/Bujumbura": "아프리카/부줌 부라",
"Africa/Cairo": "아프리카/카이로",
"Africa/Casablanca": "아프리카/카사 블랑카",
"Africa/Ceuta": "아프리카/세 우타",
"Africa/Conakry": "아프리카/코나 크리",
"Africa/Dakar": "아프리카/다카르",
"Africa/Dar_es_Salaam": "아프리카/다르 에스 살람",
"Africa/Djibouti": "아프리카/지부티",
"Africa/Douala": "아프리카/두 알라",
"Africa/El_Aaiun": "아프리카/엘 아이 운",
"Africa/Freetown": "아프리카/프리 타운",
"Africa/Gaborone": "아프리카/가보 로네",
"Africa/Harare": "아프리카/해러",
"Africa/Johannesburg": "아프리카/요하네스 버그",
"Africa/Juba": "아프리카/유바",
"Africa/Kampala": "아프리카/캄팔라",
"Africa/Khartoum": "아프리카/하르툼",
"Africa/Kigali": "아프리카/키 갈리",
"Africa/Kinshasa": "아프리카/킨 샤사",
"Africa/Lagos": "아프리카/라고스",
"Africa/Libreville": "아프리카/리버빌",
"Africa/Lome": "아프리카/로마",
"Africa/Luanda": "아프리카/루안다",
"Africa/Lubumbashi": "아프리카/루 붐바시",
"Africa/Lusaka": "아프리카/루사카",
"Africa/Malabo": "아프리카/말라 보",
"Africa/Maputo": "아프리카/마푸토",
"Africa/Maseru": "아프리카/마세 루",
"Africa/Mbabane": "아프리카/음 바바 네",
"Africa/Mogadishu": "아프리카/모가디슈",
"Africa/Monrovia": "아프리카/몬로 비아",
"Africa/Nairobi": "아프리카/나이로비",
"Africa/Ndjamena": "아프리카/냐자 메나",
"Africa/Niamey": "아프리카/니암",
"Africa/Nouakchott": "아프리카/누악 쇼트",
"Africa/Ouagadougou": "아프리카/오아가 두구",
"Africa/Porto-Novo": "아프리카/포르토 노보",
"Africa/Sao_Tome": "아프리카/사 오토메",
"Africa/Timbuktu": "아프리카/팀북투",
"Africa/Tripoli": "아프리카/트리폴리",
"Africa/Tunis": "아프리카/튀니지",
"Africa/Windhoek": "아프리카/빈트 후크",
"America/Adak": "아메리카/아닥",
"America/Anchorage": "아메리카/앵커리지",
"America/Anguilla": "아메리카/앵귈라",
"America/Antigua": "아메리카/안티구아",
"America/Araguaina": "아메리카/아라구아나",
"America/Argentina/Buenos_Aires": "아메리카/아르헨티나/부에노스 아이레스",
"America/Argentina/Catamarca": "아메리카/아르헨티나/카타 마르카",
"America/Argentina/ComodRivadavia": "아메리카/아르헨티나/코모드 리바다비아",
"America/Argentina/Cordoba": "아메리카/아르헨티나/코르도바",
"America/Argentina/Jujuy": "아메리카/아르헨티나/주이",
"America/Argentina/La_Rioja": "아메리카/아르헨티나/라 리오하",
"America/Argentina/Mendoza": "아메리카/아르헨티나/멘도사",
"America/Argentina/Rio_Gallegos": "아메리카/아르헨티나/리오 갈레고스",
"America/Argentina/Salta": "아메리카/아르헨티나/살타",
"America/Argentina/San_Juan": "아메리카/아르헨티나/산후 안",
"America/Argentina/San_Luis": "아메리카/아르헨티나/산 루이스",
"America/Argentina/Tucuman": "아메리카/아르헨티나/투쿠 만",
"America/Argentina/Ushuaia": "아메리카/아르헨티나/우수아",
"America/Aruba": "아메리카/아루바",
"America/Asuncion": "아메리카/아순시온",
"America/Atikokan": "아메리카/아 티코 칸",
"America/Atka": "아메리카/아트카",
"America/Bahia": "아메리카/바이아",
"America/Bahia_Banderas": "아메리카/바이아 반데라스",
"America/Barbados": "아메리카/바베이도스",
"America/Belem": "아메리카/벨렘",
"America/Belize": "아메리카/벨리즈",
"America/Blanc-Sablon": "아메리카/블랑-사블 론",
"America/Boa_Vista": "아메리카/보아 비스타",
"America/Bogota": "아메리카/보고타",
"America/Boise": "아메리카/보이즈",
"America/Buenos_Aires": "아메리카/부에노스 아이레스",
"America/Cambridge_Bay": "아메리카/캠브리지 _ 베이",
"America/Campo_Grande": "아메리카/캄포 그란데",
"America/Cancun": "아메리카/칸쿤",
"America/Caracas": "아메리카/카라카스",
"America/Catamarca": "아메리카/카타 마르카",
"America/Cayenne": "아메리카/카이엔",
"America/Cayman": "아메리카/케이맨",
"America/Chicago": "아메리카/시카고",
"America/Chihuahua": "아메리카/치와와",
"America/Coral_Harbour": "아메리카/코럴 하버",
"America/Cordoba": "아메리카/코르도바",
"America/Costa_Rica": "아메리카/코스타리카",
"America/Creston": "아메리카/크레 스턴",
"America/Cuiaba": "아메리카/쿠이 아바",
"America/Curacao": "아메리카/쿠라 카오",
"America/Danmarkshavn": "아메리카/단마크하븐",
"America/Dawson": "아메리카/도슨",
"America/Dawson_Creek": "아메리카/도슨 크릭",
"America/Denver": "아메리카/덴버",
"America/Detroit": "아메리카/디트로이트",
"America/Dominica": "아메리카/도미니카",
"America/Edmonton": "아메리카/에드먼턴",
"America/Eirunepe": "아메리카/에루네페",
"America/El_Salvador": "아메리카/엘살바도르",
"America/Ensenada": "아메리카/엔 세나다",
"America/Fort_Nelson": "아메리카/포트 넬슨",
"America/Fort_Wayne": "아메리카/포트 웨인",
"America/Fortaleza": "아메리카/포르탈레자",
"America/Glace_Bay": "아메리카/그레이스 베이",
"America/Godthab": "아메리카/고트 하브",
"America/Goose_Bay": "아메리카/구스 베이",
"America/Grand_Turk": "아메리카/그랜드 터크",
"America/Grenada": "아메리카/그레나다",
"America/Guadeloupe": "아메리카/과들루프",
"America/Guatemala": "아메리카/과테말라",
"America/Guayaquil": "아메리카/과야퀼",
"America/Guyana": "아메리카/가이아나",
"America/Halifax": "아메리카/할리팩스",
"America/Havana": "아메리카/하바나",
"America/Hermosillo": "아메리카/헤르모실로",
"America/Indiana/Indianapolis": "아메리카/인디애나/인디애나폴리스",
"America/Indiana/Knox": "아메리카/인디애나/녹스",
"America/Indiana/Marengo": "아메리카/인디애나/마렝고",
"America/Indiana/Petersburg": "아메리카/인디애나/피터스버그",
"America/Indiana/Tell_City": "아메리카/인디애나/텔시티",
"America/Indiana/Vevay": "아메리카/인디애나/비베이",
"America/Indiana/Vincennes": "아메리카/인디애나/빈센테",
"America/Indiana/Winamac": "아메리카/인디애나/윈아멕",
"America/Indianapolis": "아메리카/인디애나폴리스",
"America/Inuvik": "아메리카/이누빅",
"America/Iqaluit": "아메리카/이칼루이트",
"America/Jamaica": "아메리카/자메이카",
"America/Jujuy": "아메리카/주이",
"America/Juneau": "아메리카/주노",
"America/Kentucky/Louisville": "아메리카/켄터키/루이스 빌",
"America/Kentucky/Monticello": "아메리카/켄터키/몬티 첼로",
"America/Knox_IN": "아메리카/녹스 IN",
"America/Kralendijk": "아메리카/크라랜디직",
"America/La_Paz": "아메리카/라 파즈",
"America/Lima": "아메리카/리마",
"America/Los_Angeles": "아메리카/로스 앤젤레스",
"America/Louisville": "아메리카/루이스 빌",
"America/Lower_Princes": "아메리카/하위 프린스",
"America/Maceio": "아메리카/마세 이오",
"America/Managua": "아메리카/마나과",
"America/Manaus": "아메리카/마나우스",
"America/Marigot": "아메리카/마리 고",
"America/Martinique": "아메리카/마르티니크",
"America/Matamoros": "아메리카/마타 모로",
"America/Mazatlan": "아메리카/마자 틀란",
"America/Mendoza": "아메리카/멘도사",
"America/Menominee": "아메리카/메노 민",
"America/Merida": "아메리카/메리다",
"America/Metlakatla": "아메리카/메틀 라카 틀라",
"America/Mexico_City": "아메리카/멕시코시티",
"America/Miquelon": "아메리카/미켈론",
"America/Moncton": "아메리카/몬크톤",
"America/Monterrey": "아메리카/몬테레이",
"America/Montevideo": "아메리카/몬테비데오",
"America/Montreal": "아메리카/몬트리올",
"America/Montserrat": "아메리카/몬체 라트",
"America/Nassau": "아메리카/나소",
"America/New_York": "아메리카/뉴욕",
"America/Nipigon": "아메리카/니피곤",
"America/Nome": "아메리카/노메",
"America/Noronha": "아메리카/노로냐",
"America/North_Dakota/Beulah": "아메리카/노스 다코타/부라",
"America/North_Dakota/Center": "아메리카/노스 다코타/센터",
"America/North_Dakota/New_Salem": "아메리카/노스 다코타/뉴 살렘",
"America/Ojinaga": "아메리카/오지나가",
"America/Panama": "아메리카/파나마",
"America/Pangnirtung": "아메리카/판니르퉁",
"America/Paramaribo": "아메리카/파라마리보",
"America/Phoenix": "아메리카/피닉스",
"America/Port-au-Prince": "아메리카/포트 오 프린스",
"America/Port_of_Spain": "아메리카/포트 오브 스페인",
"America/Porto_Acre": "아메리카/포르토 아크레",
"America/Porto_Velho": "아메리카/포르토 벨호",
"America/Puerto_Rico": "아메리카/푸에르토 리코",
"America/Punta_Arenas": "아메리카/푼타 아레나",
"America/Rainy_River": "아메리카/레이니 리버",
"America/Rankin_Inlet": "아메리카/랜킨 인렛",
"America/Recife": "아메리카/레시페",
"America/Regina": "아메리카/레지나",
"America/Resolute": "아메리카/리졸루트",
"America/Rio_Branco": "아메리카/리오 브랑코",
"America/Rosario": "아메리카/로자리오",
"America/Santa_Isabel": "아메리카/산타 이사벨",
"America/Santarem": "아메리카/산타렘",
"America/Santiago": "아메리카/산티아고",
"America/Santo_Domingo": "아메리카/산토 도밍고",
"America/Sao_Paulo": "아메리카/상파울루",
"America/Scoresbysund": "아메리카/스코어스비순드",
"America/Shiprock": "아메리카/쉽락",
"America/Sitka": "아메리카/싯카",
"America/St_Barthelemy": "아메리카/세인트 바델레미",
"America/St_Johns": "아메리카/세인트 존스",
"America/St_Kitts": "아메리카/세인트 키츠",
"America/St_Lucia": "아메리카/세인트 루시아",
"America/St_Thomas": "아메리카/세인트 토마스",
"America/St_Vincent": "아메리카/세인트 빈센트",
"America/Swift_Current": "아메리카/스위프트 커런트",
"America/Tegucigalpa": "아메리카/테구시갈파",
"America/Thule": "아메리카/툴레",
"America/Thunder_Bay": "아메리카/선더 베이",
"America/Tijuana": "아메리카/티후아나",
"America/Toronto": "아메리카/토론토",
"America/Tortola": "아메리카/토르톨라",
"America/Vancouver": "아메리카/밴쿠버",
"America/Virgin": "아메리카/버진",
"America/Whitehorse": "아메리카/화이트호스",
"America/Winnipeg": "아메리카/위니펙",
"America/Yakutat": "아메리카/야쿠타트",
"America/Yellowknife": "아메리카/옐로나이프",
"Antarctica/Casey": "남극/케이시",
"Antarctica/Davis": "남극/데이비스",
"Antarctica/DumontDUrville": "남극/듀몽듀르빌",
"Antarctica/Macquarie": "남극/맥쿼리",
"Antarctica/Mawson": "남극/모손",
"Antarctica/McMurdo": "남극 대륙/맥머도",
"Antarctica/Palmer": "남극/팔머",
"Antarctica/Rothera": "남극/로 데라",
"Antarctica/South_Pole": "남극/남극",
"Antarctica/Syowa": "남극/요와",
"Antarctica/Troll": "남극/트롤",
"Antarctica/Vostok": "남극/보스 토크",
"Arctic/Longyearbyen": "북극/롱 이어 비엔",
"Asia/Aden": "아시아/아덴",
"Asia/Almaty": "아시아/알마티",
"Asia/Amman": "아시아/암만",
"Asia/Anadyr": "아시아/아나 디르",
"Asia/Aqtau": "아시아/악 타우",
"Asia/Aqtobe": "아시아/악 토베",
"Asia/Ashgabat": "아시아/아시가 바트",
"Asia/Ashkhabad": "아시아/아쉬 카바 드",
"Asia/Atyrau": "아시아/아티 라우",
"Asia/Baghdad": "아시아/바그다드",
"Asia/Bahrain": "아시아/바레인",
"Asia/Baku": "아시아/바쿠",
"Asia/Bangkok": "아시아/방콕",
"Asia/Barnaul": "아시아/바르나울",
"Asia/Beirut": "아시아/베이루트",
"Asia/Bishkek": "아시아/비슈케크",
"Asia/Brunei": "아시아/브루나이",
"Asia/Calcutta": "아시아/캘커타",
"Asia/Chita": "아시아/치타",
"Asia/Choibalsan": "아시아/최발산",
"Asia/Chongqing": "아시아/충칭",
"Asia/Chungking": "아시아/청킹",
"Asia/Colombo": "아시아/콜롬보",
"Asia/Dacca": "아시아/다카",
"Asia/Damascus": "아시아/다마스커스",
"Asia/Dhaka": "아시아/다카",
"Asia/Dili": "아시아/힌디어",
"Asia/Dubai": "아시아/두바이",
"Asia/Dushanbe": "아시아/두샨베",
"Asia/Famagusta": "아시아/파 마구 스타",
"Asia/Gaza": "아시아/가자",
"Asia/Harbin": "아시아/하얼빈",
"Asia/Hebron": "아시아/헤브론",
"Asia/Ho_Chi_Minh": "아시아/호치민",
"Asia/Hong_Kong": "아시아/홍콩",
"Asia/Hovd": "아시아/호브드",
"Asia/Irkutsk": "아시아/이르쿠츠크",
"Asia/Istanbul": "아시아/이스탄불",
"Asia/Jakarta": "아시아/자카르타",
"Asia/Jayapura": "아시아/자야푸라",
"Asia/Jerusalem": "아시아/예루살렘",
"Asia/Kabul": "아시아/카불",
"Asia/Kamchatka": "아시아/캄차카",
"Asia/Karachi": "아시아/카라치",
"Asia/Kashgar": "아시아/카슈가르",
"Asia/Kathmandu": "아시아/카트만두",
"Asia/Katmandu": "아시아/카트만두",
"Asia/Khandyga": "아시아/칸디가",
"Asia/Kolkata": "아시아/콜카타",
"Asia/Krasnoyarsk": "아시아/크라스 노야 르 스크",
"Asia/Kuala_Lumpur": "아시아/쿠알라 룸푸르",
"Asia/Kuching": "아시아/쿠칭",
"Asia/Kuwait": "아시아/쿠웨이트",
"Asia/Macao": "아시아/마카오",
"Asia/Macau": "아시아/마카오",
"Asia/Magadan": "아시아/마가 단",
"Asia/Makassar": "아시아/마카 사르",
"Asia/Manila": "아시아/마닐라",
"Asia/Muscat": "아시아/무스카트",
"Asia/Nicosia": "아시아/니코 시아",
"Asia/Novokuznetsk": "아시아/노보 쿠즈네츠 크",
"Asia/Novosibirsk": "아시아/노보시비르스크",
"Asia/Omsk": "아시아/옴 스크",
"Asia/Oral": "아시아/오랄",
"Asia/Phnom_Penh": "아시아/프놈펜",
"Asia/Pontianak": "아시아/폰티아낙",
"Asia/Pyongyang": "아시아/평양",
"Asia/Qatar": "아시아/카타르",
"Asia/Qostanay": "아시아/쿠스타나이",
"Asia/Qyzylorda": "아시아/키질로르다",
"Asia/Rangoon": "아시아/랑군",
"Asia/Riyadh": "아시아/리야드",
"Asia/Saigon": "아시아/사이공",
"Asia/Sakhalin": "아시아/사할린",
"Asia/Samarkand": "아시아/사마르 칸트",
"Asia/Seoul": "아시아/서울",
"Asia/Shanghai": "아시아/상하이",
"Asia/Singapore": "아시아/싱가포르",
"Asia/Srednekolymsk": "아시아/스레 네 콜림 스크",
"Asia/Taipei": "아시아/타이페이",
"Asia/Tashkent": "아시아/타슈켄트",
"Asia/Tbilisi": "아시아/트빌리시",
"Asia/Tehran": "아시아/테헤란",
"Asia/Tel_Aviv": "아시아/텔아비브",
"Asia/Thimbu": "아시아/팀부",
"Asia/Thimphu": "아시아/팀푸",
"Asia/Tokyo": "아시아/도쿄",
"Asia/Tomsk": "아시아/톰스크",
"Asia/Ujung_Pandang": "아시아/엔드",
"Asia/Ulaanbaatar": "아시아/울란바토르",
"Asia/Ulan_Bator": "아시아/울란바토르",
"Asia/Urumqi": "아시아/우루무치",
"Asia/Ust-Nera": "아시아/우스트네라",
"Asia/Vientiane": "아시아/비엔티안",
"Asia/Vladivostok": "아시아/블라디보스토크",
"Asia/Yakutsk": "아시아/야쿠츠크",
"Asia/Yangon": "아시아/양곤",
"Asia/Yekaterinburg": "아시아/예카테린부르크",
"Asia/Yerevan": "아시아/예레반",
"Atlantic/Azores": "대서양/아조레스",
"Atlantic/Bermuda": "대서양/버뮤다",
"Atlantic/Canary": "대서양/카나리아",
"Atlantic/Cape_Verde": "대서양/카보 베르데",
"Atlantic/Faeroe": "대서양/파에로",
"Atlantic/Faroe": "대서양/파로",
"Atlantic/Jan_Mayen": "대서양/얀 마옌",
"Atlantic/Madeira": "대서양/마데이라",
"Atlantic/Reykjavik": "대서양/레이캬비크",
"Atlantic/South_Georgia": "대서양/사우스 조지아",
"Atlantic/St_Helena": "대서양/세인트 헬레나",
"Atlantic/Stanley": "대서양/스탠리",
"Australia/ACT": "오스트레일리아/ACT",
"Australia/Adelaide": "오스트레일리아/애들레이드",
"Australia/Brisbane": "오스트레일리아/브리즈번",
"Australia/Broken_Hill": "오스트레일리아/브로큰 힐",
"Australia/Canberra": "오스트레일리아/캔버라",
"Australia/Currie": "오스트레일리아/커리",
"Australia/Darwin": "오스트레일리아/다윈",
"Australia/Eucla": "오스트레일리아/유클라",
"Australia/Hobart": "오스트레일리아/호바트",
"Australia/LHI": "오스트레일리아/LHI",
"Australia/Lindeman": "오스트레일리아/린드만",
"Australia/Lord_Howe": "오스트레일리아/로드 호우",
"Australia/Melbourne": "오스트레일리아/멜버른",
"Australia/NSW": "오스트레일리아/NSW",
"Australia/North": "오스트레일리아/북부",
"Australia/Perth": "오스트레일리아/퍼스",
"Australia/Queensland": "오스트레일리아/퀸즐랜드",
"Australia/South": "오스트레일리아/남부",
"Australia/Sydney": "오스트레일리아/시드니",
"Australia/Tasmania": "오스트레일리아/태즈 매니아",
"Australia/Victoria": "오스트레일리아/빅토리아",
"Australia/West": "오스트레일리아/서부",
"Australia/Yancowinna": "오스트레일리아/얀 카우 나",
"Brazil/Acre": "브라질/에이커",
"Brazil/DeNoronha": "브라질/드노르온하",
"Brazil/East": "브라질/동부",
"Brazil/West": "브라질/서부",
"CET": "CET",
"CST6CDT": "CST6CDT",
"Canada/Atlantic": "캐나다/대서양",
"Canada/Central": "캐나다/중앙",
"Canada/Eastern": "캐나다/동부",
"Canada/Mountain": "캐나다/마운틴",
"Canada/Newfoundland": "캐나다/뉴펀들랜드",
"Canada/Pacific": "캐나다/태평양",
"Canada/Saskatchewan": "캐나다/서스캐처원",
"Canada/Yukon": "캐나다/유콘",
"Chile/Continental": "칠레/컨티넨탈",
"Chile/EasterIsland": "칠레/이스터섬",
"Cuba": "쿠바",
"EET": "EET",
"EST": "EST",
"EST5EDT": "EST5EDT",
"Egypt": "이집트",
"Eire": "에이레",
"Etc/GMT": "기타/GMT",
"Etc/GMT+0": "기타/GMT+0",
"Etc/GMT+1": "기타/GMT+1",
"Etc/GMT+10": "기타/GMT+10",
"Etc/GMT+11": "기타/GMT+11",
"Etc/GMT+12": "기타/GMT+12",
"Etc/GMT+2": "기타/GMT+2",
"Etc/GMT+3": "기타/GMT+3",
"Etc/GMT+4": "기타/GMT+4",
"Etc/GMT+5": "기타/GMT+5",
"Etc/GMT+6": "기타/GMT+6",
"Etc/GMT+7": "기타/GMT+7",
"Etc/GMT+8": "기타/GMT+8",
"Etc/GMT+9": "기타/GMT+9",
"Etc/GMT-0": "기타/GMT-0",
"Etc/GMT-1": "기타/GMT-1",
"Etc/GMT-10": "기타/GMT-10",
"Etc/GMT-11": "기타/GMT-11",
"Etc/GMT-12": "기타/GMT-12",
"Etc/GMT-13": "기타/GMT-13",
"Etc/GMT-14": "기타/GMT-14",
"Etc/GMT-2": "기타/GMT-2",
"Etc/GMT-3": "기타/GMT-3",
"Etc/GMT-4": "기타/GMT-4",
"Etc/GMT-5": "기타/GMT-5",
"Etc/GMT-6": "기타/GMT-6",
"Etc/GMT-7": "기타/GMT-7",
"Etc/GMT-8": "기타/GMT-8",
"Etc/GMT-9": "기타/GMT-9",
"Etc/GMT0": "기타/GMT0",
"Etc/Greenwich": "기타/그리니치",
"Etc/UCT": "기타/UCT",
"Etc/UTC": "기타/UTC",
"Etc/Universal": "기타/유니버설",
"Etc/Zulu": "기타/줄루",
"Europe/Amsterdam": "유럽/암스테르담",
"Europe/Andorra": "유럽/안도라",
"Europe/Astrakhan": "유럽/아스트라칸",
"Europe/Athens": "유럽/아테네",
"Europe/Belfast": "유럽/벨파스트",
"Europe/Belgrade": "유럽/베오그라드",
"Europe/Berlin": "유럽/베를린",
"Europe/Bratislava": "유럽/브라티슬라바",
"Europe/Brussels": "유럽/브뤼셀",
"Europe/Bucharest": "유럽/부쿠레슈티",
"Europe/Budapest": "유럽/부다페스트",
"Europe/Busingen": "유럽/빙고",
"Europe/Chisinau": "유럽/치사 나우",
"Europe/Copenhagen": "유럽/코펜하겐",
"Europe/Dublin": "유럽/더블린",
"Europe/Gibraltar": "유럽/지브롤터",
"Europe/Guernsey": "유럽/건지",
"Europe/Helsinki": "유럽/헬싱키",
"Europe/Isle_of_Man": "유럽/아일 오브 맨",
"Europe/Istanbul": "유럽/이스탄불",
"Europe/Jersey": "유럽/저지",
"Europe/Kaliningrad": "유럽/칼리닌그라드",
"Europe/Kiev": "유럽/키예프",
"Europe/Kirov": "유럽/키로프",
"Europe/Lisbon": "유럽/리스본",
"Europe/Ljubljana": "유럽/류블 랴나",
"Europe/London": "유럽/런던",
"Europe/Luxembourg": "유럽/룩셈부르크",
"Europe/Madrid": "유럽/마드리드",
"Europe/Malta": "유럽/몰타",
"Europe/Mariehamn": "유럽/마리에 함",
"Europe/Minsk": "유럽/민스크",
"Europe/Monaco": "유럽/모나코",
"Europe/Moscow": "유럽/모스크바",
"Europe/Nicosia": "유럽/니코 시아",
"Europe/Oslo": "유럽/오슬로",
"Europe/Paris": "유럽/파리",
"Europe/Podgorica": "유럽/포드로 리카",
"Europe/Prague": "유럽/프라하",
"Europe/Riga": "유럽/리가",
"Europe/Rome": "유럽/로마",
"Europe/Samara": "유럽/사마라",
"Europe/San_Marino": "유럽/산 마리노",
"Europe/Sarajevo": "유럽/사라예보",
"Europe/Saratov": "유럽/사라 토프",
"Europe/Simferopol": "유럽/심 페로 폴",
"Europe/Skopje": "유럽/스코 페",
"Europe/Sofia": "유럽/소피아",
"Europe/Stockholm": "유럽/스톡홀름",
"Europe/Tallinn": "유럽/탈린",
"Europe/Tirane": "유럽/티 라네",
"Europe/Tiraspol": "유럽/티라스 폴",
"Europe/Ulyanovsk": "유럽/울리 야놉 스크",
"Europe/Uzhgorod": "유럽/우즈 고로드",
"Europe/Vaduz": "유럽/파두 츠",
"Europe/Vatican": "유럽/바티칸",
"Europe/Vienna": "유럽/비엔나",
"Europe/Vilnius": "유럽/빌니우스",
"Europe/Volgograd": "유럽/볼고그라드",
"Europe/Warsaw": "유럽/바르샤바",
"Europe/Zagreb": "유럽/자그레브",
"Europe/Zaporozhye": "유럽/자포 로제",
"Europe/Zurich": "유럽/취리히",
"GB": "GB",
"GB-Eire": "GB-Eire",
"GMT": "GMT",
"GMT+0": "GMT+0",
"GMT-0": "GMT-0",
"GMT0": "GMT0",
"Greenwich": "그리니치",
"HST": "HST",
"Hongkong": "홍콩",
"Iceland": "아이슬란드",
"Indian/Antananarivo": "인도/안타나나리보",
"Indian/Chagos": "인도/차고 스",
"Indian/Christmas": "인도/크리스마스",
"Indian/Cocos": "인도/코코스",
"Indian/Comoro": "인도/코모로",
"Indian/Kerguelen": "인도/케르겔렌",
"Indian/Mahe": "인도/마헤",
"Indian/Maldives": "인도/몰디브",
"Indian/Mauritius": "인도/모리셔스",
"Indian/Mayotte": "인도/마 요트",
"Indian/Reunion": "인도/리유니언",
"Iran": "이란",
"Israel": "이스라엘",
"Jamaica": "자메이카",
"Japan": "일본",
"Kwajalein": "콰잘 레인",
"Libya": "리비아",
"MET": "MET",
"MST": "MST",
"MST7MDT": "MST7MDT",
"Mexico/BajaNorte": "멕시코/바하 노르 테",
"Mexico/BajaSur": "멕시코/바하 수르",
"Mexico/General": "멕시코/제너럴",
"NZ": "NZ",
"NZ-CHAT": "NZ-CHAT",
"Navajo": "나바호",
"PRC": "PRC",
"PST8PDT": "PST8PDT",
"Pacific/Apia": "태평양/아피아",
"Pacific/Auckland": "태평양/오클랜드",
"Pacific/Bougainville": "태평양/부 겐빌",
"Pacific/Chatham": "태평양/채텀",
"Pacific/Chuuk": "태평양/축",
"Pacific/Easter": "태평양/이스터",
"Pacific/Efate": "태평양/이파테",
"Pacific/Enderbury": "태평양/엔더버리",
"Pacific/Fakaofo": "태평양/파카오포",
"Pacific/Fiji": "태평양/피지",
"Pacific/Funafuti": "태평양/후나후티",
"Pacific/Galapagos": "태평양/갈라파고스",
"Pacific/Gambier": "태평양/겜비어",
"Pacific/Guadalcanal": "태평양/과달카날",
"Pacific/Guam": "태평양/괌",
"Pacific/Honolulu": "태평양/호놀룰루",
"Pacific/Johnston": "태평양/존스턴",
"Pacific/Kiritimati": "태평양/키리 티 마티",
"Pacific/Kosrae": "태평양/코스 라에",
"Pacific/Kwajalein": "태평양/콰자 레인",
"Pacific/Majuro": "태평양/마주로",
"Pacific/Marquesas": "태평양/마르크사",
"Pacific/Midway": "퍼시픽/미드웨이",
"Pacific/Nauru": "태평양/나우루",
"Pacific/Niue": "태평양/니우에",
"Pacific/Norfolk": "태평양/노퍽",
"Pacific/Noumea": "태평양/누메아",
"Pacific/Pago_Pago": "태평양/파고 파고",
"Pacific/Palau": "태평양/팔라우",
"Pacific/Pitcairn": "태평양/핏 케언",
"Pacific/Pohnpei": "태평양/퐁 페이",
"Pacific/Ponape": "태평양/포네이프",
"Pacific/Port_Moresby": "태평양/포트 모르즈비",
"Pacific/Rarotonga": "태평양/로로 통가",
"Pacific/Saipan": "태평양/사이판",
"Pacific/Samoa": "태평양/사모아",
"Pacific/Tahiti": "태평양/타히티",
"Pacific/Tarawa": "태평양/타라와",
"Pacific/Tongatapu": "태평양/통가 타푸",
"Pacific/Truk": "태평양/트럭",
"Pacific/Wake": "퍼시픽/웨이크",
"Pacific/Wallis": "태평양/왈리스",
"Pacific/Yap": "태평양/야프",
"Poland": "폴란드",
"Portugal": "포르투갈",
"ROC": "ROC",
"ROK": "ROK",
"Singapore": "싱가포르",
"Turkey": "터키",
"UCT": "UCT",
"US/Alaska": "미국/알래스카",
"US/Aleutian": "미국/알류 티안",
"US/Arizona": "미국/애리조나",
"US/Central": "미국/중앙",
"US/East-Indiana": "미국/동부 인디애나",
"US/Eastern": "미국/동부",
"US/Hawaii": "미국/하와이",
"US/Indiana-Starke": "미국/인디애나-스타크",
"US/Michigan": "미국/미시간",
"US/Mountain": "미국/마운틴",
"US/Pacific": "미국/태평양",
"US/Pacific-New": "미국/태평양 뉴",
"US/Samoa": "미국/사모아",
"UTC": "UTC",
"Universal": "유니버설",
"W-SU": "W-SU",
"WET": "WET",
"Zulu": "줄루"
}
},
"group": {
"label": "그룹",

View File

@ -45,7 +45,7 @@ export const environment: Environment = {
locale: 'ko',
hrInfoLocale: 'ko',
startupHideWindow: false,
timezone: '+9'
timezone: 'Asia/Seoul'
},
notification: {
chatMessage: true

View File

@ -45,7 +45,7 @@ export const environment: Environment = {
locale: 'ko',
hrInfoLocale: 'ko',
startupHideWindow: false,
timezone: '+9'
timezone: 'Asia/Seoul'
},
notification: {
chatMessage: true

View File

@ -45,7 +45,7 @@ export const environment: Environment = {
locale: 'ko',
hrInfoLocale: 'ko',
startupHideWindow: false,
timezone: '+9'
timezone: 'Asia/Seoul'
},
notification: {
chatMessage: true

View File

@ -45,7 +45,7 @@ export const environment: Environment = {
locale: 'ko',
hrInfoLocale: 'ko',
startupHideWindow: false,
timezone: '+9'
timezone: 'Asia/Seoul'
},
notification: {
chatMessage: true

View File

@ -1,7 +1,7 @@
<div class="date-split">
<span class="line"></span>
<span class="date">{{
this.message.sendDate | dateToStringFormat: 'YYYY.MM.DD KL'
this.message.sendDate | ucapDate: 'YYYY.MM.DD dddd'
}}</span>
<span class="line"></span>
</div>

View File

@ -18,7 +18,7 @@
{{ message.title }}
</span>
<span class="dept">
{{ message.regDate | dateToStringFormat: 'MM:DD' }}
{{ message.regDate | ucapDate: 'MM:DD' }}
</span>
</div>
</dd>

View File

@ -63,7 +63,9 @@
</div>
<div class="date">
{{ roomInfo.finalEventDate | dateToStringChatList }}
<!-- {{ roomInfo.finalEventDate | dateToStringChatList }}
.. -->
{{ roomInfo.finalEventDate | ucapDate: 'C' }}
</div>
</dd>
<dd *ngIf="checkable">

View File

@ -118,11 +118,11 @@
[value]="setting.timezone"
(selectionChange)="onSelectionChangeTimezone($event)"
>
<mat-option value="ko-KR">
한국어 (대한민국)
</mat-option>
<mat-option value="en-US">
영어 (미국)
<mat-option
*ngFor="let timezone of timezoneList"
[value]="timezone.name"
>
{{ timezone.displayName }}
</mat-option>
</mat-select>
</mat-form-field>

View File

@ -5,8 +5,13 @@ import {
Output,
EventEmitter,
Input,
ViewChild
ViewChild,
OnDestroy
} from '@angular/core';
import moment from 'moment';
import 'moment-timezone';
import {
MatTabChangeEvent,
MatTabGroup,
@ -14,13 +19,22 @@ import {
MatSelectChange
} from '@angular/material';
import { GeneralSetting } from '../models/settings';
import { NGXLogger } from 'ngx-logger';
import { TranslateService } from '@ngx-translate/core';
import { take } from 'rxjs/operators';
import { Subscription, merge } from 'rxjs';
export interface TimezoneData {
displayName: string;
name: string;
}
@Component({
selector: 'ucap-settings-general',
templateUrl: './general.component.html',
styleUrls: ['./general.component.scss']
})
export class GeneralComponent implements OnInit {
export class GeneralComponent implements OnInit, OnDestroy {
@Input()
setting: GeneralSetting;
@ -30,10 +44,27 @@ export class GeneralComponent implements OnInit {
@ViewChild('themeTabGroup', { static: true })
themeTabGroup: MatTabGroup;
constructor(private changeDetectorRef: ChangeDetectorRef) {}
get timezoneList(): TimezoneData[] {
return this._timezoneList;
}
set timezoneList(timezoneList: TimezoneData[]) {
this._timezoneList = timezoneList;
}
// tslint:disable-next-line: variable-name
_timezoneList: TimezoneData[];
langChangeSubscription: Subscription;
constructor(
private translateService: TranslateService,
private changeDetectorRef: ChangeDetectorRef,
private logger: NGXLogger
) {
moment.locale('ko');
}
ngOnInit() {
let themeIndex;
let themeIndex: number;
switch (this.setting.appTheme) {
case 'theme-default':
themeIndex = 0;
@ -46,6 +77,22 @@ export class GeneralComponent implements OnInit {
break;
}
this.themeTabGroup.selectedIndex = themeIndex;
this.setTimezoneData();
this.langChangeSubscription = merge(
this.translateService.onLangChange,
this.translateService.onDefaultLangChange,
this.translateService.onTranslationChange
).subscribe(() => {
this.setTimezoneData();
});
}
ngOnDestroy(): void {
if (!!this.langChangeSubscription) {
this.langChangeSubscription.unsubscribe();
}
}
onSelectedTabChange(e: MatTabChangeEvent) {
@ -93,4 +140,27 @@ export class GeneralComponent implements OnInit {
this.setting = setting;
this.changed.emit(this.setting);
}
private setTimezoneData() {
this.translateService
.get('common.timezone')
.pipe(take(1))
.subscribe(timezoneData => {
let timezoneList: TimezoneData[] = [];
for (const name of moment.tz.names()) {
const displayName = `(UTC${moment.tz(name).format('Z')}) ${
timezoneData[name]
}`;
timezoneList.push({
displayName,
name
});
}
timezoneList = timezoneList.sort((a: TimezoneData, b: TimezoneData) => {
return a.displayName.localeCompare(b.displayName);
});
this.timezoneList = timezoneList;
});
}
}

View File

@ -0,0 +1,128 @@
import {
Injectable,
Pipe,
PipeTransform,
OnDestroy,
ChangeDetectorRef
} from '@angular/core';
import { Subscription } from 'rxjs';
import { ObjectUtil } from '@ucap-webmessenger/core';
import { DateService, DateOptions } from '../services/date.service';
@Injectable()
@Pipe({
name: 'ucapDate',
pure: false // required to update the value when the promise is resolved
})
export class DatePipe implements PipeTransform, OnDestroy {
value = '';
lastDate: any;
lastFormat: string;
lastOptions: DateOptions;
changedLocaleSubscription: Subscription;
changedTimezoneSubscription: Subscription;
changedDefaultTimezoneSubscription: Subscription;
constructor(
private dateService: DateService,
private changeDetectorRef: ChangeDetectorRef
) {}
ngOnDestroy(): void {
this._dispose();
}
transform(date: any, format: string = 'L', options?: DateOptions): any {
if (!date || 0 === date.length) {
return '';
}
if (
ObjectUtil.equals(date, this.lastDate) &&
ObjectUtil.equals(format, this.lastFormat) &&
ObjectUtil.equals(options, this.lastOptions)
) {
return this.value;
}
// store the target, in case it changes
this.lastDate = date;
// store the key, in case it changes
this.lastFormat = format;
// store the key, in case it changes
this.lastOptions = options;
// set the value
this.updateValue(date, format, options);
// if there is a subscription to onLangChange, clean it
this._dispose();
// subscribe to onLangChange event, in case the language changes
if (!this.changedTimezoneSubscription) {
this.changedTimezoneSubscription = this.dateService.changedTimezone.subscribe(
() => {
if (this.lastDate) {
this.lastDate = null; // we want to make sure it doesn't return the same value until it's been updated
this.updateValue(date, format, options);
}
}
);
}
// subscribe to onDefaultLangChange event, in case the default language changes
if (!this.changedDefaultTimezoneSubscription) {
this.changedDefaultTimezoneSubscription = this.dateService.changedDefaultTimezone.subscribe(
() => {
if (this.lastDate) {
this.lastDate = null; // we want to make sure it doesn't return the same value until it's been updated
this.updateValue(date, format, options);
}
}
);
}
// subscribe to onDefaultLangChange event, in case the default language changes
if (!this.changedLocaleSubscription) {
this.changedLocaleSubscription = this.dateService.changedLocale.subscribe(
() => {
if (this.lastDate) {
this.lastDate = null; // we want to make sure it doesn't return the same value until it's been updated
this.updateValue(date, format, options);
}
}
);
}
return this.value;
}
updateValue(date: any, format: string = 'L', options?: DateOptions): void {
try {
const value = this.dateService.get(date, format, options);
this.value = value;
} catch (error) {
this.value = date;
}
this.lastDate = date;
this.lastFormat = format;
this.lastOptions = options;
this.changeDetectorRef.markForCheck();
}
private _dispose(): void {
if (!!this.changedTimezoneSubscription) {
this.changedTimezoneSubscription.unsubscribe();
this.changedTimezoneSubscription = undefined;
}
if (!!this.changedDefaultTimezoneSubscription) {
this.changedDefaultTimezoneSubscription.unsubscribe();
this.changedDefaultTimezoneSubscription = undefined;
}
if (!!this.changedLocaleSubscription) {
this.changedLocaleSubscription.unsubscribe();
this.changedLocaleSubscription = undefined;
}
}
}

View File

@ -22,8 +22,8 @@ export class TranslatePipe implements PipeTransform, OnDestroy {
lastTarget: any;
lastKey: string;
lastSeparator: string;
onLangChange: Subscription;
onDefaultLangChange: Subscription;
changedLangSubscription: Subscription;
changedDefaultLangSubscription: Subscription;
constructor(
private translateService: TranslateService,
@ -75,8 +75,8 @@ export class TranslatePipe implements PipeTransform, OnDestroy {
this._dispose();
// subscribe to onLangChange event, in case the language changes
if (!this.onLangChange) {
this.onLangChange = this.translateService.onLangChange.subscribe(
if (!this.changedLangSubscription) {
this.changedLangSubscription = this.translateService.changedLang.subscribe(
(event: LangChangeEvent) => {
if (this.lastKey) {
this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated
@ -87,8 +87,8 @@ export class TranslatePipe implements PipeTransform, OnDestroy {
}
// subscribe to onDefaultLangChange event, in case the default language changes
if (!this.onDefaultLangChange) {
this.onDefaultLangChange = this.translateService.onDefaultLangChange.subscribe(
if (!this.changedDefaultLangSubscription) {
this.changedDefaultLangSubscription = this.translateService.changedDefaultLang.subscribe(
() => {
if (this.lastKey) {
this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated
@ -105,13 +105,13 @@ export class TranslatePipe implements PipeTransform, OnDestroy {
* Clean any existing subscription to change events
*/
private _dispose(): void {
if (typeof this.onLangChange !== 'undefined') {
this.onLangChange.unsubscribe();
this.onLangChange = undefined;
if (!!this.changedLangSubscription) {
this.changedLangSubscription.unsubscribe();
this.changedLangSubscription = undefined;
}
if (typeof this.onDefaultLangChange !== 'undefined') {
this.onDefaultLangChange.unsubscribe();
this.onDefaultLangChange = undefined;
if (!!this.changedDefaultLangSubscription) {
this.changedDefaultLangSubscription.unsubscribe();
this.changedDefaultLangSubscription = undefined;
}
}

View File

@ -0,0 +1,272 @@
import { Injectable, EventEmitter } from '@angular/core';
import moment from 'moment';
import 'moment-timezone';
import {
TranslateService,
LangChangeEvent,
DefaultLangChangeEvent
} from '@ngx-translate/core';
import { Subscription } from 'rxjs';
export type DateUnit =
| 'year'
| 'years'
| 'y'
| 'month'
| 'months'
| 'M'
| 'week'
| 'weeks'
| 'w'
| 'day'
| 'days'
| 'd'
| 'hour'
| 'hours'
| 'h'
| 'minute'
| 'minutes'
| 'm'
| 'second'
| 'seconds'
| 's'
| 'millisecond'
| 'milliseconds'
| 'ms';
export interface DateOptions {
manipulate?: {
amount?: number;
unit?: DateUnit;
startOf?: DateUnit;
endOf?: DateUnit;
};
}
export interface TimezoneChangeEvent {
name: string;
}
export interface DefaultTimezoneChangeEvent {
name: string;
}
export interface LocaleChangeEvent {
locale: string;
}
@Injectable({
providedIn: 'root'
})
export class DateService {
// tslint:disable-next-line: variable-name
private _changedTimezone: EventEmitter<
TimezoneChangeEvent
> = new EventEmitter<TimezoneChangeEvent>();
// tslint:disable-next-line: variable-name
private _changedDefaultTimezone: EventEmitter<
DefaultTimezoneChangeEvent
> = new EventEmitter<DefaultTimezoneChangeEvent>();
// tslint:disable-next-line: variable-name
private _changedLocale: EventEmitter<LocaleChangeEvent> = new EventEmitter<
LocaleChangeEvent
>();
private onLangChangeSubscription: Subscription;
// tslint:disable-next-line: variable-name
private _defaultTimezone: string;
// tslint:disable-next-line: variable-name
private _currentTimezone: string;
// tslint:disable-next-line: variable-name
private _currentLocale: string;
get changedTimezone(): EventEmitter<TimezoneChangeEvent> {
return this._changedTimezone;
}
get changedDefaultTimezone() {
return this._changedDefaultTimezone;
}
get changedLocale() {
return this._changedLocale;
}
/**
* The default lang to fallback when translations are missing on the current lang
*/
get defaultTimezone(): string {
return this._defaultTimezone;
}
set defaultTimezone(defaultTimezone: string) {
this._defaultTimezone = defaultTimezone;
}
/**
* The lang currently used
*/
get currentTimezone(): string {
return this._currentTimezone;
}
set currentTimezone(currentTimezone: string) {
this._currentTimezone = currentTimezone;
}
/**
* The locale currently used
*/
get currentLocale(): string {
return this._currentLocale;
}
set currentLocale(currentLocale: string) {
this._currentLocale = currentLocale;
}
constructor(private translateService: TranslateService) {
this.onLangChangeSubscription = this.translateService.onLangChange.subscribe(
(event: LangChangeEvent) => {
if (this._currentLocale !== event.lang) {
this.changeLocale(event.lang);
}
}
);
}
/**
* Sets the default language to use as a fallback
*/
setDefaultTimezone(timezone: string): void {
if (timezone === this.defaultTimezone) {
return;
}
this.changeDefaultTimezone(timezone);
}
/**
* Gets the default language used
*/
getDefaultTimezone(): string {
return this.defaultTimezone;
}
/**
* Sets the default language to use as a fallback
*/
setLocale(locale: string): void {
if (locale === this.currentLocale) {
return;
}
this.changeLocale(locale);
}
/**
* Gets the default language used
*/
getLocale(): string {
return this.currentLocale;
}
/**
* Changes the lang currently used
*/
public use(timezone: string): void {
// don't change the language if the language given is already selected
if (timezone === this.currentTimezone) {
return;
}
this.changeTimezone(timezone);
}
/**
* Gets the translated value of a key (or an array of keys)
* @returns the translated key, or an object of translated keys
*/
public get(date: any, format: string = 'L', options?: DateOptions): string {
if (!date || 0 === date.length) {
throw new Error(`Parameter "date" required`);
}
let d = moment.tz(date, 'Asia/Seoul').utc();
d = d.tz(this.currentTimezone);
if (!!options) {
if (!!options.manipulate) {
if (!!options.manipulate.amount && !!options.manipulate.unit) {
d = d.add(options.manipulate.amount, options.manipulate.unit);
}
if (!!options.manipulate.startOf) {
d = d.startOf(options.manipulate.startOf);
}
if (!!options.manipulate.endOf) {
d = d.startOf(options.manipulate.endOf);
}
}
}
if ('C' === format) {
return this.chatFormat(d);
}
return d.format(format);
}
/**
* Changes the current lang
*/
private changeTimezone(timezone: string): void {
this.currentTimezone = timezone;
this.changedTimezone.emit({ name: timezone });
// if there is no default lang, use the one that we just set
if (!this.defaultTimezone) {
this.changeDefaultTimezone(timezone);
}
}
/**
* Changes the default lang
*/
private changeDefaultTimezone(timezone: string): void {
this.defaultTimezone = timezone;
this.changedDefaultTimezone.emit({ name: timezone });
}
/**
* Changes the default lang
*/
private changeLocale(locale: string): void {
this.currentLocale = locale;
moment.locale(locale);
this.changedLocale.emit({ locale });
}
private chatFormat(m: moment.Moment): string {
const today = moment();
const yesterday = moment().subtract(1, 'day');
if (m.isSame(today, 'day')) {
return m.format('a hh:mm');
} else if (m.isSame(yesterday, 'day')) {
return moment
.localeData()
.calendar('lastDay')
.replace('LT', '')
.replace('[', '')
.replace(']', '')
.replace('at', '')
.trim();
} else {
return m.format('MM.DD');
}
}
}

View File

@ -13,11 +13,11 @@ export interface DefaultLangChangeEvent {
})
export class TranslateService {
// tslint:disable-next-line: variable-name
private _onLangChange: EventEmitter<LangChangeEvent> = new EventEmitter<
private _changedLang: EventEmitter<LangChangeEvent> = new EventEmitter<
LangChangeEvent
>();
// tslint:disable-next-line: variable-name
private _onDefaultLangChange: EventEmitter<
private _changedDefaultLang: EventEmitter<
DefaultLangChangeEvent
> = new EventEmitter<DefaultLangChangeEvent>();
// tslint:disable-next-line: variable-name
@ -31,8 +31,8 @@ export class TranslateService {
* // do something
* });
*/
get onLangChange(): EventEmitter<LangChangeEvent> {
return this._onLangChange;
get changedLang(): EventEmitter<LangChangeEvent> {
return this._changedLang;
}
/**
@ -41,8 +41,8 @@ export class TranslateService {
* // do something
* });
*/
get onDefaultLangChange() {
return this._onDefaultLangChange;
get changedDefaultLang() {
return this._changedDefaultLang;
}
/**
@ -143,7 +143,7 @@ export class TranslateService {
*/
private changeLang(lang: string): void {
this.currentLang = lang;
this.onLangChange.emit({ lang });
this.changedLang.emit({ lang });
// if there is no default lang, use the one that we just set
if (!this.defaultLang) {
@ -156,6 +156,6 @@ export class TranslateService {
*/
private changeDefaultLang(lang: string): void {
this.defaultLang = lang;
this.onDefaultLangChange.emit({ lang });
this.changedDefaultLang.emit({ lang });
}
}

View File

@ -44,6 +44,7 @@ import { DialogService } from './services/dialog.service';
import { SnackBarService } from './services/snack-bar.service';
import { SplashScreenService } from './services/splash-screen.service';
import { TranslateService } from './services/translate.service';
import { DateService } from './services/date.service';
import { ClickOutsideDirective } from './directives/click-outside.directive';
import { FileUploadForDirective } from './directives/file-upload-for.directive';
@ -63,6 +64,7 @@ import {
import { SecondsToMinutesPipe } from './pipes/seconds-to-minutes.pipe';
import { LinkyPipe } from './pipes/linky.pipe';
import { TranslatePipe } from './pipes/translate.pipe';
import { DatePipe } from './pipes/date.pipe';
import { MatTabsModule } from '@angular/material';
@ -99,7 +101,8 @@ const PIPES = [
DateDistanceToDatePipe,
SecondsToMinutesPipe,
LinkyPipe,
TranslatePipe
TranslatePipe,
DatePipe
];
const SERVICES = [
BottomSheetService,
@ -107,7 +110,8 @@ const SERVICES = [
DialogService,
SnackBarService,
SplashScreenService,
TranslateService
TranslateService,
DateService
];
@NgModule({

View File

@ -34,6 +34,7 @@ export * from './lib/services/dialog.service';
export * from './lib/services/snack-bar.service';
export * from './lib/services/splash-screen.service';
export * from './lib/services/translate.service';
export * from './lib/services/date.service';
export * from './lib/types/file-viewer.type';