kone
소미소프트
소미소프트

번역연습하다 알게된 Iavra_MZ_Localization_byNeomaStudio 플러그인으로된 게임 번역법(.jsono)

06/04/2026, 00:32:08
정보
32851 views · 10 likes

여기저기 뒤져봐도 번역방법이 안나와있는거 같아서 대략적으로 나마 가이드 라인 비슷한걸 써보려고 합니다 . (아마도 앵간한 대사들은 다 번역이 될것으로 사료됩니다. )

……………… 이미 있는 내용이라믄 내 3시간 돌려줘요…

대략적인 흐름은 …

1.번역할 파일들을 언패킹 해서 (node.js 와 단순한 코드를 활용해서)

2.파일들을 json으로 변환시키고 번역.

3.다시 언패킹해서 집어넣기

준비물 — node.js ,밑에 적어넣은 소스코드 ,저장시엔 utf-8로 저장



MV나 MZ 중 다국어 지원 게임들은 외부 플러그인으로 언어 파일들을 압축해놓은게 있었습니다. (.jsono)

1

마마노 오쿠니 토도쿠라는 게임인데, 요거를 예시로 설명해드리겠습니다. 요 게임같은경우 스타트를 누르면 일본어, 영어 , 중국어 3개를 지원하는데,

1

Iavra_MZ_Localization_byNeomaStudio 이 플러그인으로 로컬라이징을 했다는걸 알았습니다.

이 경우 mz 추출툴같은거로 대사 파일이 추출이 안돼더라구요. data의 파일들이 .jsono 로 되어있고 내부는 무려 base64 를 베이스로 한 암호화가 되어있습니다.

다른 데이터들은 일단 차차 생각하기로 하고…. 단순하게 로컬라이징 해서 패키징 되어있다 생각되는 애들이 있습니다.

1

1.lang - 랭귀지일테고 , 뒤에 en 까지 붙어있는것으로 보아 영어번역이 되어있는녀석들이고 이녀석들을 번역하면 될거같습니다. 일단 전부 복사해서 한 폴더에 집어넣어줍니다.

2.node.js를 다운로드 해서 설치해주세요. (LTS붙은거로 하면될겁니다.)
https://nodejs.org/ko/download

1

1

3.번역할 파일들을 복사한 폴더에서 우클릭 터미널을 열어줍니다.

1
  1. 터미널에 npm install lz-string 입력후 엔터.
    - 이 시스템에서 스크립트…. 어쩌구 하는 오류가 뜬다면 , Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    입력후 엔터 그후 다시 위에 npm 어쩌구 입력.

  2. 폴더 내에 메모장같은거 만들어서 converter.js 로 이름 및 확장자를 바꿔주고 메모장이나 노트패드++ 같은거로 열어서 아래 코드를 입력.

    소스코드

    const fs = require('fs');

    const path = require('path');

    const LZString = require('lz-string');

    const currentDir = process.cwd();

    console.log("==================================================");

    console.log(" [Iavra 번역 파이프라인] 언팩/리팩 통합 모듈");

    console.log("==================================================");

    console.log(" [1] 언팩 (.jsono -> .json)");

    console.log(" [2] 리팩 (.json -> .jsono)");

    console.log("==================================================");

    const readline = require('readline').createInterface({

    input: process.stdin,

    output: process.stdout

    });

    readline.question('선택: ', (choice) => {

    if (choice === '1') runUnpack();

    else if (choice === '2') runRepack();

    else { console.log("종료"); process.exit(); }

    });

    // 1. 언팩 프로세스

    function runUnpack() {

    const files = fs.readdirSync(currentDir).filter(f => f.endsWith('.jsono'));

    files.forEach(file => {

    const raw = fs.readFileSync(path.join(currentDir, file), 'utf-8');

    // N4WAU Base64 전용 필터링: 유효 문자 외 전부 제거

    const clean = raw.replace(/[^A-Za-z0-9+/=]/g, '');

    const decrypted = LZString.decompressFromBase64(clean);

    if (decrypted) {

    const outPath = path.join(currentDir, file.replace('.jsono', '.json'));

    fs.writeFileSync(outPath, JSON.stringify(JSON.parse(decrypted), null, 4), 'utf-8');

    console.log[성공] 추출: ${file});

    } else {

    console.log[실패] 해독 불가: ${file});

    }

    });

    process.exit();

    }

    // 2. 리팩 프로세스

    function runRepack() {

    const targetDir = path.join(currentDir, 'repacking');

    if (!fs.existsSync(targetDir)) fs.mkdirSync(targetDir);

    const files = fs.readdirSync(currentDir).filter(f => f.endsWith('.json'));

    files.forEach(file => {

    const raw = fs.readFileSync(path.join(currentDir, file), 'utf-8');

    // Base64 압축 봉인

    const encrypted = LZString.compressToBase64(JSON.stringify(JSON.parse(raw)));

    fs.writeFileSync(path.join(targetDir, file.replace('.json', '.jsono')), encrypted, 'utf-8');

    console.log[성공] 봉인: ${file});

    });

    process.exit();

    }

