Giriş: Görsel Roman Dünyası ve Türkçe Yerelleştirme İhtiyacı
Son yıllarda bağımsız oyun geliştiriciliğinin yükselişiyle birlikte görsel roman (Visual Novel) türü muazzam bir popülerlik kazandı. Romantizm, gerilim, korku ve macera türlerinde binlerce bağımsız oyun yayınlanıyor ve bunların büyük bölümü tek bir ortak noktada buluşuyor: yalnızca İngilizce. Türün arkasındaki en büyük güçlerden biri ise hiç şüphesiz açık kaynak kodlu ve Python tabanlı olan Ren'Py oyun motorudur. Python'a yeni başladıysanız Python Nedir? rehberimiz işinizi kolaylaştıracaktır.
İşte bu noktada oyun severlerin ve bağımsız çevirmenlerin imdadına oyun yerelleştirme araçları yetişiyor. Technopat ve benzeri teknoloji forumlarında adından sıkça söz ettiren Voorhees gibi geliştiricilerin hazırladığı Python tabanlı otomatik ve yarı-otomatik çeviri araçları, binlerce satırlık diyalogu Türkçe'ye aktarmayı son derece kolaylaştırıyor. Çeviri sürecinde kullanabileceğiniz yapay zekâ destekli editörleri yapay zeka ile kod yazma araçları karşılaştırmasında bulabilirsiniz.
Bu kapsamlı rehberde; Ren'Py motorunun çalışma yapısını, kurulumdan teste kadar adım adım çeviri sürecini, Voorhees ve benzeri Python araçlarının mantığını, en sık karşılaşılan hataları ve çözüm yollarını tüm teknik detaylarıyla inceleyeceğiz.
Ren'Py Oyun Motoru Nedir ve Nasıl Çalışır?
Ren'Py, Python programlama dili üzerine inşa edilmiş, görsel roman ve yaşam simülasyonu oluşturmak için kullanılan ücretsiz ve açık kaynaklı bir motordur. Oyunun tüm mantığı, diyalogları ve arayüz ögeleri .rpy uzantılı betik dosyalarında saklanır. Oyun derlendiğinde bu dosyalar .rpyc (compiled script) formatına dönüştürülür; dağıtım sürümlerinde kaynak dosyalar genellikle yalnızca .rpyc olarak bulunur.
Bir Ren'Py oyununu çevirmenin temel mantığı şudur: oyun içindeki metin bloklarını tespit etmek, bu metinleri orijinal dilden hedef dile çevirmek ve sonucu oyunun dil sistemine (TL - Translation yapısına) geri yazmak.
# say "Merhaba dünya" - ekranda konuşma balonu gösterir
label start:
scene bg room
show eileen happy
e "Merhaba, TechWave'e hoş geldin!"
e "Bu satır oyunun orijinal metnidir."
"Anlatıcı cümleleri tırnaksız yazılır."
menu:
"Devam et":
jump son
"Çık":
return
label son:
return
Adım Adım Kurulum: Çeviri Ortamını Hazırlama
- Python ve Ren'Py SDK'yı kurun: python.org'dan güncel Python'u indirin, ardından Ren'Py resmî sitesinden en güncel SDK paketini açın. Çeviri araçlarının büyük bölümü Python 3.8+ gerektirir.
- Oyunu yedekleyin: Oyunun kurulum klasörünü olduğu gibi kopyalayın. Her türlü işlemden önce yedek almak, olası bir hatada sizi saatlerce emekten kurtarır.
- Unrpyc (decompiler) aracını indirin:
.rpycdosyalarını okunabilir.rpybiçimine dönüştürmek için topluluk tarafından geliştirilen Unrpyc'i kullanacağız. - Çeviri klasörünü oluşturun: Oyunun
game/tl/turkish/klasörü, Ren'Py'in Türkçeye özel çeviri dosyalarının varsayılan yeridir. Klasör yoksa kendiniz oluşturun. - Editörünüzü hazırlayın: VS Code veya Sublime Text ile UTF-8 kodlamalı düzenleme yapın. Kodlama yanlış seçilirse Türkçe karakterler bozulur.
- Bir test sahnesi açın: Çeviriye başlamadan önce oyunu bir kez çalıştırıp metinlerin görünür olduğunu doğrulayın.
Ren'Py'in Çeviri (TL) Sistemi
Ren'Py, çevirileri orijinal dosyadan ayrı tutar. game/tl/turkish/ altında, kaynak dosyanın yolunu taklit eden bir yapı oluşur ve her diyalog satırı şu kalıpta saklanır:
translate turkish start_1a2b3c4d:
# e "Hello, welcome to our game!"
e "Merhaba, oyunumuza hoş geldiniz!"
Burada orijinal metin yorum satırı olarak saklanırken, altındaki satıra çevrilmiş metin yazılır. Manuel olarak yüz binlerce satırı bu şekilde düzenlemek aylar alabilir. İşte tam da bu noktada Python scriptleri ve Voorhees çeviri araçları devreye girer.
Voorhees Oyun Çeviri Aracı ve Python Araçlarının Mantığı
Technopat forumlarında Voorhees takma adlı geliştirici ve topluluk üyeleri tarafından paylaşılan araçlar, Python'ın güçlü metin işleme ve web/API yeteneklerini kullanır. Bu araçların temel çalışma prensibi şu aşamalardan oluşur:
- Dosya ayrıştırma (parsing):
.rpyveya decompile edilmiş dosyalardaki diyalog metinlerini tespit etme. - Kod ve etiket koruma: Ren'Py'a özel format etiketleri (
{color=#fff},{b}), değişkenler ([player_name]) ve kaçış karakterlerinin çeviri motoruna gönderilmeden önce gizlenmesi. - API / otomatik çeviri entegrasyonu: Google Translate, DeepL, Yandex Translate veya OpenAI benzeri servisler üzerinden metinlerin toplu halde çevrilmesi.
- Yeniden yapılandırma: Çevrilen metinlerin orijinal Ren'Py formatına sadık kalarak dosyaya geri yazılması.
- Kontrol raporu: Çevirilmemiş kalan, boş kalan ya da bozulmuş satırların listelenmesi.
Adım Adım Ren'Py Oyun Çeviri Süreci
1. Aşama: Dosyaları Hazırlama ve Decompile İşlemi
Birçok Ren'Py oyunu piyasaya sürülürken .rpyc dosyaları kapalı olarak gelir. Çeviriye başlamadan önce bu dosyaları okunabilir .rpy formatına dönüştürmemiz gerekir:
- En güncel Unrpyc (Ren'Py Decompiler) aracını indirin.
- İndirdiğiniz dosyayı oyunun
game/klasörü içine kopyalayın. - Aracı komut satırından çalıştırın:
python unrpyc.py game/ - Bittiğinde her
.rpycdosyasının yanına.rpykarşılığı oluşacaktır.
2. Aşama: Python ile Metin Çıkarma ve Çeviri Scripti
Temel bir çeviri script'i aşağıdaki gibidir. Script önce metni çıkarır, Ren'Py etiketlerini koruyarak temizler, ardından çeviri fonksiyonuna gönderir:
import re
RENPY_TAG = re.compile(r'(\[.*?\]|\{.*?\})')
def clean_renpy_tags(text):
"""Ren'Py degisken ve etiketlerini gizleyip korur."""
tags = RENPY_TAG.findall(text)
cleaned = text
for i, tag in enumerate(tags):
cleaned = cleaned.replace(tag, f"__TAG_{i}__", 1)
return cleaned, tags
def restore_renpy_tags(translated_text, tags):
"""Cevrilen metne orijinal etiketleri geri ekler."""
for i, tag in enumerate(tags):
translated_text = translated_text.replace(f"__TAG_{i}__", tag)
return translated_text
def extract_dialogue(line):
"""e "Merhaba" satirindan metni cikarir."""
m = re.match(r'^(\s*(?:e|n|s)\s+)\"(.*)\"\s*$', line)
if m:
return m.group(1), m.group(2)
return None, None
# Ornek kullanim
original_line = 'e "Hello [player_name], welcome to {b}TechWave{/b}!"'
prefix, text = extract_dialogue(original_line)
cleaned, tags = clean_renpy_tags(text)
print("Temizlenmis metin:", cleaned)
print("Korunan etiketler:", tags)
# Burada 'cleaned' metni ceviri API'sine gonderilir,
# sonuc restore_renpy_tags() ile eski haline getirilir.
Voorhees gibi gelişmiş araçlar bu mantığı çok daha kapsamlı algoritmalar, hata toleransları ve kullanıcı dostu arayüzler (GUI) ile sunarlar: sürükle-bırak dosya desteği, ilerleme çubuğu ve yarım kalan çeviri raporu gibi.
3. Aşama: Türkçe Karakter ve Font Sorununu Çözme
Ren'Py oyunları varsayılan olarak Türkçe karakterleri (ğ, ş, ı, İ, ç, ö, ü) desteklemeyen İngilizce fontlar kullanabilir. Çeviriden sonra oyunda kare (□) ya da soru işareti (?) görüyorsanız font değişimi yapmalısınız. Bunun için oyunun game/gui.rpy dosyasına gidin ve Türkçe destekli bir .ttf veya .otf fontunu tanımlayın:
init python:
gui.text_font = "fonts/Roboto-Regular.ttf"
gui.name_text_font = "fonts/Roboto-Bold.ttf"
gui.interface_text_font = "fonts/Roboto-Regular.ttf"
4. Aşama: Test ve Doğrulama
Çeviri dosyalarını yazdıktan sonra oyunu Ren'Py Launcher üzerinden fast modda çalıştırın. Sahne sahne ilerleyerek tırnak bozulmalarını, kaymış etiketleri ve eksik satırları kontrol edin. Sorunlu satırları bir metin editörüyle game/tl/turkish/ altında aratıp düzeltin.
Yerelleştirmede En Sık Karşılaşılan Hatalar
| Hata | Belirti | Çözüm |
|---|---|---|
| Bozuk tırnak | Oyun açılmıyor, sözdizimi hatası | Metin içindeki " işaretini \" ile kaçırın |
| Etiket kaybı | {b}, {w} gibi komutlar ekranda düz metin görünüyor | Çeviri sırasında format etiketlerini koruyun |
| Karakter bozulması | ğ, ş, İ yerine kare veya soru işareti | Dosyayı UTF-8 kaydedin, fontu Türkçe destekleyenle değiştirin |
| Kaymış değişken | [player_name] yerine isim görünmüyor | Değişkenleri __TAG_n__ ile maskeleyip geri yazın |
| Yedeksiz işlem | Geri alınamayan bozulmalar | İşleme başlamadan önce game/ klasörünün tam yedeğini alın |
Otomatik Çeviri vs. Manuel Çeviri
Otomatik Çeviri Araçlarının Avantajları
- Hız: 500.000 kelimelik devasa bir görsel roman saatler içinde çevrilebilir.
- Erişilebilirlik: İngilizce bilmeyen oyuncular bile hikâyenin ana hatlarını anlayabilir.
- Maliyet: Bütçesiz topluluk projeleri için mükemmel bir başlangıç noktasıdır.
Manuel ve Hibrit Çevirinin Önemi
Ancak makine çevirisi; devrik cümleler, kelime oyunları (pun), jargon ve bağlama dayalı esprilerde yetersiz kalır. En ideal yaklaşım, Voorhees aracıyla taslak çeviriyi oluşturup (makine çevirisi) ardından insan gözüyle düzenleme (post-editing) yapmaktır. Özellikle karakter diyaloglarında kişilik tutarlılığı, otomatik çevirinin tek başına üstesinden gelemediği bir iştir.
Yerelleştirmede Pratik İpuçları
- Her zaman yedek alın:
game/klasörünü işlem öncesi sıkıştırıp arşivleyin. - Tutarlı sözlük tutun: Aynı İngilizce kelimenin her yerde aynı çevrilmesini sağlayın; karakter adları ve oyun içi terimler sabit kalsın.
- Format etiketlerini aynen koruyun:
{w}(bekleme),{p}(sayfa sonu),{cps=20}(yazım hızı) komutları çevrilmez. - Kısaltmaları kontrol edin: Ren'Py'de diyalog kutusu dar olduğu için İngilizce cümleye göre daha uzun Türkçe metinler taşabilir; bu durumda satır sonlarını düzenleyin.
- Yeniden test edin: Her toplu güncellemeden sonra oyunu baştan sona bir kez oynayın.
Sıkça Sorulan Sorular (SSS)
Voorhees aracını nereden bulabilirim?
Araç, Technopat ve benzeri Türk teknoloji forumlarında geliştiriciler tarafından paylaşılmaktadır. Araç güncellemelerini takip etmek için forum başlıklarını ve Python paket depolarını kontrol edin. Aracın çalışmaması durumunda bu yazıdaki açık kaynak Python script'leri tek başına da yeterlidir.
Çeviri yapmak için Python bilmek zorunda mıyım?
Arayüzlü araçlarla temel düzeyde evet, Python bilmeden ilerleyebilirsiniz. Ancak hata ayıklama, özel etiket işleme ve toplu düzeltme gibi işlerde en azından değişken, döngü ve regex kavramlarını bilmek sizi çok hızlı kılar. Temelleri Python rehberimizden öğrenebilirsiniz.
Çeviri yapmanın hukuki durumu nedir?
Ticari olmayan, kişisel/derleme amaçlı çeviriler genellikle topluluk tarafından kabul görür; ancak çeviriyi yayımlarken oyunun lisansına ve yayıncısının politikasına saygı gösterin. Çevirinizi yayınlarken kaynak oyuna ve ekibe atıfta bulunun, dosyaları ücretsiz erişime açın ve emeği geçenleri belirtin.
Oyun açılmıyor, ne yapmalıyım?
Önce game/logs/script.py.txt dosyasındaki hatayı okuyun. Çoğu sorun; yarım kalan bir satır, kaçırılmamış tırnak ya da UTF-8 yerine ANSI kaydedilmiş bir dosyadan kaynaklanır. Hata devam ederse yedeğinize dönüp adımları tek tek tekrarlayın.
Çeviriyi yapay zekâ ile tamamen bitirebilir miyim?
Kısa cevap: hayır, tek başına yeterli değil. Yapay zekâ hızlı ve ucuz taslak üretir; ancak kelime oyunları, karakter ses tonu ve kültürel referanslarda insan denetimi şarttır. En verimli model, yapay zekânın taslağı yazması + sizin edebi düzenleme yapmanızdır.
Çeviri Sonrası: Paketleme ve Dağıtım
Çeviri tamamlandıktan sonra iş bitmiş sayılmaz. Ren'Py Launcher üzerinden Build Distributions menüsünü açın, hedef platformları (Windows, macOS, Android, web) seçin ve paketi yeniden derleyin. Paketleme öncesinde şu kontrol listesini uygulayın: tüm .rpy dosyaları UTF-8 kodlamalı mı, Türkçe font pakete dahil mi, game/tl/turkish/ klasöründeki dosyalar kaynak dosyalarla aynı adlara sahip mi, menü ve arayüz metinleri de çevrildi mi? Arayüz çevirileri genellikle game/tl/turkish/gui.rpy içinde bulunur ve çoğu acemi çevirmen bu dosyayı atlar.
Dağıtımda dikkat edilmesi gereken bir diğer nokta, derlenmiş .rpyc dosyalarının eksiksiz olmasıdır. Bir dosya eksik kalırsa oyun belirli bir sahnede çöker ve oyuncu hatayı çevirinin parçası sanır. Son olarak Türkçe yamayı yayınarken sürüm notu ekleyin: hangi sürümü hangi tarihte çevirdiğinizi yazmak topluluk güvenini artırır ve ileride bir güncelleme geldiğinde neyin değiştiğini takip etmeyi kolaylaştırır.
Hız ve tutarlılık isteyenler için bir ipucu daha: çeviri belleğine (translation memory) sahip basit bir Python sözlüğü tutun. {"start": "başlangıç", "menu": "menü"} gibi tekrar eden terimleri tek yerden yönettiğinizde, oyun içi terimler hiçbir yerde şaşırtıcı biçimde değişmez. Bu küçük alışkanlık, uzun soluklu projelerde en çok işe yarayan yöntemlerden biridir.
Sonuç
Python'ın esnek yapısı ve Ren'Py motorunun modülerliği sayesinde Türkçe oyun çeviri topluluğu her geçen gün daha da büyüyor. Technopat gibi platformlarda paylaşılan Voorhees ve benzeri çeviri araçları, oyun severlerin dil engelini aşmasında hayati bir rol oynuyor. Doğru araçlar, biraz Python bilgisi, sağlam bir yedek ve dikkatli bir kontrol süreci ile siz de sevdiğiniz oyunları Türkçe'ye kazandırabilirsiniz.
Bu makale TechWave tarafından hazırlanmıştır.