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 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")