티스토리 뷰

반응형

 

다국어 앱 도구 키트 써보신 분? xlf 파일을 만들면 빌드 과정에서 resw파일이 자동으로 생성되는 건줄 알았는데 아닌가 보네요? xlf 파일을 어떻게 써먹는 건지 모르겠네요.

 

Youngjae Kim 저 LiveBoard 만들 때 써봤어요.
  • Youngjae Kim 예전에 만들 때 글: (1) 사용법 https://www.facebook.com/photo.php?fbid=10152021740907794&set=gm.652100941522907&type=1 (2) 노하우 https://www.facebook.com/groups/vapps/permalink/657083267691341/

    LiveBoard에 다국어 지원을 해주기 위해 한국어 번역 리소스를 넣고 있어요.

    아...
    정말 미친듯이 마음에 드네요.
    전용 번역 툴이 마련되어 있다니 이건 정말 대단한거에요. 감동적인 경험입니다.

    ...

    게다가 빌드 할 때마다 리소스키들이 자동으로 갱신되는데, 안드로이드는 strings.xml 로 하는데 이게 키값들을 빼먹는 경우도 있어서 메모장에 줄번호로 체크하거든요.

    원클릭에 번역기에서 자동으로 채워지고 직접 번역한건 깃발 표시(MT:Manual Translation의 약자인듯)를 해주네요. 대단히 만족스럽습니다.

    참고로 다국어 지원은 다음을 참고해주세요.

    1. VS와 번역툴연동하기: http://blogs.windows.com/windows/b/appbuilder/archive/2014/03/06/writing-windows-store-apps-with-locale-based-adaptive-design.aspx

    2. 코딩하기: http://msdn.microsoft.com/ko-kr/library/windows/apps/hh965329.aspx

    See More
  • Reagan Hwang 유니버설 앱에서 뭔가 잘 안 됐었는데, 지우고 다시 하니까 잘 되네요. ㅎㅎ
  • Park Junho 혹시.. resx와도 연동되나요..? 데스크톱 어플리케이션을 만들때도 다국어를 손쉽게 지원하련지...?
  •  

     

     

     

    윈8 다국어 앱 만들면서 알아야할 버그 정리.
    - 기본적으로 윈8앱에서 권장하는 다국어 작업은, resw(resx 파일같은겁니다)에 기본 언어에 대한 문자열을 입력한 후, 별도 설치한 Multilingual Toolkit을 실행하면 원하는 언어별로 xliff 파일(*.xlf)이 자동생성되고, 이를 툴킷에서 resw키와 1:1매칭으로 편집합니다.

    장점은, 키값을 빼먹지 않을 수 있고 툴킷 자체적으로 번역에 대한 프로세스를 가지고 있어서 번역부분을 엑셀만 다룰 정도의 초보자에게 떼어줄 수도 있어요.

    ...

    문제는, 버그가 있는데요..
    1. resw을 하나만 운영할 경우는 괜찮지만, 두 개 이상 만들 경우 xliff 파일이 꼬입니다. xliff 파일은 XML파일로, group element 안에 trans-unit 이라는 태그로 이루어져 있는데, 원래는 각 group이 각 resw 파일이름과 대응되지만 여러 resw를 쓸 경우 파일명 무관하게 무조건 마지막 group에 새로 추가한 키값이 들어가는 문제가 있어요. 원래는 해당 리소스 파일명의 group에 들어가야 하고요. 그래서 resw 파일을 하나만 쓰다가 여러개로 구분한 후부터 추가한 키값의 경우 자꾸 번역한게 초기화가 되는 문제가 있습니다. 말로 표현하자니 복잡한데, 짧게 말해 그냥 하나의 resw 파일로만 작업하길 권합니다.
    => 해결법: xlf 파일이란건 그저 XML이므로, 해당 잘못된 group에 들어간걸 잘라서 맞는 group 태그 안에 넣어줍니다. 뭐 그렇게 번거롭진 않습니다.

    2. 코드로 리소스를 불러올 경우.
    이건 버그가 아닐 수 있고, 단지 리소스 체계가 다른겁니다.
    resw 파일엔 Cancel.Text = "취소"라는 것이 있으면 XAML에서 <TextBlock x:Uid="Cancel" /> 이라고만 지정하면 dot notation에 의해 Text라는 프로퍼티에 자동으로 "취소"라고 매핑됩니다. 이런 이유로 실제 개발하다보면 TextBlock형태에 매핑되는 리소스는 모두 .Text가 붙게 되지요. 버튼은 .Content겠죠?

    이걸 코드에서 참조하려면,
    var loader = new Windows.ApplicationModel.Resources.ResourceLoader(); // 리소스 로딩.
    loader.GetString("Cancel.Text"); // 리소스키 부르기.
    ....이라고 하면 컴파일 오류도 안나는데 내용도 못불러옵니다. 리소스키는 분명 Cancel.Text인데!
    => 해결법: loader.GetString("Cancel/Text") 라고 해줘야 합니다. 이에 대한 힌트를 얻은게, xlf 파일에 Cancel\Text 식으로 저장이 되더라고요. notation의 차이랄까 resource tree 관리의 차이랄까 그렇습니다. 여하간 resw 파일은 dot notation, 코드에서는 slash notation, xlf 파일 안에서는 역슬래시 notation을 쓰고 있습니다. XML에서 slash가 있는 문장을 역슬래시로 쓰곤 하기 때문에 간파-_-했습니다.

    3. 사소한 버그
    Multilingual Tooltip은, 번역창에 빠르게 타자치면 글자를 못따라옵니다. 당황하지않고~천천히~ 타자치면 됩니다. 아마 키 이벤트를 받아서 문법체크 같은 기능을 넣으려고 한게 아닐까 싶네요.

    반응형
    댓글