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

in #kr-dev5 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

Sort:  

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

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 63968.82
ETH 3136.80
USDT 1.00
SBD 4.28