Home moment의 locale을 dynamic하게 import하기
Post
Cancel

moment의 locale을 dynamic하게 import하기

locale에 따라 한국어, 영어, 일본어로 표시하고 싶은데 공식문서를 보면 다음과 같이 최상단에 import를 하고, locale를 ko로 변경하면 한글은 잘 나온다.

1
2
3
4
5
6
import moment from 'moment';
import "moment/locale/ko"; // 한국어
...
moment().locale('ko');

console.log(moment().format('LLL')); // 2023년 2월 10일 오후 2:24

영문으로 표현하기 위해 다음처럼 변경을 했지만 영문으로 표시가 되지 않는다.

1
2
3
4
5
6
import moment from 'moment';
import "moment/locale/ko"; // 한국어
...
moment().locale('en');

console.log(moment().format('LLL')); // 2023년 2월 10일 오후 2:24

상단의 import 구문을 제거했더니 영문으로 표시가 된다.

1
2
3
4
5
import moment from 'moment';
...
moment().locale('en');

console.log(moment().format('LLL')); // February 10, 2023 2:29 PM

import 구문은 최 상단에 위치해야되어 위와 같은 방법으로는 각 언어별로 import를 할 수 없다.

원래 하고자 했던건 다음 처럼 locale에 따라 언어를 설정하고자 했지만 문제가 맨 마지막에 import 한 언어로 표시가 된다는것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import * as Localization from 'expo-localization';
import moment from 'moment';
import "moment/locale/ko"; // 한국어
import "moment/locale/ja"; // 일본어
...
if (Localization.locale === 'ko-KR') {
  moment().locale('ko');
} else if (Localization.locale === 'ja-JP') {
  moment().locale('ja');
} else {
  moment().locale('en');
}

console.log(moment().format('LLL')); // 2023年2月10日 14:35

그래서 다음과 같이 dynamic import를 하는 방식으로 해결했다.

1
2
3
4
5
6
7
8
9
10
import * as Localization from 'expo-localization';
import moment from 'moment';

...

if (Localization.locale === 'ko-KR') {
  import('moment/locale/ko').then(() => moment().locale('ko'));
} else if (Localization.locale === 'ja-JP') {
  import('moment/locale/ja').then(() => moment().locale('ja'));
}
This post is licensed under CC BY 4.0 by the author.