EnginePanduanFAQPatreonDiscordUnduh
Masuk
RuneTranslate · terjemahkan game Jepang dari awal sampai akhir
EnginePanduanBandingkanTeks gambarEditor saveMode CheatFAQUnduhPatreonDiscordYouTubePrivasiKetentuanKontak
Semua artikel
unreal · guides · engine · localization

Cara menerjemahkan game Unreal Engine

18 Agu 2026·9 menit baca

Game Unreal mengirim teksnya dalam tabel .locres terkompilasi di dalam kontainer .pak atau IoStore. Berikut cara membacanya, dan mengapa keluarannya adalah pak override mungil alih-alih game yang dibangun ulang.

Sebuah game Unreal Engine tampak seperti hal tersulit di drive Anda untuk diterjemahkan. Tak ada folder data, tak ada berkas skrip, tak ada .json yang bisa Anda buka — hanya sebuah eksekutabel, direktori Content/Paks yang menyimpan satu atau dua berkas .pak raksasa, dan mungkin sepasang kontainer .utoc/.ucas. Kabar baiknya, teks yang sebenarnya Anda inginkan biasanya tidak sengaja disembunyikan di dalam berkas-berkas itu. Unreal punya sistem lokalisasi kelas satu, dan kebanyakan game rilisan memakainya. Tugas Anda adalah menemukan tabelnya, mengganti string-nya, dan menyerahkan sebuah berkas kecil kepada engine yang lebih diprioritaskan daripada aslinya.

Bagian terakhir itulah yang membuat Unreal menyenangkan begitu Anda memahaminya. Anda tidak membangun ulang game 60 GB. Anda menghasilkan arsip override berukuran kilobyte dan menaruhnya di sebelah yang asli.

Satu hal sebelum langkah-langkahnya: dukungan Unreal di RuneTranslate bersifat sebisa mungkin dan lebih baru dibanding engine seperti RPG Maker atau Ren’Py. Ia sudah dipastikan bisa dimainkan pada judul UE4 sungguhan, tetapi permukaan formatnya sangat luas dan setiap studio mengemas dengan cara berbeda. Verifikasi build yang diekspor di dalam game sebelum berkomitmen pada run terjemahan panjang.

Apa yang sebenarnya dikirim sebuah game Unreal

Unreal menyimpan teks yang dihadapkan ke pemain di berkas `.locres` — bentuk terkompilasi dari FTextLocalizationResource. Ada satu per culture, ditata pada jalur seperti <Game>/Content/Localization/Game/ja/Game.locres, dengan saudaranya untuk en, zh-Hans, dan apa pun lagi yang dikirim studionya. Game tanpa terjemahan sama sekali pun biasanya tetap punya satu, untuk culture tempat ia ditulis.

Sebuah .locres bukan berkas teks dan bukan daftar kunci/nilai sederhana. Ia adalah tabel biner yang tersusun sebagai namespace, masing-masing menyimpan key, dan setiap key menunjuk ke sebuah string. Pada versi modern, namespace dan key disimpan sebagai hash (CRC32 pada versi 2, CityHash64 atas UTF-16 pada versi 3) alih-alih sebagai nama yang terbaca, dan string-nya sendiri berada di tabel pencarian bersama yang dideduplikasi, lengkap dengan hitungan referensi. Runtime tak pernah mencari sebuah string lewat teks Inggrisnya — ia mencarinya lewat pasangan namespace/key itu, yang dikompilasi ke dalam Blueprint dan C++ game saat build.

Struktur itu menentukan satu-satunya cara aman mengeditnya. RuneTranslate mempertahankan setiap hash namespace, hash key, dan hash string-sumber byte demi byte dan hanya mengubah nilainya, lalu membangun ulang tabel string yang dideduplikasi beserta refcount-nya. Tak ada yang menghitung ulang hash, jadi tak ada yang bisa menghasilkan key yang tak bisa ditemukan game. Terjemahan bebas menjadi lebih panjang atau lebih pendek dari aslinya.

Berkas .locres ini lalu dikemas ke dalam arsip .pak — dikenali dari nilai magic 0x5A6F12E1 pada footer di ujung berkas — atau, pada judul UE5 modern, ke dalam kontainer IoStore .utoc/.ucas.

