raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Python - locale_string.txt numaralandırıcı

  • Konuyu başlatan Konuyu başlatan mgurbet1998
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 7
  • Görüntüleme Görüntüleme 525

mgurbet1998

Level 4
Uzman
Katılım
22 Eki 2024
Konular
27
Mesajlar
268
Online süresi
1mo 3d
Reaksiyon Skoru
166
Altın Konu
0
Başarım Puanı
74
MmoLira
2,281
DevLira
42
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

game src nin ana dizinine locale_string.txt yi atın aynı dizinde py yi çalıştırın. kendi kaynak kodlarımda düzgün çalışıt ben kullanıyorum suan ama yinede kontrol edin.

Ekran görüntüsü 2025-04-05 222209.png


Python:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os, re, shutil, sys

# ——— Ayarlar ———
START_ID        = 1000
LOCALE_FILENAME = 'locale_string.txt'

# Betik ve locale dosyasının bulunduğu klasör
script_dir  = os.path.dirname(os.path.abspath(__file__))
script_path = os.path.abspath(__file__)
locale_path = os.path.join(script_dir, LOCALE_FILENAME)

if not os.path.isfile(locale_path):
    print(f"Hata: {LOCALE_FILENAME} bulunamadı.")
    sys.exit(1)

def read_text(path):
    """UTF‑8, CP1254, Latin‑1 dene."""
    for enc in ('utf-8', 'cp1254', 'latin-1'):
        try:
            with open(path, encoding=enc) as f:
                return f.read(), enc
        except UnicodeDecodeError:
            continue
    raise UnicodeDecodeError(f"Kodlama çözülemedi: {path}")

def write_text(path, text, encoding):
    with open(path, 'w', encoding=encoding, newline='\n') as f:
        f.write(text)

# Regex’ler
STRING_RE = re.compile(r'LC_TEXT\(\s*"((?:\\.|[^"\\])*)"\s*\)')
LOCALE_RE = re.compile(r'^"((?:\\.|[^"\\])*)";$')
SPEC_RE   = re.compile(r'%(?:\d+\$)?[+-]?(?:\d+)?(?:\.\d+)?[hlL]?[diuoxXfFeEgGaAcspn]')

# 1) Tüm özgün LC_TEXT metinlerini topla ve ID/spec’li yeni anahtarı oluştur
mapping    = {}   # orig → ID string
newkey_map = {}   # orig → yeni key string
next_id    = START_ID

for root, _, files in os.walk(script_dir):
    for fn in files:
        full = os.path.join(root, fn)
        if full in (script_path, locale_path):
            continue
        try:
            data, enc = read_text(full)
        except UnicodeDecodeError:
            continue
        for orig in STRING_RE.findall(data):
            if orig not in mapping:
                id_str = str(next_id)
                mapping[orig] = id_str
                specs = SPEC_RE.findall(orig)
                if specs:
                    # ID + tüm specifier’lar + bir boşluk
                    newkey = id_str + ''.join(' ' + s for s in specs) + ' '
                else:
                    newkey = id_str
                newkey_map[orig] = newkey
                next_id += 1

if not mapping:
    print("Hiç LC_TEXT bulunamadı. Çıkılıyor.")
    sys.exit(0)

# 2) locale_string.txt’i güncelle
locale_text, locale_enc = read_text(locale_path)
lines = locale_text.splitlines()
out   = []
i = 0

while i < len(lines):
    m = LOCALE_RE.match(lines[i])
    if m and m.group(1) in newkey_map:
        out.append(f"\"{newkey_map[m.group(1)]}\";")
        if i+1 < len(lines):
            out.append(lines[i+1])
            i += 2
            if i < len(lines) and lines[i].strip()=='':
                out.append('')
                i += 1
            continue
    out.append(lines[i])
    i += 1

shutil.copy(locale_path, locale_path + '.bak')
write_text(locale_path, '\n'.join(out), locale_enc)
print(f"{LOCALE_FILENAME} güncellendi (yedek: {LOCALE_FILENAME}.bak)")

# 3) Kaynak dosyalarını güncelle
for root, _, files in os.walk(script_dir):
    for fn in files:
        full = os.path.join(root, fn)
        if full in (script_path, locale_path):
            continue
        try:
            text, enc = read_text(full)
        except UnicodeDecodeError:
            continue
        new_text = STRING_RE.sub(
            lambda m: f'LC_TEXT("{newkey_map.get(m.group(1), m.group(1))}")',
            text
        )
        if new_text != text:
            shutil.copy(full, full + '.bak')
            write_text(full, new_text, enc)
            print(f"{full} güncellendi (yedek: {fn}.bak)")
 
Paylaşım için teşekkürler iyi forumlar dilerim.
 
Yakın zamanda oturup yapacaktım global bir oyun hazırlığı içinde idim iyi geldi teşekkür ederim :=
 
paylaşım için teşşekürler
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst