도리안의 개발 이야기 #160 - 안드로이드에서 언어가 다르면 소수점 포맷도 달라지는 문제

in kr-dev •  5 years ago 



대문 제작: imrahelk

기개발된 API 중 일부에 앱 버전 코드를 새로운 파라메터로 추가하였습니다. (안드로이드 앱에서 버전 코드는 정수(integer)이지만, iOS 앱에서 버전 코드는 실수(real)입니다. 이런 이유로 이 파라메터의 데이터 타입(data type)은 double로 정했습니다. 앱으로 테스트하여 변경된 API가 잘 작동됨을 확인했습니다. 문제는요... 다른 언어로 변경 후 앱에서 카드 리스트를 불러오지 못한다는 버그 리포트를 받았습니다.

원인

버그의 원인은 일부언어에서는 실수에서 소수점을 . 대신 ,를 쓰기 때문이었습니다. 안드로이드 앱 코드를 보면요.

double versionCode = (double)context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
String params = String.format(
    "os=%s&version_code=%s",
    "android",
    versionCode
);

versionCode의 값이 1.0이고 현재 언어가 베트남어이면, params 변수의 값은 다음과 같습니다.

os=android&version_code=1,0000

위 파라메터를 서버에 보내면, 서버에서는 version_code의 데이터 타입이 double이 아니므로 API를 실행하지 않습니다. 이로 인해 앱은 서버로부터 응답을 받지 못하고 멈춰있는 것입니다.

해결

String.format 메소드의 첫번째 파라메터를 대한민국을 의미하는 Locale 상수로 설정하였습니다. 위 코드는 다음과 같이 변경합니다.

double versionCode = (double)context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
String params = String.format(
    Locale.KOREA,
    "os=%s&version_code=%s",
    "android",
    versionCode
);

그 결과, 버전코드의 소수점이 .으로 나옵니다.

마치며...

저번에 폰트 문제에서도 그랬듯이 다국어 앱을 만들려면, 신경써야 할 점들이 늘어납니다. 다국어 관련 이슈는 의외로 찾기가 쉽지 않은 내용이죠. 이런 주제를 대상으로 정리를 해나가는 것도 좋을 거 같습니다. 새로운 경험을 하는대로 포스트를 써갈 예정입니다.

aaronhong_banner.jpg

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

sbi3님이 dorian-dev님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
sbi3님의 Weekly Upvote Report

...| 216 | 0.012 | always-end-the-day-with-a-positive-thought
dorian-dev | 216 | 0.012 | 157
emjoe | 216 | 0.012 | alpha-kw-8-appi...

아낌없이주는 나무에 대한 후원으로 왔어요. 미약하나마 보팅 하고 가요.

Posted using Partiko Android

아낌없는 나무 후원이요!

Posted using Partiko Android