Periksa cakupannya sebelum Anda menghabiskan satu jam

.locres mencakup UI, menu, pesan sistem, teks tutorial, nama item dan skill, serta subtitle — sebut saja kira-kira 90% teks yang terlihat pada game pada umumnya. Itulah bagian yang dibaca dan ditulis RuneTranslate.

Yang tidak dicakupnya: teks yang dikompilasi ke dalam DataTable atau dipanggang ke paket `.uasset` hasil cook. Sebagian studio — terutama pada proyek kecil atau yang sangat digerakkan Blueprint — menyimpan dialognya di sana alih-alih di sistem lokalisasi. String itu dialamatkan lewat hash di dalam paket hasil cook tanpa indeks direktori yang terbaca, dan membacanya dengan benar butuh berkas pemetaan .usmap yang tak disertakan game rilisan. Jika game Anda menyimpan skripnya di sana, ekstraksinya akan kembali dengan menu dan tombol tanpa satu pun dialog, dan RuneTranslate melaporkannya sebagai hasil di-luar-cakupan yang eksplisit alih-alih berpura-pura berhasil.

Layak diketahui sejak awal: cara tercepat memeriksanya adalah menjalankan langkah pembuatan proyek dan melihat apa yang keluar. Beberapa ratus string pendek yang semuanya tampak seperti Continue, Options, Are you sure? berarti UI-nya dilokalkan dan skripnya tidak. Beberapa ribu string termasuk kalimat utuh berarti Anda dalam kondisi bagus.

Kunci AES, dan mengapa ia bukan tembok

Sebagian besar pak rilisan terenkripsi AES-256 — tepatnya mode ECB tanpa IV, diterapkan pada indeks arsip dan kerap pada tiap entrinya. Tanpa kuncinya, arsip itu buram: Anda bahkan tak bisa mendaftar apa yang ada di dalamnya.

Kuncinya bisa dipulihkan karena alasan yang lugas. Game harus membaca arsipnya sendiri saat runtime, pada mesin tanpa jaringan dan tanpa server lisensi, jadi kuncinya hadir di biner rilisan sebagai data biasa. RuneTranslate memindai eksekutabel dan DLL-nya untuk jendela 32 byte, memangkasnya dengan gerbang entropi (kunci AES sungguhan punya setidaknya 25 byte berbeda dari 32), melakukan pemeriksaan kewajaran murah dengan mendekripsi blok pertama indeks dan menanyakan apakah nilai awalnya terbaca seperti panjang string yang masuk akal, lalu memverifikasi yang lolos dengan benar: dekripsi seluruh indeks dan bandingkan SHA-1-nya dengan hash yang dicatat footer pak itu sendiri. Langkah terakhir itulah bedanya dengan pencari kunci berbasis peringkat entropi yang beredar — sebuah kandidat entah mereproduksi hash yang dicatat arsip itu sendiri atau ia ditolak. Kunci yang salah tak pernah bisa diterima.

Sebagian game menyimpan kuncinya sebagai teks alih-alih byte mentah, dan sebagian memecahnya ke instruksi terpisah di dalam binernya; kedua kasus ditangani. Jika tak satu pun berhasil, dialog New Project menerima kunci yang ditempel dalam heksadesimal (0x… atau 64 karakter heks) atau base64, dan begitu dipulihkan kuncinya di-cache per proyek sehingga Anda tak memindai ulang eksekutabel 85 MB pada setiap ekspor.

UE5 IoStore berbeda, dan ekstraksinya ditargetkan

Judul UE5 makin sering mengirim kontainer IoStore alih-alih pak biasa: sebuah direktori .utoc yang dipasangkan dengan blob data .ucas, memakai kompresi Oodle dan enkripsinya sendiri. Pendekatan naif di sini adalah membongkar semuanya, yang pada game 105 GB sama sekali bukan pendekatan.

