UseModWiki번역화일 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki번역화일 는 읽기 전용 페이지입니다.
UseModWiki 의 wiki.pl 프로그램을 들여다보면, 거의 모든 메세지 또는 메뉴 링크 들이 다음과 같이 T() 또는 Ts() 함수로 만들어져 있다. {{{#!vim perl $fullHtml .= '
' . Ts('Revision %s not available', $revision) . ' (' . T('showing current revision instead') . ')
'; }}} T와 Ts의 정의는 각각 다음과 같다. {{{#!vim perl sub T { my ($text) = @_; if (1) { # Later make translation optional? if (defined($Translate{$text}) && ($Translate{$text} ne '')) { return $Translate{$text}; } } return $text; } sub Ts { my ($text, $string) = @_; $text = T($text); $text =~ s/\%s/$string/; return $text; } }}} T() 는 인자로 문자열을 받는다. 그리고 $Translate{$text} 가 정의되어 있다면 (형태에서 보면 알겠지만 Translate 는 해쉬변수이고, T() 가 인자로 받은 문자열은 $text 에 담겨서 해쉬변수의 키로 들어간다) 그 값을 반환하고, 정의되어 있지 않다면 인자인 $text 를 그대로 반환한다. Ts() 는 T() 의 확장으로, 문자열 안에 "%s" 가 있으면 그 자리를 두번째 인자의 값으로 치환한다. c 의 printf("%s", string) 문을 연상하면 되겠다. 따라서, UseModWiki 의 각종 출력 메세지를 번역하고 싶다면, 프로그램 소스는 건드릴 필요 없이, %Translate 해쉬 변수에다가 해당하는 메세지를 키로 하고 번역된 메세지를 값으로 갖는 엔트리를 추가해 주면 된다. {{{#!vim perl %Translate = ("원문1", "번역문1", "원문2", "번역문2", ... ); }}} 그런데 메세지가 한두개도 아니고 (3~400여 개 쯤 된다), 이런 엔트리들을 wiki.pl 안에 넣는 것은 너무 복잡하다. 따라서 이 Translate 의 정의만 별도의 화일(translation file)에 보관한다. 예를 들어, 위키가 설치된 디렉토리 아래 translations 이라는 디렉토리를 만들고, 그 안에 korean.pl 화일을 생성한 후 화일 안에서 다음과 같이 Translate 엔트리를 정의한다. {{{ # korean.pl %Translate = split('\n',<
UseModWiki번역화일
페이지로 돌아가기 |
다른 수정본 보기