BLOG main image
분류 전체보기 (92)
Cocoa Touch (11)
Cocoa (10)
Objective-C (13)
Swift (6)
Development (11)
Tools (11)
Books (7)
etc (21)
Application release (1)
Document Project (1)
105,799 Visitors up to today!
Today 2 hit, Yesterday 2 hit
daisy rss
tistory 티스토리 가입하기!
2014. 2. 18. 12:10

Localize작업을 하다보면 언어에 따라 formatting이 바뀌는 경우가 있습니다.

예를 들면 영어 문장이 아래와 같다면


“You ate 2 apples during 30 minutes.”


한국어 문장은 


“당신은 30 분 동안 2 개의 사과를 먹었다.”


이렇게 되겠지요.


이것을 리소스 파일로 만들게 되면 아래와 같을 것입니다.


“You ate %d apples during %d minutes.” = “당신은 %d 분 동안 %d 개의 사과를 먹었다.”


문제는 영문에서의 아규먼트의 순서는 갯수-시간인데 비해 한국어는 시간-갯수가 됩니다.


이런 경우 문장을 수정해서 순서를 맞추는 방법도 있겠지만 결과물의 문장이 영 깔끔하지 않습니다.

이에, 해당 이슈를 처리할 방법이 있는지 구글링 해보았는데 아래와 같은 방법으로 처리가 가능하다는 글을 보았습니다. 저 역시 바로 떠오른 생각은 그랬고요.


“You ate ${count} apples during ${time} minutes.” = “당신은 ${time} 분 동안 ${count} 개의 사과를 먹었다.”


localized string을 만들때 ${}로 둘러싼 키 값에 해당 스트링으로 교체해주는 방법인데요, 이 방법은 NSLocalizedString을 바로 사용할 수 없을 뿐더러 해당 처리를 해주는 별도의 코드를 작성할 필요가 있습니다.


이 이야기를 자바 개발자에게 했더니…


“You ate %1$s apples during %2$s minutes.”같이 아규먼트에 인덱스를 줄 수 있다고 하네요.


아… 이런 Objective-C를 쓰면서 자바가 부럽긴 처음이었습니다.


그래서 시간 여유가 있어서 생각했던 모듈을 만들려고 애플 문서를 뒤적거리는 중에 아래와 같은 부분을 발견했습니다.


“One problem that often occurs during translation is that the translator may need to reorder parameters inside translated strings to account for differences in the source and target languages. If a string contains multiple arguments, the translator can insert special tags of the form n$ (where n specifies the position of the original argument) in between the formatting characters. These tags let the translator reorder the arguments that appear in the original string. The following example shows a string whose two arguments are reversed in the translated string:”


/* Message in alert dialog when something fails */


"%@ Error! %@ failed!" = "%2$@ blah blah, %1$@ blah!";


아아… 이런… 제가 공부를 너무 안했던 것이지요. Cocoa Framework에서도 이런 방법을 제공하고 있었던 것입니다.

상당히 민망해지는군요. :$



[..’] | 2014.02.27 06:15 | PERMALINK | EDIT/DEL | REPLY
OS X 10.9 / iOS 7에선 더 좋아졌죠. 혹시 아직 안보셨으면 Foundation 10.9 Release Notes의 맨 마지막 색션 보시면 재미있을 겁니다. 이런데다 슬적 끼워놓은게 맘에안들긴 하지만요.
https://developer.apple.com/librarY/mac/releasenotes/Foundation/RN-Foundation/index.html
maccrazy | 2014.03.03 11:05 신고 | PERMALINK | EDIT/DEL
앗. 안녕하세요~ 요즘 블로그 방문자가 별로 없어서 자주 안 들어와보게 되는데 그새 왔다가셨네요. :) 알려주신 링크 보니까 재미있네요. 이런걸 왜 이제야 넣었을까요? T_T 그나저나 잘 지내시죠? 블로그는 왜 닫으셨어요?
han9kin | 2015.03.02 00:33 신고 | PERMALINK | EDIT/DEL | REPLY
헛... "%1$s" 이거 printf에서부터 지원하는 건데...
man fprintf 하시면 자세한 설명이...
maccrazy | 2015.05.06 10:25 신고 | PERMALINK | EDIT/DEL
잇히히~ 어이야디야~ 나날이 바보되는 느낌.
Name
Password
Homepage
Secret
2013. 11. 4. 16:04

사실 블로그에 글을 쓸 때 사실 거의 맞춤법 따위는 신경 쓰지 않았던 것이 사실이다.

하지만 이왕이면 제대로 쓰고 싶었지만, 맞춤법 검사를 위한 딱히 마땅한 도구도 없고 부산대학교에서 만들었다는 웹 기반의 한글 맞춤법 검사기를 쓰기엔 꽤 귀찮았었다.

그런데 dandy라는 오토메이터를 이용한 맥용 맞춤법 검사기(실제 동작은 부산대학교에서 만들었다는 그 맞춤법 검사기)를 써봤는데 그럭저럭 괜찮다. (아니, 실은 꽤 좋다.)

일단은 그냥 한번 써볼 생각인데 쓰다가 불편하면 뭔가 손대볼지도 모르겠다.

Name
Password
Homepage
Secret
2013. 11. 2. 01:11

ARC로 개인 프로젝트를 하나 해보고 있는데... 그러면서 가진 ARC에 대한 소감은 한마디로...


"쉬운 건 더욱 쉽게, 어려운 건 더욱 어렵게"이다. 아래 종암님이 댓글로 알려준 블로그 주인장도 비슷한 말을 한 것 같은데... 딱 그 말이 가장 적합한 것 같다.


애플이 ARC를 만든 게 결국 새로 유입된 개발자들이 Objective-C를 제대로 못 써서 계속 메모리 관련 문제를 일으키니 결국 앱스토어 앱들의 전체 퀄리티 향상을 위해서 만든 건데... 까보면 까볼수록 점점 애플 말이 믿기  힘들어진다.


성능이 더 좋다고 하지만 전혀 체감되지 않고 몇몇 테스트 결과는 되레 느리고, 개발자의 실수를 줄여서 퀄리티를 높인다고 하는데 가만히 보면 쉽게 찾을 버그를 더욱 깊은 곳으로 숨겨버리는 역할을 하는 것 같기도 하고... 


결국, 고만고만한 개발자 동원해서 대충 후다닥 빨리 만들 거면 ARC를 쓰는 게 나을 수도 있고, 베테랑 개발자를 동원해서 퀄리티 높은 코드를 만들려면 MRC(이건 또 무슨 용어...)를 쓰는 게 맞을 듯(후훗. 이런 위험한 발언을...)


이런 생각하는 것 보면 나도 참 이제는 올드한 개발자 측에 들어가나보다.


PS. ARC에 대한 내가 아는 에피소드 중 하나가 회사에서 추진하는 프로젝트에서 MRC로 작업하다가 수많은 크래시와 메모리 문제가 발생해 퀄리티에 문제가 생겼는데 프로젝트 자체를 ARC로 바꿔서 해결되었다고 한다. 와우! 개발자 실력을 늘려서 해결하지 않고 간단하게 툴로 해결했다! 하지만 크래시 하는 버그를 메모리 릭 버그로 다 바꿔놓은 게 아닌가 하는 의심이 드는 이유는 뭘까?

Name
Password
Homepage
Secret