RuneTranslate menyertakan retoc (berlisensi MIT) dan memintanya mengonversi kontainer itu menjadi pak legacy yang disaring hanya ke berkas lokalisasi — setara dengan to-legacy -f locres --no-shaders --no-script-objects. Judul IoStore 105 GB menyusut menjadi beberapa kilobyte .locres, dalam hitungan detik alih-alih jam. retoc juga menangani AES dan Oodle milik kontainer itu sendiri, yang membuat game IoStore melewati masalah Oodle yang bisa dialami pak lepas.

Bagian pentingnya adalah IoStore hanya merumitkan proses membaca. Proses menulisnya universal, dan itu bagian berikutnya.

Keluarannya adalah pak override, bukan game yang dibangun ulang

Ini bagian yang tak dijelaskan dengan benar oleh panduan pesaing mana pun, dan inilah alasan menerjemahkan Unreal menjadi murah begitu ia bekerja sama sekali.

Unreal memasang berkas pak dalam urutan yang ditentukan, dan arsip mana pun yang namanya berakhiran `_P` dipasang paling akhir. Pemasangan yang belakangan menang. Jadi arsip kecil yang tak berisi apa pun selain .locres modifikasi Anda, pada jalur virtual yang sama dengan yang dipakai game dasar, sekadar menaungi aslinya — manajer lokalisasi memuat milik Anda dan tak pernah melihat yang dikirim game.

  • Tanpa penandatanganan ulang. Penandatanganan pak adalah mekanisme RSA yang sepenuhnya terpisah dan jarang ditegakkan pada judul konsumen rilisan; override tidak menyentuhnya.
  • Tanpa kunci AES untuk keluarannya. Override ditulis tanpa enkripsi dan tanpa kompresi. Kuncinya hanya pernah dibutuhkan untuk membaca yang asli.
  • Tanpa pengemasan ulang game. Arsip dasarnya tak tersentuh. Instalasi 60 GB tetap 60 GB; terjemahan Anda adalah berkas berukuran kilobyte.
  • Ia bekerja untuk game IoStore juga. .locres dibaca lewat sistem berkas pak alih-alih pemuat paket Zen, jadi sebuah _P.pak lepas biasa tetap terambil bahkan oleh game UE5 yang seluruh asetnya berada di .utoc/.ucas.

Anda memasangnya dengan menyalin _P.pak yang dihasilkan ke <Game>/Content/Paks/ — folder yang sama tempat yang asli berada. Sebagian game juga memasang subfolder ~mods/, yang bekerja sama baiknya. Menghapus terjemahannya berarti menghapus satu berkas itu, yang membuat pengembalian jadi sepele dan membuatnya aman untuk diuji sejak awal.

Langkah-langkahnya

  1. Pasang RuneTranslate dari halaman unduh dan masuk. Login Patreon gratis diperlukan saat peluncuran pertama; tier gratis membuka setiap engine dan setiap penyedia — ia membatasi throughput dan menahan satu proyek pada satu waktu.
  2. Buat proyek baru dan arahkan ke folder akar game — yang berisi eksekutabel dan direktori <Game>. Deteksi mencari Content/Paks dan magic footer pak, atau .utoc/.ucas.
  3. Jika arsipnya terenkripsi, biarkan pemulihan kunci berjalan. Ia memindai biner rilisan dan memverifikasi setiap kandidat terhadap hash indeks milik pak itu sendiri. Jika hasilnya kosong, tempel sebuah kunci ke dialognya.
  4. Biarkan ekstraksi selesai. Anda mendapat entri .locres untuk culture sumber, dikelompokkan per target lokalisasi, siap ditinjau.
  5. Pilih penyedia dan terjemahkan. String UI pendek dan dialog panjang bisa dirutekan ke penyedia berbeda jika Anda ingin mengeluarkan uang hanya di tempat yang penting.
  6. Tinjau apa yang kembali. String menu adalah tempat terjemahan mesin paling lemah — sebuah Save atau Load telanjang tak punya konteks, dan tombol dua kata yang kembali sebagai satu kalimat akan meluap dari widget-nya.
  7. Ekspor. RuneTranslate menulis satu _P.pak tanpa enkripsi yang berisi .locres modifikasi Anda pada jalur relatif-engine yang benar.
  8. Salin berkas itu ke <Game>/Content/Paks/ dan luncurkan game-nya.