1

소스코드가 작동하지않을경우 이렇게 수정해주시면 됩니다. gorgon 님 감사합니다.

  1. 터미널에서 node converter.js 입력후 엔터 누르면 이렇게 나올겁니다. 1번 입력후 엔터를 누르면 폴더내의 파일들을 알아서 척척해줄겁니다.

1

그러면 이제 아래 사진같이 나올겁니다 . 하나를 열어보면 ….

1
1

h는 엣찌 대사였나 보군요. 이렇게 쭉 나옵니다. 확인하기 쉬운 파일을 찾아서( g 로 된게 글로벌이라 생각되니이걸로) 대충 번역해서 …

1

※utf-8로 저장해야합니다. 꼭!

그 후 다시 터미널에서 node converter.js 입력후 이번에는 2번을 선택하면, 자동으로 리패킹이라고 폴더를 만들고 거기에 저장됩니다.

안타깝게도 그냥 통째로 하는걸로만 만들어놔서 (자바는 잘 몰라서 제미나이를 이용했습니다. ㅎㅎ;) 전부 리패킹되서 폴더에 들어가 있을겁니다.

1
1

여기서 아까 번역한 lang_g 요것만 data로 옮겨서 게임을 실행해보믄…

1

명칭이랑 타이틀이 바뀐것을 확인할수 있습니다.

대략 번역할 파일들을 훑어본 결과는 저기있는 내용만 번역해도 이미지빼곤 전부 번역할수 있을거 같더라구요….

여담

번역 연습해보겠다고 게임하나 잡고 하다가 나중에는 오기가 생겨서 c++로 소스 열심히 짜다가 파싱부분에서 1차 멘붕 base64 만이 아니라는것에

2차 멘붕와서 제미나이랑 열심히 상담하다 js로 변환해달라고 해서 해봤는데 작동을 안해서 3차 멘붕 그후 내부파일 보여주니 그제서야 토해내더라구요.

저는 여기까지인것 같습니다.

긴글 읽어주셔서 감사하고 행복한 하루 되세요.

대략 ai 번역은 번역탭에 올려놨습니다 . 일단은 …. 나머지는 …. 글쎄요….

