ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unity + Google SpreadSheet] 구글 스프레드 시트 자동 번역 기능 제작 & Unity 연결(Google Sheet Service) (1)
    Unity 2025. 3. 7. 12:46

    개요

    해당 포스팅은 하단의 포스팅의 연장선으로 작성되었다. Localization을 아직 연동시키지 않았다면 다음 포스팅을 참고하기 바란다. 

     

    [Unity] Localization을 활용하여 국가별 맞는 언어 적용하기

    개요현재 간단한 단어맞추기 게임을 제작중인데, 본인의 언어가 다른 언어로 어떤것인지 맞추는 게임을 만들면서 Localization의 도입이 필수적이라고 생각이 되었다. 구글 플레이 스토어에 런칭

    cgmoon.tistory.com

    저번 포스팅에서 Unity에 Localization을 적용하는 작업을 진행하였다. 

    코드를 작성하지 않고 번역을 적용할 수 있다는건 정말 감사한일이다 (땡큐 유니티!)

    하지만, 매번 텍스트를 일일이 입력하는 것도 일이고, 번역 및 검수작업도 직접 번역기를 돌리면 한세월 걸리고, 검수를 맡기자니 돈이들고...

    그래서 우리가 누구인가? 2분의 효율을 위해 2시간, 2일, 2달동안 자동화 스크립트를 제작하는 개발자 아닌가.

    이번에 진행할 사항은

    1. 구글 스프레드시트에서 App Script로 자동 번역 기능 작성하기
    2. 구글 클라우드 연결을 통해 OAuth 인증하기
    3. Unity에서 제공하는 Google Sheet Service 연결하기

    이 세가지 사항을 세부적으로 파악하며 진행할 예정이다. 

    내용이 좀 많기 때문에 두개의 포스팅으로 분리하여 작성하겠다. 

    본인의 경우 OAuth 인증부터, Google Sheet Service 연결을 위한 리다이렉션 까지... 난항이 많았기에 해당 사항들을 같이 좀 풀어보겠다.

     

    1. 구글 스프레드 시트에서 App Script 작성하기 

    먼저, Google SpreadSheet에 들어가자. 

    파일을 생성해주고, 기본적인 데이터를 입력해준다. 

    다음과 같이 데이터를 작성한다. 

    여기서 우리는 다음과 같은 규칙을 설정할 것이다. 

    1. key 값과 한국어(ko)를 작성하고, 영어, 일본어를 번역해준다. 
    2. 테이블 컬럼은 유니티에 설정된 테이블 컬럼의 순서와 같아야 한다. 

    좀 더 자연스러운 번역이 가능하도록, 한국어를 번역의 기준으로 잡았다. 

    이제 우리는 빈칸을 채워줄 번역 스크립트를 작성할 것이다. 

    확장프로그램 - Apps Script로 들어간다. 

     

    우리는 여기에 코드를 작성해 줄 예정이다. 

     

    요구사항

    1. 시트에서 바로 사용할 수 있도록 UI 탭을 하나 생성해야 한다.
    2. 엑셀 데이터를 가져와서 컬럼 인덱스를 받아온다. 
    3. 기준이 되는 인덱스는 한국어로, 한국어에 맞춰서 영어, 일본어로 번역을 진행한다. 
    // 구글 스프레드 시트에 버튼을 만들어주는 함수
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu("번역 탭")
        .addItem("자동 번역 실행", "autoTranslateSheet")
        .addToUi();
    }
    //번역을 진행하는 함수
    function autoTranslateSheet() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var range = sheet.getDataRange(); 
      var values = range.getValues();
    
      // 컬럼 인덱스 찾기
      var headers = values[0]; 
      var keyIndex = headers.indexOf("Key");
      var enIndex = headers.indexOf("English(en)");
      var jaIndex = headers.indexOf("Japanese(ja)");
      var koIndex = headers.indexOf("Korean(ko)");
    
      if (keyIndex === -1 || enIndex === -1 || jaIndex === -1 || koIndex === -1) {
        SpreadsheetApp.getUi().alert("'Key', 'English(en)', 'Japanese(ja)', 'Korean(ko)' 컬럼을 찾을 수 없습니다. 헤더를 확인하십쇼.");
        return;
      }
    
      for (var i = 1; i < values.length; i++) {
        var koText = values[i][koIndex]; 
    	// 한국어 탭에 내용이 있는경우
        if (koText) { 
          if (!values[i][enIndex]) { 
          //한국어를 영어로
            values[i][enIndex] = LanguageApp.translate(koText, "ko", "en");
          }
          if (!values[i][jaIndex]) { 
          //한국어를 일본어로
            values[i][jaIndex] = LanguageApp.translate(koText, "ko", "ja");
          }
        }
      }
    
      // 번역된 값 다시 시트에 반영
      range.setValues(values);
      SpreadsheetApp.getUi().alert("✅ 번역 완료!");
    }

    다음과 같은 스크립트를 작성하면 번역하기 버튼이 생성되며, 다음과 같이 번역이 진행되어 적용된다. 

    하지만 여기서 버튼이 뜨지 않거나, Apps Script에서 실행했을때 제대로 실행되지 않는다면?!(차단된 앱)

     

    정상이다. 

     

    처음에 진행했을땐 정말 당황했다. 

    승인 필요하대서 계정으로 로그인 할랬더니 차단되었다면서 실행이 되지 않는다. 

    인터넷에 찾아보니 고급 버튼이 있다는데 도저히 찾아볼 수가 없다. 

    그러던 중 찾은 정보....

     

    보안 수준이 낮은 앱의 액세스 권한 관리하기 - Google Workspace 관리자 고객센터

    도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

    support.google.com

    2025년 1월부터, Google Workspace 계정은 사용자 이름과 비밀번호만을 사용해 Google 계정에 로그인하도록 요청하는 
    보안 수준이 낮은 앱, 서드 파티 앱 또는 기기를 더 이상 지원하지 않습니다.
    구체적인 시행 시기는 Google Workspace 업데이트를 참고하세요.
    앱에 액세스하려면 OAuth를 사용해야 합니다.
    이번 변경사항에 대비하려면 보안 수준이 낮은 앱에서 OAuth로 전환의 세부정보를 검토하세요.  

     

    오마이갓 1월부터 OAuth를 사용한 인증만 가능하다는 얘기인것 같다. 

    이제 고급 버튼을 눌러 진행하는 것이 막혔으며, GCP를 사용하여 OAuth 를 통해 접근해야 한다는 것이다. 

    간단한 자동화 스크립트만 만들고 싶었을 뿐인데 이게 무슨...

     

    그래서, 구글 클라우드 플랫폼에서 프로젝트를 생성하고, OAuth 를 적용시켜보자. 

    2. 구글 클라우드 플랫폼에서 OAuth 설정하기

     

    Google 클라우드 플랫폼

    로그인 Google 클라우드 플랫폼으로 이동

    accounts.google.com

     

    구글 클라우드에서 새 프로젝트를 생성해주자.

    생성이 완료되면, API 및 서비스로 들어간다. 

    우리는 여기서 OAuth 동의 화면 탭으로 들어간다. 

    들어가서 시작하기 버튼을 눌러, 세팅을 완료하여 준다. 

    세팅이 완료되면,Oauth 클라이언트를 만들러 가보자. 

    우리는 웹으로 접근할 것이므로, 

    웹 어플리케이션으로 설정해준다. 이름을 원하는 것으로 작성해주고 만들기 클릭.

    잘 만들어지면 다음과 같이 웹 클라이언트가 생성된다. 

    이제 다시 OAuth 탭으로 들어와서, 대상 탭으로 들어가자. 

    대상 탭에서, 테스트 사용자를 등록해준다. 

    이 스크립트를 사용할 본인(+팀원이 있다면 팀원 이메일도)을 등록해주면 된다.(당연히 지메일이어야 합니다)

    앱을 게시하기 위해서는 개인정보 처리방침, 썸네일등을 제작해서 넣어주고 심사를 진행해야 하기 때문에, 테스트로 유지한다. 

    이제 OAuth를 사용할 준비는 완료되었다. 

    이제 클라우드 프로젝트를 구글 스프레드시트와 연동시켜 보자.

    먼저 Google Cloud 대시보드로 돌아간다. 

    프로젝트 번호는 해당 대시보드에서 확인할 수 있으며, 프로젝트 번호를 확인하여 복사해두자.

    코드를 작성했던 Apps Script로 들어가서, 프로젝트 설정으로 들어간다.

    설정에 들어가면 GCP 프로젝트 번호를 입력하는 부분이 있는데, 위에서 복사한 번호를 입력해준다. 

    유효한 번호임이 확인되면, 설정 버튼을 눌러 저장해주자. 

    이제 코드 편집으로 돌아가서 실행시켜보면, 아까와는 좀 다른 화면이 뜬다.

    계속 버튼을 눌러주어서 액세스를 요청하면, 정상적으로 실행이 되면서 

    다음과 같이 잘 실행되는 것을 확인할 수 있다!

     

    마무리하며....

    우리는 1차적으로 key 값을 지정해주고 한글을 작성하면 버튼을 눌렀을때 자동으로 번역이 되는 기능을 제작하였다. 

    OAuth 인증을 진행해야 했기 때문에 좀 관문이 많았다. 정책이 변경된지 얼마 지나지 않았기도 했고,

    인터넷에 데이터가 많지 않아 시간을 좀 썼다. 

    하지만 이렇게 구성해놓고 나니, 버튼 한번 딸-깍 해서 채워지는 테이블들을 보자니 기분이 정말 좋다.

    이 기분에 개발 하는게 아닌가~ 다시금 생각하게 된다. 

     

    다음 포스팅에서는 해당 테이블을 Unity에 연결하여 불러오는 작업을 진행할 예정이다. 

    우리는 Google Sheet Service를 사용하여 따로 플러그인 설치할 필요없이 연동을 진행 해 줄 수 있다.

    Unity에 연동할 때에도 OAuth 인증이 필요하기 때문에, 해당 페이지는 닫지 않은 채로 남겨두자.


    ++

    근데, 좀 부족한 부분이 보인다. 번역이 좀 미묘하게 잘못되고 있는 듯한 기분을 받았다.

    예를 들면 게임 종료하기가 game over로 번역이 된다던가...

    그래서 이후 포스팅에서는, 일차적으로 번역을 진행하고, AI API를 사용하여 검수 작업을 진행하는 코드로 개선해볼 예정이다. 

     


    이 포스팅 글이 OAuth 인증때문에 곤욕을 치른 사람들에게 도움이 되길 바라며,

    😘즐코(즐거운 코딩 되시길)!

     


    ++03/23일자 추가

    최근에 알게 되었다. 이미 구글 스프레드 시트에서 번역 시스템을 제공한다는 거슬.....

     

    GoogleTranslate(텍스트, 출발어, 도착어)

     

    GOOGLETRANSLATE - Google Docs 편집기 고객센터

    텍스트를 한 언어에서 다른 언어로 번역합니다. 사용 예 GOOGLETRANSLATE("Hello World","en","es") GOOGLETRANSLATE(A2,B2,C2) GOOGLETRANSLATE(A2) 구문 GoogleTranslate(텍스트, 출발어, 도착어) 텍스트 - 번역할 텍스트입니

    support.google.com

    이걸 쓰면 굉장히 간단하게 기계 번역을 진행할 수 있다. 

    이런식으로 key / 영어 / 일본어 / 한국어로 설정되어 있다고 보자. 

    영어 컬럼에는 다음과 같이 작성한다. 

    =GOOGLETRANSLATE(D64,"KO","EN")

    여기서 D64 = 전부받기, 출발어는 D64의 언어 코드, 도착어는 번역될 언어 코드(영어) 이다.

     

    이 함수를 사용하면 정말 간단하게 번역이 가능하다. 

    일본어의 경우 언어 코드 JA를 입력해주면 번역이 된다. 

     

    국가 별 언어 코드는 

     

    지원되는 언어 - Play Console 고객센터

     

    support.google.com

    에서 확인할 수 있다. 

    아는 것이 힘이라고... 다음엔 좀 더 찾아보고 진행해보자.

Designed by Tistory.