Uji setelah langkah 8 dengan segelintir string yang sudah diterjemahkan, sebelum Anda menjalankan seluruh game lewat sebuah penyedia. Jika override-nya akan diabaikan — folder salah, culture salah, penyiapan mount yang tak biasa — Anda ingin mengetahuinya dalam lima menit, bukan setelah membayar untuk 9.000 string.

Placeholder dan rich text

Pemformatan FText Unreal memakai {0}, {1} untuk argumen posisional dan {PlayerName}, {Count} untuk yang bernama, plus markup <RichText> dengan penutup </> untuk gaya inline. Jika sebuah penyedia terjemahan membuang atau merusak salah satunya, game tidak menampilkan kalimat yang sedikit salah — ia menampilkan format string yang rusak, atau argumennya diam-diam lenyap dari barisnya.

RuneTranslate menyamarkan setiap satu darinya menjadi placeholder netral sebelum penyedia melihat string-nya, lalu memulihkannya sesudahnya. Penyedia menerjemahkan di sekitar penanda itu alih-alih menembusnya, sehingga sebuah argumen tak bisa dihapus oleh model yang memutuskan bahwa kurung kurawalnya tampak seperti salah ketik. Jika Anda ingin melangkah lebih jauh dan menahan string tertentu sepenuhnya dari terjemahan, filter pengecualian regex bekerja pada engine mana pun, dan sebuah glosarium menjaga nama diri tetap stabil di seluruh game.

Jebakan aksen, yang merupakan bug encoding dan bukan font

Yang ini layak didokumentasikan tersendiri karena gejalanya menunjuk ke arah yang persis salah. Unreal menserialisasi string dengan awalan panjang: panjang positif berarti satu byte per karakter, panjang negatif berarti UTF-16. Engine memilih bentuk sempit hanya ketika setiap karakternya adalah ASCII 7-bit — pemeriksaannya menolak apa pun di atas 0x7F. Pemuatnya dibangun dengan cara yang sama, jadi jika ia diberi string sempit yang mengandung byte tinggi, ia menggantinya dengan ? harfiah untuk masing-masingnya.

Konsekuensi praktisnya: terjemahan yang mengandung poción mágica yang ditulis dalam bentuk sempit sampai ke pemain sebagai poci?n m?gica. Dan pita yang terdampak adalah U+0080–U+00FF, yang persis merupakan huruf beraksen bahasa Spanyol, Prancis, Jerman, Portugis, Italia, dan bahasa-bahasa Nordik. Polandia, Turki, Ceko, Yunani, Sirilik, Jepang, dan Mandarin semuanya berada di atas U+00FF, otomatis mengambil cabang lebar, dan tak pernah terdampak.

Jadi sidik jarinya adalah: aksen rusak dalam bahasa Spanyol tetapi bahasa Rusia baik-baik saja. Jika Anda melihat itu, penyebabnya adalah bug encoding pada apa pun yang menulis berkasnya, bukan glyph yang hilang di font game — glyph yang hilang dirender sebagai kotak atau sebagai ketiadaan, tak pernah sebagai tanda tanya. RuneTranslate punya bug persis ini dan memperbaikinya di 0.49.4; encoder-nya kini berada di satu tempat dan menulis bentuk lebar untuk apa pun di luar ASCII. Ini layak diketahui karena alat lain di bidang ini masih salah menanganinya.

Memilih penyedia

Tiga dari sembilan penyedia sama sekali tak butuh kunci API — Google, DeepL gratis, dan model Classic/Next-gen DeepL — dan tier gratis memberi Anda semuanya. Untuk game yang sebagian besar UI, penyedia gratis sungguh cukup. Untuk judul yang padat dialog, penyedia LLM menangani konteks jauh lebih baik; OpenAI, Anthropic, DeepSeek, endpoint apa pun yang kompatibel dengan OpenAI, dan model lokal lewat Ollama atau LM Studio semuanya tersedia. Perbandingan penyedia menuntun Anda melalui kelebihan dan kekurangan masing-masing, dengan angka biaya sungguhan.

