Seize the day

POST : SDP for win32/다국어지원

다국어 지원


locale_test.zip



다국어를 지원 하나 방법은 여러가지가 있으나 간단하게 언어 텍스트를 개별 언어 파일에서 로드해서 UI에 반영하는 방식을 생각해 보자. 


예를 들어 로그인창에 "아이디", "패스워드"라는 텍스트가 있다면 ko-KR.xml과 en-US.xml 파일을 아래처럼 만들 수 있다. 

ko-KR.xml 

<?xml version='1.0' encoding='UTF-8'?>

<resource>

  <string id='login.id'>

    <![CDATA[아이디]]>

  </string>

  <string id='login.pw'>

    <![CDATA[패스워드

안녕하세요!]]>

  </string>

</resource>


en-US.xml

<?xml version='1.0' encoding='UTF-8'?>

<resource>

  <string id='login.id'>

    <![CDATA[ID]]>

  </string>

  <string id='login.pw'>

    <![CDATA[Password]]>

  </string>

</resource>


지원하는 언어권이 많아지면 관리하기가 복잡해지므로 간단한 툴을 하나 만들어보았다.

최근에 루비라는 언어를 공부하고 있는데 루비를 이용해서 엑셀파일에서 각 언어권 xml 파일을 생성하는 스크립트를 만들었다.


language_table.xlsx 파일의 내용은 아래와 같다고 할때.




gen_localexml.rb 파일을 실행하면  ko-KR.xml, en-US.xml, jp-JP.xml 파일이 생성된다.

# -*- coding: utf-8 -*-

require 'rexml/document'


=begin

다국어 리소스 xml 파일 생성

keys: 스트링 키 리스트

lang: 언어 리스트, 0번째는 ko-KR 값은 언어종류

=end

def generate_xmlfile(keys, lang)

doc2 = REXML::Document.new ("<?xml version='1.0' encoding='UTF-8'?>")

root = doc2.add_element("resource")


for i in (1..keys.length-1)

root.add_element("string", {"id"=>"#{keys[i]}"}) . text = REXML::CData.new( "#{lang[i]}" )

end


xml = ''

doc2.write(xml, 2)

File.write( "#{lang[0]}.xml",  xml.encode('UTF-8') )

p "generate #{lang[0]}.xml"

end


require 'win32ole'


excel = WIN32OLE::new('excel.Application')

excel_path = ARGV[0]

p "open #{excel_path}"

workbook  = excel.Workbooks.Open( excel_path )

worksheet = workbook.Worksheets(1)


# load string id

keys = []

for i in (1..100000)

val = worksheet.Cells(i,1).Value

str = val.to_s

if str.length == 0 then break end

keys.push(str)

end


# load language

for i in (2..100)

size = keys.length

lang = []

# 첫 ROW가 비어있으면 break

l = worksheet.Cells(1, i).Value.to_s

if l.length == 0 then break end


for j in (1..size)

val = worksheet.Cells(j, i).Value

str = val.to_s

lang.push(str)


# 값이 없는것 워닝노출

if str.length == 0 then

p "------> warning #{l} #{keys[j-1]} is empty!"

end

end


generate_xmlfile(keys, lang)

end


excel.Quit()


실행결과는 아래와 같다.  언어 텍스트가 없는 아이디에 대해서는 경고를 뿌려준다.

xml 파일을 손수 편집할 필요가 없으며 문자열 수정이나 추가 삭제가 필요한 경우  엑셀파일을 수정하면 된다. 

E:\Down2\locale_test>"c:\Ruby200\bin\ruby.exe" gen_localexml.rb "E:\Down2\locale

_test\language_table.xlsx"

"open E:\\Down2\\locale_test\\language_table.xlsx"

"generate ko-KR.xml"

"generate en-US.xml"

"------> warning jp-JP login.id is empty!"

"------> warning jp-JP login.pw is empty!"

"generate jp-JP.xml"


E:\Down2\locale_test>if not 0 == 0 goto error


E:\Down2\locale_test>echo "generate local xml [OK]"

"generate local xml [OK]"


E:\Down2\locale_test>exit /b 0



이 코드를 이용하여  sdp 프로젝트에 다국어를 지원을 쉽게 구현할 수 있을 것이다.





top

posted at

2013. 8. 20. 22:25


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크