TKK_E32230273/extract_ui.py

84 lines
4.1 KiB
Python

import os
import re
import json
base_dir = r"c:\laragon\www\fiberid"
php_files = []
for root, dirs, files in os.walk(base_dir):
for f in files:
if f.endswith('.php'):
php_files.append(os.path.join(root, f))
# A script to extract potential UI strings
ui_strings = set()
# Regexes
inner_text_re = re.compile(r'>\s*([^<]+?)\s*<')
placeholder_re = re.compile(r'placeholder=[\"\'\']([^\"\'\']+)')
title_re = re.compile(r'title=[\"\'\']([^\"\'\']+)')
alert_re_1 = re.compile(r'showCustomAlert\(\s*[\"\']([^\"\']+)[\"\']\s*,\s*[\"\']([^\"\']+)[\"\']')
# Basic Indonesian words to help filter out programming artifacts and english defaults
indonesian_words = {
'ada', 'adalah', 'akan', 'akun', 'alami', 'ambil', 'anda', 'apa', 'apakah', 'atas', 'atau', 'bagaimana',
'batal', 'baru', 'bawah', 'beberapa', 'belakang', 'belum', 'berada', 'berhasil', 'berikut', 'berkas', 'berubah',
'besar', 'bisa', 'boleh', 'bukan', 'buat', 'buku', 'butuh', 'cahaya', 'cepat', 'coba', 'cocok', 'contoh', 'dalam',
'dan', 'dapat', 'dari', 'data', 'dengan', 'depan', 'di', 'dia', 'diperbarui', 'edit', 'email', 'foto', 'gagal',
'gambar', 'ganti', 'gelap', 'hapus', 'hari', 'harus', 'hasil', 'hati', 'hidup', 'hingga', 'hubungi', 'identitas',
'informasi', 'ini', 'isi', 'itu', 'jadwal', 'jam', 'jangan', 'jaringan', 'jika', 'juga', 'kalian', 'kami', 'kamera',
'kamu', 'kanan', 'karena', 'kata', 'ke', 'kecil', 'kembali', 'kemudian', 'kiri', 'koneksi', 'konfirmasi', 'kontak',
'kuat', 'kurang', 'lalu', 'lama', 'lanjutkan', 'lebar', 'lebih', 'lemah', 'lengkap', 'lihat', 'log', 'luar',
'masuk', 'masukkan', 'mata', 'melakukan', 'memilih', 'memiliki', 'mencari', 'mendeteksi', 'menggunakan', 'mengisi',
'mengubah', 'mengunggah', 'menunggu', 'merubah', 'mereka', 'minimal', 'mula', 'mulai', 'muncul', 'nama', 'ni',
'nomor', 'oleh', 'opsi', 'pada', 'paling', 'panjang', 'password', 'pastikan', 'pencahayaan', 'pendaftaran',
'pengaturan', 'pengelola', 'pengguna', 'penghuni', 'penting', 'percobaan', 'perbarui', 'peringatan', 'perlu',
'pilih', 'pin', 'posisi', 'posisikan', 'pribadi', 'profil', 'proses', 'riwayat', 'salah', 'sama', 'sambut', 'sampai',
'sana', 'sandi', 'sangat', 'saat', 'saya', 'sebagai', 'sebelum', 'sebelumnya', 'secara', 'sedang', 'segera', 'selamat',
'selanjutnya', 'selesai', 'seluruh', 'semua', 'seperti', 'sesuai', 'setelah', 'setuju', 'siap', 'silakan', 'silahkan',
'simpan', 'sini', 'sistem', 'status', 'sudah', 'tambah', 'tambahan', 'tanpa', 'tata', 'telah', 'tempat', 'tentang',
'terang', 'terbaru', 'terdaftar', 'terdeteksi', 'terhadap', 'terjadi', 'terlalu', 'tersebut', 'tersedia', 'tetapi',
'tidak', 'tinggal', 'tolak', 'tolong', 'tutup', 'ubah', 'ukuran', 'ulang', 'umum', 'unggah', 'untuk', 'utara',
'wajah', 'waktu', 'wajib', 'warna', 'ya', 'yang'
}
def is_likely_indonesian(text):
words = set(re.findall(r'[a-zA-Z]+', text.lower()))
return len(words.intersection(indonesian_words)) > 0
def clean_extracts(items):
valid = []
for item in items:
# Strip outer spaces
item = item.strip()
# Skip empty or very short
if len(item) < 3: continue
# Skip if it's purely php tags or html artifacts
if '<?' in item or '?>' in item or item.startswith('$') or item.startswith(';') or item.startswith('{'): continue
if is_likely_indonesian(item):
valid.append(item)
return valid
for file in php_files:
try:
with open(file, 'r', encoding='utf-8') as f:
content = f.read()
except:
pass
found = []
found.extend(inner_text_re.findall(content))
found.extend(placeholder_re.findall(content))
found.extend(title_re.findall(content))
for t1, t2 in alert_re_1.findall(content):
found.extend([t1, t2])
valid_strings = clean_extracts(found)
for s in valid_strings:
ui_strings.add(s)
with open(r'c:\laragon\www\fiberid\indonesian_strings.json', 'w', encoding='utf-8') as f:
json.dump(list(ui_strings), f, ensure_ascii=False, indent=2)
print(f"Extracted {len(ui_strings)} unique Indonesian strings")