Pemecahan masalah

Game berjalan tetapi tak ada yang diterjemahkan

Hampir selalu salah satu dari tiga hal. Berkasnya tidak berada di <Game>/Content/Paks/ — menaruhnya di sebelah eksekutabel tak melakukan apa-apa. Nama berkasnya kehilangan akhiran _P, dan dalam kasus itu ia dipasang dalam urutan alfabet biasa sehingga pak dasar bisa menang. Atau game berjalan dalam culture yang tidak Anda terjemahkan: ia memuat .locres untuk culture apa pun yang diselesaikannya saat mulai, jadi game yang memaksa en akan mengabaikan override yang hanya ditulis untuk ja. Periksa pengaturan bahasa game lebih dulu.

Ekstraksi gagal pada pak lepas terkompresi Oodle

Sebuah .pak lepas yang dikompresi dengan Oodle butuh dekompresor yang tak bisa disertakan. Jika game itu juga mengirim kontainer IoStore, jalur retoc menangani Oodle dan Anda aman. Jika hanya pak lepas, ini berhenti total untuk saat ini, dilaporkan secara eksplisit alih-alih sebagai hasil kosong yang senyap.

Game tak punya .locres di mana pun

Berarti teksnya dikompilasi ke dalam aset hasil cook, dan jalur ini tak menjangkaunya. Contoh paling jelas adalah judul UE5 live-service besar yang indeks IoStore-nya dipangkas menjadi hash konten tanpa nama berkas sama sekali — ratusan ribu chunk dan nol .locres. RuneTranslate mengatakannya alih-alih menggilas seluruh kontainer.

Deteksi sama sekali tidak menyala

Arahkan ke folder yang berisi eksekutabel, bukan ke Content/Paks itu sendiri dan bukan ke folder induk yang penuh game lain. Jika ia tetap tak terdeteksi, pengemasannya tak biasa dan layak dilaporkan — format pak punya tata letak footer yang khas per versi, dan dialek yang belum pernah dilihat siapa pun persis jenis hal yang akan ditambahkan.

Keterbatasan yang jujur

Dukungan Unreal sebisa mungkin. .locres di dalam pak lepas maupun terenkripsi dan di dalam IoStore UE5 adalah jalur yang terbukti, dipastikan bisa dimainkan di dalam game pada sebuah judul UE4 berbahasa Spanyol. Teks DataTable dan .uasset hasil cook tidak tercakup. Pak lepas terkompresi Oodle tanpa pendamping IoStore tidak didukung. Pak yang penandatanganannya ditegakkan tak bisa di-override, meski itu jarang dalam praktik. Dan karena formatnya sangat bervariasi antar versi engine dan antar studio, perlakukan ekspor pertama sebagai uji coba, bukan sebagai hasil akhir.

Yang Anda dapatkan pada akhirnya adalah build terjemahan yang bisa dimainkan dan Anda simpan di mesin Anda sendiri: game aslinya tak tersentuh, plus satu berkas kecil yang bisa Anda hapus untuk membatalkan semuanya. Jika Anda sedang membandingkan engine atau memeriksa apakah game Anda tercakup sama sekali, halaman engine Unreal memuat detail teknisnya dan semua engine mendaftar ketujuh belas format yang didukung, termasuk Unity dan RPG Maker. Jika Anda baru pada seluruh prosesnya, mulailah dengan panduan umum dan kembalilah ke sini untuk bagian khusus Unreal-nya.

Bacaan terkait
01

Cara menerjemahkan game RPG Maker

rpg-makerhow-toenginecontrol-codes18 Agu 2026 · 10 mnt
Baca →
02

Cara menerjemahkan berkas .po dan .mo sebuah game (gettext)

gettextpomoenginetutorial4 Agu 2026 · 7 mnt
Baca →
03

Cara menerjemahkan game AliceSoft System (Rance, Evenicle…)

alicesoftranceengine26 Jun 2026 · 6 mnt
Baca →

Siap mencoba RuneTranslate?

Tier gratis membuka setiap engine + setiap penyedia terjemahan. Supporter ($3/mo) membuka kecepatan penuh.

Unduh untuk Windows