10
6 comments
06/04 Edited 06/04
좀 복잡해보이긴 한데 좋은 예시일듯 정규식으로 짜서 추출 후 통으로 돌리면 번역은 금새 할 수 있을 것 같습니다. 영문 쪽 스크립트 번역보단 일본어 스크립트 번역으로 진행하시는 게 번역 진행은 수월하실 것 같네요.
약간 프로그래머로써 틀딱 이라고 할까요. 유니코드임에도 복호화시 혹시모를 데이터 변질이 있을까 겁이나서 영어로 먼저 해봤습니다. ㅎㅎ
06/04
소스코드 그대로 넣어도 안되서 확인해 보니까, console.log[성공] 추출: ${file}); console.log[실패] 해독 불가: ${file}); console.log[성공] 봉인: ${file}); 이 부분들을 인식을 못하고 있었습니다. console.log('[성공] 추출: ${file}'); 이런 식으로 고쳐주면 잘 작동하니 따라하시는 분들은 참고 바랍니다.
수정 감사합니다. ㅠㅜ 제미나이 이놈은 나중에 혼내도록 하겠습니다...
06/25
역시 비전공자에게는 어렵네요
Samples
일반
코네
09/13 134 0
어흐 난 왜 이런게 너무좋지
일반
쁠뿡
08/31 425 0
최근에 본 작품인데 질문점 내용있음
질문
korean6638
08/31 421 0
자료 업로드 메가로 해도 괜찮나요?
질문
ddalddal2
08/31 565 0
요르티나 다햇는데 먼가 몬가임 ./....................
후기 및 공략
a123123a1231237
08/31 907 0
【하렘(?)/근친】나를 벌칙게임 소재로 삼지마! (삼아!) EX
동인
HoneyWorks
08/31 3375 11
요즘 뭔가 야겜들 퀄리티가 전반적으로 낮아지지 않았나요?
일반
ganzzi
08/31 1420 -3
그 옛날게임인데
질문
사과맛사탕
08/31 963 1
[그냥복구] 우리들의 육변기 선생님 -the GAME- 전 날라리엄마 교사의 변태 생활
복구
ttime490
08/31 3212 8
혹시 텍스트쪽에서 검열없는 ai 있을까요?
질문
ixa194
08/31 1563 1
오치카노 이 미친새기
작업현황
하츠네미쿠
08/31 1838 6
긴긴파크 꼴리긴 뒤지게 꼴리는데
후기 및 공략
ksikio123
08/30 1936 3
여자 작게만든다음 다리랑 뷰지 강제로 벌리는것도 좋네
야짤
superkiller123
08/30 3540 2
로리 거유 소녀에게 최면을 걸어 섹스하는 애니메이션 영상 게임
영상
ロリ巨乳
08/30 7053 16
직번) [James] 비몽사몽
동인
안드레
08/30 8328 7
샀다 보이즈..ㄷ
일반
쩝냡
08/30 5299 7
(직번)[몬무스]당신을 집착하는 니쿠사씨
동인
멕무
08/30 14209 17
스팀에서만 나오는 무인도 서바이벌 게임인데...
일반
haeun0511
08/30 5209 0
이런 것도 ntr 인가요 게임 추천 좀요
질문
양이오
08/30 4517 0
루나와 색욕의 고도 개지리넹
일반
İstiklâl Marşı
08/30 4066 0
이누히메 2.0 내년에 나오려나
일반
coke1566
08/30 4421 0
프린세스 시너지 초반에 비해 뒷심이 아쉽네
후기 및 공략
33709
08/30 4613 4
여친최면떳냐?
일반
sepisid
08/30 4816 3
시간 용자 엄청 재밌네 이거
일반
sinbalnom
08/30 4155 2
복구요청)RJ01368793-느슨한 서바이벌 ~알몸섬의 소녀들~
요청
ㅇㅇ
08/30 4408 0
[AI 번역][Kairaku Amnesia (Kinuo)] 가난한 아내가 집세를 보지로 갚을 때까지 ~28세 I컵 청초 아내, 악취나는 털복숭이 추남 집주인에게 NTR~
동인
crazyerdog
08/30 19609 29
아 게임 생각이 안나
질문
ghdrlfdl
08/30 3704 0
8월 마지막 날 그 긴거 예상중...
일반
ロリ巨乳
08/30 4785 2
망가 하나 찾아주실 수 있나요?
질문
churros
08/30 4128 0
[요청복구] RJ01295900 교배도시에 어서오세요 v1.03
복구
agnis
08/30 13986 21