정보

    • 업무명     :  구글 번역 API와 R 프로그램을 이용하여 마인크래프트 1.12.1 모드 파일 자동으로 번역 하기

    • 작성자     : 해솔

    • 작성일     : 2020-12-27

    • 설   명      :

    • 수정이력 :

     

     내용

    [특징]

    • 마인크래프트 게임은 매우 유명한 게임이며 지금까지 약 3억명 이상의 사람들이 다운로드 하였다.

    • 특히 이 게임은 모드 개발이 매우 쉽고 용이하며 이로 인하여 매우 많은 컨텐츠들이 모드로 만들어졌다.

    • 이 게임은 기본적으로 한글 지원이 아주 잘 되어 있지만, 상기한 모드의 경우 한글이 아닌 영어로만 쓰여진 경우가 있어, 영어에 익숙하지 않은 플레이어들의 경우 게임 이용에 불편함이 있을 수 있다.

    • 따라서 본 글에서는 구글번역 API와 R 프로그램을 이용하여 마인크래프트의 모드 파일을 한글로 번역하는 방법을 알아보고자 한다.

    MOJANG에서 최초 개발한 마인크래프트

     

     

    [기능]

    • 마인크래프트의 모드(jar) 파일을 한글로 변환하는 기능

     

    [활용 자료]

    • 구글 번역 API

    • R 및 RStudio

    • 마인크래프트 런처 및 모드 파일

     

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 본문의 설명 참조

     

    [사용 OS]

    • Windows10

     

    [사용 언어]

    • R v4.0.3

    • R Studio v1.2.5033

     

     

     사전 준비 작업 (구글 번역 API키 등록)

    주의 : 구글 번역 API 는 최초 등록 후 90일 동안 무료로 사용할 수 있고, 무료 채험 기간이 끝났다고 해도 과금이 되는 일은 없지만, 요금 정산을 위해 등록해야 할 신용카드가 필요하다. 

     

    [구글 번역 API 키 등록]

    • 1. 구글 계정을 생성 후 로그인을 한다. (이미 계정이 있는 경우 생략)

    • 2. 아래의 페이지에 접속 한다.

     

    Google Cloud Platform

    하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

    accounts.google.com

     

    • 3. 아래와 같이 동의 후 확인 버튼을 클릭한다.

     

    • 4. 브라우저 상단의 활성화 버튼을 클릭한다.

     

     

     

    • 5. 아래와 같은 화면이 나오면 계속 버튼을 클릭한다.

    • 6. 개인정보를 입력 후 계속 버튼을 클릭한다.

     

     

     

    • 7. 휴대폰 인증을 수행한다. (스크린샷 생략)

     

    • 8. 결재수단으로 사용할 카드를 등록한다.

     

    • 9. 아래와 같은 화면이 뜬다면 결재 등록에 성공한 것이다. (실제로 과금이 되진 않음)

     

     

    • 10. 화면 좌측 상단의 my first project 버튼 클릭

     

    • 11. 새 프로젝트 클릭

     

     

    • 12. 적절한 이름을 입력 후 만들기 버튼을 클릭 (한글 입력 불가)

     

    • 13. 화면 우측 상단에 아래와 같은 메세지가 뜨는 경우 프로젝트 만들기에 성공한 것이다.

     

    • 14. 프로젝트 선택 클릭

     

    • 15, 스크롤을 아래로 내린 후 API 탐색 및 사용설정 클릭

     

     

    • 16. 스크롤을 아래로 내린 후 Cloud Translation API 클릭

     

    • 16-1. 만약 16에 해당하는 버튼이 보이지 않는다면 좌측의 스크롤을 내린 후 번역 이라는 글자를 찾은 후 대시보드 클릭

     

     

    • 이후 아래의 화면에서 API 사용 설정을 클릭하면 위의 16번에 해당하는 매뉴가 보이게 된다.

     

    • 17. 화면 좌측 매뉴로부터 사용자 인증정보 클릭

     

    • 18. 화면 위에 위치한 사용자인증정보만들기 -> api키 클릭

     

    • 19. 아래와 같이 API가 활성화 되면 최종적으로 키가 만들어진 것이다.

     

    • 20. 키를 복사한 후 메모장에 붙여넣기 하자. (타인에게 보여주면 안됨)

     

     프로그램 다운로드 및 구동 준비

    • 1. 아래의 링크에서 첨부 파일을 다운로드 한다.

     

    마인크래프트 모드 번역 프로그램.zip

     

    drive.google.com

     

    • 2. 압축을 헤제한 후 설치파일 안에 있는 모든 프로그램을 설치한다 (next 계속 클릭)

     

    • 3. 번역 API.Rproj 파일을 더블 클릭해서 연 후 R 확장자 프로그램 두개를 모두 연다.

     

     

    • 4. 여기서 install.R 은 프로그램 구동에 필요한 라이브러리가 들어있는 코드인데, 해당 파일의 코드를 ctrl+a 로 선택 후 Run 버튼을 클릭하면 된다. (간혹 콘솔창에 번호를 입력하라고 나오는데 이 때는 All 에 해당하는 번호를 선택 후 엔터를 쳐 주면 된다.)  [이 과정은 처음 한번만 실행해주면 됨]

     

     

     

     프로그램 구동

    [마인크래프트 모드 번역 방법 설명]

    • 해당 프로그램은 영어로 된 스크립트를 한글로 자동으로 바꾸는 방법에 대해 설명하고 있으므로, 기존에 jar 파일 압축 헤제 및 영문 스크립트 파일의 위치를 모르는 경우 (즉 모드 번역의 개요를 모르는 경우) 아래의 유튜브 자료를 참조하길 바람.

     

    [구글 번역 API 키 입력 자료에 저장]

    • 다운로드 받은 자료 내에서 key 폴더로 들어간 후 key.txt 파일을 연후 "여기에 키를 입력하세요" 대신 처음에 발급받은 API 키를 입력 후 저장

     

    [모드파일 가져오기]

    • 내가 번역하고자 하는 마인크래프트의 jar 모드파일을 준비한 후 자료 내의 jar 폴더에 위치시킨 후 압축을 헤제

     

    • 모드 파일 안에 위치한 스크립트 파일 중 영어 스크립트 파일을 찾는다. 일반적으로 "\assets\모드이름\lang" 디렉토리 내에 존재하며, 영어 스크립트 파일의 이름은 en_US.lang 이다.

     

     

    • 해당 파일을 복사한 후 다운받은 파일 안의 INPUT 폴더 안에 복사 후 붙여넣는다.

     

    [프로그램 구동하기]

    • 처음의 Rstudio 편집기로 돌아간 후 alphaver.R 프로그램이 선택된 탭을 클릭한다.

     

     

    • 모든 코드를 드래그 하거나 ctrl+a 를 눌러 모두 선택 후 Run 버튼을 클릭하거나, ctrl+enter 단축키를 통해 코드를 실행한다.

     

    • 번역이 끝나면 현재 디렉토리 내에 ko_KR.lang 파일이 생성된다. 이것이 번역 결과물이다.

    결과파일이 생성 되었다.
    번역이 완료된 모습

     

    • 번역 결과물 파일을 notepad++ 로 열어준다. (파일 우클릭 -> 연결 프로그램 -> 연결 프로그램에 notepad++ 선택)

     

    • 그리고 내용을 모두 선택 후 인코딩 매뉴에서 UTF-8 (BOM 없음) 으로 변경한 후 저장한다.

     

    • 저장된 파일을 기존 영문 스크립트가 들어있는 디렉토리에 붙여넣기 한 후 다시 jar 파일로 압축한다. (알집을 사용하는 것이 가장 간단함)

    다시 재압축

     

     

    • 게임을 실행 후 모드가 적용 되었는지 확인 한다.

     

     

     

     소스 코드

    [라이브러리 로드]

    library(jsonlite)
    library(stringr)
    library(translateR)
    library(data.table)

     

    [구글 API 키 읽기 및 번역할 대상 파일 읽어주기]

    mykey = fread("./key/key.txt",header = F)
    
    inputData = readLines(file("./INPUT/en_US.lang", encoding = "UTF-8"),  skipNul = FALSE)
    
    inputDataRes = inputData

     

     

    [스크립트 파일의 라인 길이를 찾은 후 라인 수 만큼 번역 수행]

    • 이 때 특수문자가 스크립트 내에 존재하는 경우에 대해서는 번역을 수행하지 않음 (스크립트 내 동적 변수의 존재 때문 - 향후 수정 예정) 

    # 길이 
    lenis = length(inputData)
    
    for (i in 1:lenis) {
      
      print(i)
      
      target_text = str_split(string = inputData[i],pattern = "=",simplify = T)
    
      if(length(target_text) == 1) {
        next
      } else if (length(target_text) == 2) {
        
        # 특문 들어가는 경우는 수정할 예정임
        if (grepl(target_text[2],pattern = "%") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = "\\[") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = "\\]") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = "<") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = ">") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = "\\{") == TRUE) {
          next
        } else if (grepl(target_text[2],pattern = "\\}") == TRUE) {
          next
        } else if (target_text[2] == "") {
          next
        } 
        
        
        dollar_check = str_split(string = target_text[2],pattern = "§",simplify = T)
        
        if(length(dollar_check) >= 2) {
          next
        }
        
        
        # 타겟 영어 지정 #
        imsi = data.frame(target = target_text[2])
        
        # 번역 #
        out <- translateR::translate(dataset = imsi,
                                             content.field = "target",
                                             google.api.key = mykey$V1,
                                             source.lang = 'en',
                                             target.lang = 'ko')
        
        # 다시 병합 #
        inputDataRes[i] = paste0(target_text[1],"=",out$translatedContent)
        
        
      } else {
        next
      }
      
    }

     

    [결과 파일 확인 및 출력]

    head(inputDataRes)
    writeLines(inputDataRes,"./ko_KR.lang")

     

    [결과 파일 확인 - 예시 파일 포함]

     

    ko_KR.lang
    0.08MB

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기