[React-Native] toLocaleString Not Working on Android

gyulhana·2023년 10월 12일

리액트네이티브 안드로이드에서 toLocaleString() 메소드가 적용이 안 돼요. 이게 안 돼서 원초적인 방법으로 숫자 세자리마다 콤마를 찍어주는 JS 함수를 썼는데

number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');

아무래도 근본적인 해결방법은 아닌 것 같아서 찾아봤다. 스택오버플로우에서 아래와 같은 글을 발견. 오래된 글이긴 했지만 2022년까지의 업데이트가 있었다.

react-native .toLocaleString() not working on android

0.60+버전 이상에서 hermes 엔진을 사용하면 그걸 가능하게 해준다는 솔루션이 적혀있었는데 일단 나는 hermes를 개발 상 부득이한 이슈로(지금은 기억나지 않음) 사용하지 않는 상태이다.

가장 많은 좋아요를 받은 솔루션을 보면,

root/android/app/build.gradle에서 위 코드를 아래 코드로 바꾸라는 글이었다.

def jscFlavor = 'org.webkit:android-jsc:+'
def jscFlavor = 'org.webkit:android-jsc-intl:+'

jscFlavor는 간단하게 말하면 안드로이드 앱에서 사용하는 JavaScript 코어 엔진을 설정하는 변수이고 기본적으로는 org.webkit:android-jsc:+가 세팅되어 있는데 이건 국제화 기능이 미지원되기 때문에 다국어 지원, 날짜 및 시간 형식, 숫자 형식 등을 사용하려면(이게 바로 toLocaleString이잖아요) org.webkit:android-jsc-intl:+ 이걸로 바꿔주면 된다는 것이다.

대신 이렇게 수정하면 기존보다 앱의 사이즈는 4MB 정도 증가할 수 있다. 더 많은 기능을 포함하기 때문에.

아무튼 나는 이렇게 수정해서 관련 파일 12개 바꿨다가 jscFlavor 한 줄 바꾸고 깔끔하게 처리 됐다!

profile
친절한 하루를 선물하고 싶은 사람

0개의 댓글