2012-08-14 13 views
2

Android Cocoa iOS 게임 엔진을 Android에 포팅했으며 기기에서 Android 2.2로 정상적으로 작동하지만 현지화 지원과 관련하여 문제가 발생합니다.NDK를 사용하는 Android에서의 현지화/현지화

C++ 엔진은 poedit을 사용하여 만든 .po (gettext) 현지화 파일을로드하고 std::wstring에 넣습니다. 이것은 내가 지원하는 다른 플랫폼에서 절대적으로 잘 작동하지만, NDK가 wchar/wstring을 적절히 지원하지 않기 때문에 Android에서는 작동하지 않습니다. 내 현재 (아주 기본) 구현에 대해서는 github을 참조하십시오.

이제 수동으로 멀티 바이트 문자열을 사용자 정의 std::basic_string<uint_32>으로 변환 할 수 있다고 생각합니다. 추천 된대로 - Android NDK C++ 'wstring' support

그리고 그 부분은 대부분 괜찮지 만 사람들은 문자열 포맷을 어떻게 처리합니까? 대다수의 내 문자열은 서식 지정이 필요없는 텍스트 일 ​​뿐이지 만 일부는 "잘 수행 된 % 1 $ s, % 2 $ d!"이라고 표시했습니다.

사람들은 swprintf없이이 문자열의 서식을 어떻게 처리합니까?

wchar/wstring 지원에 의존하지 않고 크로스 플랫폼 로컬라이제이션을 안정적으로 처리하는 권장 방법이 있습니다. (어쨌든 권장하지 않습니다.하지만 아무도 20MB + 라이브러리에 의존하지 않는 실용적인 대안을 제시하는 것 같습니다. 모바일에 적합하지 않습니까?)

감사합니다.

답변

1

나는 이것을 사용할 수있었습니다. 앱 전체에서 넓은 문자열을 사용하는 대신 UTF8을 사용하도록 변환했습니다. 따라서 정상적으로 sprintf을 사용할 수 있습니다 (물론 예외는 있지만 작동하지 않는 문자열 길이를 캐핑하는 것과 같습니다). 그런 다음 UTF8을 해독 할 필요가 없도록 문자열을 UTF32로 글꼴 렌더러 내에서 변환합니다.

구현은 단지 localisationfont renderer

참조

Unicode usage in video games
UTF8 everywhere

에 대한 github에 업로드 된