한창 돌죽 확장 모듈 개발에 미쳐있었던 시절에 구상한게 하나 있음

## 마법창 한글화 ##

#$ lab_magic_window_translate = true


## 기술창 한글화 ##

#$ lab_skill_window_translate = true


## 인터페이스 한글화 ##

#$ lab_interface_translate = true


## 능력창 한글화 ##

#$ lab_ability_window_translate = true


위에 있는 것 같은 기능을 만들면서 인게임에 들어오는 텍스트를 실시간 치환하는 방법으로

번역이 충분히 가능하겠다는 가능성을 깨닫고 인게임 출력을 정교하게 구문분석/치환번역 할 수 있는

라이브러리를 만들면 실시간 치환출력이 가능하지 않을까? 라는 구상을 했었음



이 라이브러리는 일종의 자체 맵핑 언어를 통해 치환 번역을 실시하는데


추출부, 적용부에 맵핑 언어을 사용해 데이터를 추출/치환 과정을 명시하고, 라이브러리가 이것을 자동으로 연결하여 번역문을 만들어내는 방식임


간단한 돌죽 출력문을 통해 예시를 하나 들어보면


You see here a hand axe.

Found a scroll labelled LEM NIHESAO.

Found a stone staircase leading down.


1. 추출부

추출부는 다음과 같이 정의하고 해당 번역 모듈이 장착된 상태에서 게임을 하게 되면

FOUND_SCROLL1=Found a scroll labelled ${SCROLL_NAME}.


번역 데이터베이스에

FOUND_SCROLL1.SCROLL_NAME

LEM NIHESAO

DAE CHUNG

SCRALNA ME


뭐 이런식으로 스크롤 문자가 차곡차곡 쌓이게 됨

이건 번역 참여자들이 번역을 해줘야하는 원자 단어 뭉치이고

추출부의 중첩 적용에 대해서는 일단 깊게 생각은 안해봄


미치광이 이우프가 "우헤헤"라고 말했다.

미치광이 이우프가 "나는 세상의 진리에 대해서 모르는게 없지!"라고 말했다

미치광이 이우프가 "나는 고대 철학에 대해서 모르는게 없지!"라고 말했다

<추출부 중첩이 필요한 예시 한가지>


FOUND_SCROLL1.SCROLL_NAME

LEM NIHESAO : 룬문자1

DAE CHUNG : 대충

SCRALNA ME : 스크롤이름

<번역 예시>


2. 번역부

FOUND_SCROLL1=${SCROLL_NAME} 라벨이 붙은 스크롤을 발견했다.


이렇게 번역을 추가하면 번역 라이브러리가 자동으로

룬문자1 라벨이 붙은 스크롤이 발견했다.

이런식으로 번역하게끔 만들 예정.


웹핵의 경우 웹 인터페이스에 번역을 위한 모듈을 붙일수 있는 형태이므로

번역 권한자가 실시간으로 추출부/번역부를 등록 갱신하면서 게임을 진행할 수 있도록 만들면 게임하면서 번역할 수 있기도 하고

바로바로 적용을 확인하면서 번역할 수 있으니 빠른 번역이 이루어질 수 있을 것이라고 생각함


3. 번역 커스텀 스크립트

고퀄 번역을 위해서는 조사처리가 필수인데 그 밖에 추출부의 데이터베이스 저장전 선행 처리에도 커스텀 스크립트 기능이 필요하다고 예상됨


You see here a hand axe.


이걸 예로 들면


추출부

YOU_SEE_HERE1=You see here ${GENERIC_ITEM}.


번역부 #1

YOU_SEE_HERE1=당신은 ${GENERIC_ITEM}이/가 보인다.


번역부 #2

YOU_SEE_HERE1=당신은 ${GENERIC_ITEM}#KOREAN_JOSA1($1)가 보인다.


번역부 #1의 방식보다

번역부 #2와 같이

#FUNCTION_NAME($숫자)와 같은 식으로 프로그래밍 언어에서 음운분석을 통해 알아서 조사를 끼워넣는 함수를 번역부에 사용가능하도록 커스텀 스크립트를 지원하거나

* $숫자는 N번째 ${} 참조물을 반환


데이터베이스에 저장하기 전 a, the같은 정관사를 빼고 저장할 필요등이 있는 경우 GENERIC_ITEM 함수를 선언해놓으면 저장 전에 선처리 과정(정관사를 제거하는)을 한번 거치게 하는 등의 용도로 쓸 수 있는 기능들의 지원도 생각해봤었고 ㅇㅇ


.................................................................................................................

아무튼 이 방법은 사람 손이 많이 들어가기는 할텐데 텍스트 치환을 통해 번역이 진행되므로 유지 보수 비용(매 버전 갱신시마다 새로 컴파일을 해야하네 말아야하네)이 적고, 프로그래머가 소스를 번역하느라 인게임 스트링을 헤집어 놓고 추가 번역 처리 코드를 삽입하면서 발생하는 오류등에서 자유롭고

철저히 게임을 블랙박스의 관점으로 바라보고 번역을 진행하므로 게임을 순정 상태로 남겨먹을수 있는 장점이 있음


일단 웹핵부터 다 만들어야 하던지 말던지 할텐데 ㅋㅋㅋ

갤에 전에 넷핵 번역하던 사람 오기도 했고

웹핵 코드 잡다가 토악질나와서 잠깐 짧게 머리식힐겸 생각 정리해봤다

대충 쓴거라 두서없는건 양해좀