const fs = require('fs'); const path = require('path'); const dir = path.join(__dirname, '..', 'public', 'intl', 'messages'); const enUS = JSON.parse(fs.readFileSync(path.join(dir, 'en-US.json'), 'utf8')); const translations = { 'hi-IN': { label: { 'account': 'खाता', 'action': 'कार्रवाई', 'add-link': 'लिंक जोड़ें', 'add-pixel': 'पिक्सेल जोड़ें', 'analysis': 'विश्लेषण', 'application': 'एप्लिकेशन', 'audience': 'दर्शक', 'campaign': 'अभियान', 'channel': 'चैनल', 'chart': 'चार्ट', 'cohorts': 'कोहॉर्ट', 'criteria': 'मानदंड', 'destination-url': 'गंतव्य URL', 'documentation': 'प्रलेखन', 'download': 'डाउनलोड', 'dropoff': 'ड्रॉपऑफ', 'environment': 'वातावरण', 'exclude-bounce': 'बाउंस को बाहर करें', 'growth': 'वृद्धि', 'hour': 'घंटा', 'invalid-url': 'अमान्य URL', 'link': 'लिंक', 'location': 'स्थान', 'minute': 'मिनट', 'month': 'महीना', 'number-of-records': '{x} {x, plural, one {रिकॉर्ड} other {रिकॉर्ड}}', 'ok': 'ठीक है', 'online': 'ऑनलाइन', 'os': 'OS', 'pixel': 'पिक्सेल', 'preferences': 'प्राथमिकताएँ', 'previous': 'पिछला', 'previous-period': 'पिछली अवधि', 'previous-year': 'पिछला वर्ष', 'profiles': 'प्रोफ़ाइल', 'save-cohort': 'कोहॉर्ट सहेजें', 'save-segment': 'सेगमेंट सहेजें', 'screen': 'स्क्रीन', 'segment': 'सेगमेंट', 'segments': 'सेगमेंट', 'sms': 'SMS', 'source': 'स्रोत', 'support': 'सहायता', 'switch-account': 'खाता बदलें', 'table': 'तालिका', 'term': 'खोज शब्द', 'title': 'शीर्षक', 'toggle-charts': 'चार्ट दिखाएँ/छिपाएँ', 'total': 'कुल', 'total-records': 'कुल रिकॉर्ड', 'traffic': 'ट्रैफ़िक', 'transactions': 'लेनदेन', 'transfer': 'स्थानांतरण', 'transfer-website': 'वेबसाइट स्थानांतरित करें', 'true': 'सत्य', 'type': 'प्रकार', 'unique': 'अद्वितीय', 'unique-events': 'अद्वितीय ईवेंट', 'uniqueCustomers': 'अद्वितीय ग्राहक', 'untitled': 'बिना शीर्षक', 'update': 'अपडेट', 'url': 'URL', 'user': 'उपयोगकर्ता', 'users': 'उपयोगकर्ता', 'utm': 'UTM', 'utm-campaign': 'UTM अभियान', 'utm-content': 'UTM सामग्री', 'utm-description': 'UTM पैरामीटर के माध्यम से अपने अभियानों को ट्रैक करें।', 'utm-medium': 'UTM माध्यम', 'utm-source': 'UTM स्रोत', 'utm-term': 'UTM शब्द', 'value': 'मान', 'version': 'संस्करण', 'view': 'देखें', 'view-only': 'केवल देखें', 'views-per-visit': 'प्रति विज़िट दृश्य', 'visits': 'विज़िट', 'website': 'वेबसाइट', 'website-id': 'वेबसाइट ID', 'window': 'विंडो', 'yesterday': 'कल' }, message: { 'action-confirmation': 'पुष्टि करने के लिए नीचे बॉक्स में {confirmation} टाइप करें।', 'bad-request': 'अमान्य अनुरोध', 'collected-data': 'एकत्रित डेटा', 'confirm-leave': 'क्या आप वाकई {target} छोड़ना चाहते हैं?', 'confirm-remove': 'क्या आप वाकई {target} को हटाना चाहते हैं?', 'delete-team-warning': 'टीम हटाने से टीम की सभी वेबसाइटें भी हट जाएँगी।', 'event-log': '{url} पर {event}', 'forbidden': 'प्रतिबंधित', 'min-password-length': 'न्यूनतम {n} वर्ण', 'new-version-available': 'Umami {version} का नया संस्करण उपलब्ध है!', 'no-event-data': 'कोई ईवेंट डेटा उपलब्ध नहीं है।', 'no-team-websites': 'इस टीम के पास कोई वेबसाइट नहीं है।', 'no-teams': 'आपने कोई टीम नहीं बनाई है।', 'no-users': 'कोई उपयोगकर्ता नहीं हैं।', 'not-found': 'नहीं मिला', 'nothing-selected': 'कुछ भी चयनित नहीं है।', 'reset-website': 'इस वेबसाइट को रीसेट करने के लिए, नीचे बॉक्स में {confirmation} टाइप करें।', 'sever-error': 'सर्वर त्रुटि', 'team-already-member': 'आप पहले से ही टीम के सदस्य हैं।', 'team-not-found': 'टीम नहीं मिली।', 'team-websites-info': 'वेबसाइटें टीम के किसी भी सदस्य द्वारा देखी जा सकती हैं।', 'transfer-team-website-to-user': 'इस वेबसाइट को अपने खाते में स्थानांतरित करें?', 'transfer-user-website-to-team': 'इस वेबसाइट को स्थानांतरित करने के लिए टीम चुनें।', 'transfer-website': 'वेबसाइट का स्वामित्व अपने खाते या किसी अन्य टीम में स्थानांतरित करें।', 'triggered-event': 'ट्रिगर किया गया ईवेंट', 'unauthorized': 'अनधिकृत', 'user-deleted': 'उपयोगकर्ता हटाया गया।', 'viewed-page': 'देखा गया पेज' } }, 'id-ID': { label: { 'account': 'Akun', 'action': 'Tindakan', 'add-link': 'Tambah tautan', 'add-pixel': 'Tambah piksel', 'analysis': 'Analisis', 'application': 'Aplikasi', 'audience': 'Audiens', 'campaign': 'Kampanye', 'channel': 'Saluran', 'chart': 'Grafik', 'cohorts': 'Kohort', 'criteria': 'Kriteria', 'data': 'Data', 'desktop': 'Desktop', 'destination-url': 'URL tujuan', 'documentation': 'Dokumentasi', 'domain': 'Domain', 'download': 'Unduh', 'email': 'Email', 'environment': 'Lingkungan', 'exclude-bounce': 'Kecualikan pantulan', 'filter': 'Filter', 'filters': 'Filter', 'funnel': 'Corong', 'growth': 'Pertumbuhan', 'hour': 'Jam', 'invalid-url': 'URL tidak valid', 'laptop': 'Laptop', 'link': 'Tautan', 'location': 'Lokasi', 'minute': 'Menit', 'model': 'Model', 'month': 'Bulan', 'ok': 'OK', 'online': 'Daring', 'os': 'OS', 'pixel': 'Piksel', 'preferences': 'Preferensi', 'profiles': 'Profil', 'role': 'Peran', 'run-query': 'Jalankan kueri', 'save-cohort': 'Simpan kohort', 'save-segment': 'Simpan segmen', 'screen': 'Layar', 'segment': 'Segmen', 'segments': 'Segmen', 'sms': 'SMS', 'source': 'Sumber', 'sum': 'Jumlah', 'support': 'Dukungan', 'switch-account': 'Ganti akun', 'table': 'Tabel', 'tablet': 'Tablet', 'tag': 'Tag', 'team-view-only': 'Hanya lihat tim', 'term': 'Kata kunci', 'total': 'Total', 'traffic': 'Lalu lintas', 'transfer': 'Transfer', 'unique-events': 'Event unik', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Kampanye', 'utm-content': 'UTM Konten', 'utm-medium': 'UTM Media', 'utm-source': 'UTM Sumber', 'utm-term': 'UTM Kata Kunci', 'version': 'Versi', 'window': 'Jendela' }, message: { 'bad-request': 'Permintaan tidak valid', 'event-log': '{event} di {url}', 'forbidden': 'Dilarang', 'not-found': 'Tidak ditemukan', 'nothing-selected': 'Tidak ada yang dipilih.', 'sever-error': 'Kesalahan server', 'unauthorized': 'Tidak diotorisasi' } }, 'ms-MY': { label: { 'access-code': 'Kod akses', 'account': 'Akaun', 'action': 'Tindakan', 'add': 'Tambah', 'add-board': 'Tambah papan', 'add-description': 'Tambah penerangan', 'add-link': 'Tambah pautan', 'add-member': 'Tambah ahli', 'add-pixel': 'Tambah piksel', 'add-step': 'Tambah langkah', 'affiliate': 'Gabungan', 'after': 'Selepas', 'all-time': 'Sepanjang masa', 'analysis': 'Analisis', 'analytics': 'Analitik', 'application': 'Aplikasi', 'apply': 'Terapkan', 'attribution': 'Atribusi', 'attribution-description': 'Lihat bagaimana pengguna berinteraksi dengan pemasaran anda dan apa yang mendorong penukaran.', 'audience': 'Khalayak', 'average': 'Purata', 'before': 'Sebelum', 'behavior': 'Tingkah laku', 'boards': 'Papan', 'breakdown': 'Pecahan', 'browser': 'Pelayar', 'campaign': 'Kempen', 'campaigns': 'Kempen', 'channel': 'Saluran', 'channels': 'Saluran', 'chart': 'Carta', 'cities': 'Bandar', 'city': 'Bandar', 'clear-all': 'Kosongkan semua', 'cohort': 'Kohort', 'cohorts': 'Kohort', 'compare': 'Bandingkan', 'compare-dates': 'Bandingkan tarikh', 'confirm': 'Sahkan', 'contains': 'Mengandungi', 'content': 'Kandungan', 'continue': 'Teruskan', 'conversion': 'Penukaran', 'conversion-rate': 'Kadar penukaran', 'conversion-step': 'Langkah penukaran', 'count': 'Bilangan', 'country': 'Negara', 'create': 'Cipta', 'create-report': 'Cipta laporan', 'create-team': 'Cipta pasukan', 'create-user': 'Cipta pengguna', 'created': 'Dicipta', 'created-by': 'Dicipta oleh', 'criteria': 'Kriteria', 'currency': 'Mata wang', 'current': 'Semasa', 'data': 'Data', 'date': 'Tarikh', 'day': 'Hari', 'delete-report': 'Padam laporan', 'delete-team': 'Padam pasukan', 'delete-user': 'Padam pengguna', 'description': 'Penerangan', 'desktop': 'Desktop', 'destination-url': 'URL destinasi', 'details': 'Butiran', 'device': 'Peranti', 'direct': 'Terus', 'distinct-id': 'ID unik', 'documentation': 'Dokumentasi', 'does-not-contain': 'Tidak mengandungi', 'does-not-include': 'Tidak termasuk', 'doest-not-exist': 'Tidak wujud', 'domain': 'Domain', 'download': 'Muat turun', 'dropoff': 'Tercicir', 'edit': 'Sunting', 'edit-dashboard': 'Sunting papan pemuka', 'edit-member': 'Sunting ahli', 'email': 'E-mel', 'end-step': 'Langkah akhir', 'environment': 'Persekitaran', 'event': 'Peristiwa', 'event-data': 'Data peristiwa', 'event-name': 'Nama peristiwa', 'exclude-bounce': 'Kecualikan lantunan', 'exists': 'Wujud', 'false': 'Palsu', 'field': 'Medan', 'fields': 'Medan', 'filter': 'Tapis', 'filters': 'Tapis', 'first-click': 'Klik pertama', 'first-seen': 'Pertama dilihat', 'funnel': 'Corong', 'funnel-description': 'Fahami kadar penukaran dan tercicir pengguna.', 'funnels': 'Corong', 'goal': 'Matlamat', 'goals': 'Matlamat', 'goals-description': 'Jejaki matlamat anda untuk paparan halaman dan peristiwa.', 'greater-than': 'Lebih besar dari', 'greater-than-equals': 'Lebih besar atau sama', 'grouped': 'Dikumpulkan', 'growth': 'Pertumbuhan', 'hostname': 'Nama hos', 'hour': 'Jam', 'includes': 'Termasuk', 'insight': 'Wawasan', 'insights': 'Wawasan', 'insights-description': 'Terokai data anda dengan lebih mendalam menggunakan segmen dan tapis.', 'invalid-url': 'URL tidak sah', 'is': 'Adalah', 'is-false': 'Adalah palsu', 'is-not': 'Bukan', 'is-not-set': 'Tidak ditetapkan', 'is-set': 'Ditetapkan', 'is-true': 'Adalah benar', 'join': 'Sertai', 'join-team': 'Sertai pasukan', 'journey': 'Perjalanan', 'journey-description': 'Fahami bagaimana pengguna menavigasi laman web anda.', 'journeys': 'Perjalanan', 'language': 'Bahasa', 'languages': 'Bahasa', 'laptop': 'Komputer riba', 'last-click': 'Klik terakhir', 'last-months': '{x} bulan lepas', 'last-seen': 'Terakhir dilihat', 'leave': 'Keluar', 'leave-team': 'Keluar pasukan', 'less-than': 'Kurang dari', 'less-than-equals': 'Kurang atau sama', 'link': 'Pautan', 'links': 'Pautan', 'location': 'Lokasi', 'manage': 'Urus', 'manager': 'Pengurus', 'max': 'Maks', 'medium': 'Medium', 'member': 'Ahli', 'members': 'Ahli', 'min': 'Min', 'minute': 'Minit', 'model': 'Model', 'month': 'Bulan', 'my-account': 'Akaun saya', 'my-websites': 'Laman web saya', 'none': 'Tiada', 'number-of-records': '{x} {x, plural, one {rekod} other {rekod}}', 'ok': 'OK', 'online': 'Dalam talian', 'organic-search': 'Carian organik', 'organic-shopping': 'Beli-belah organik', 'organic-social': 'Sosial organik', 'organic-video': 'Video organik', 'os': 'OS', 'other': 'Lain-lain', 'overview': 'Gambaran keseluruhan', 'owner': 'Pemilik', 'page': 'Halaman', 'page-of': 'Halaman {current} daripada {total}', 'pageTitle': 'Tajuk halaman', 'paid-ads': 'Iklan berbayar', 'paid-search': 'Carian berbayar', 'paid-shopping': 'Beli-belah berbayar', 'paid-social': 'Sosial berbayar', 'paid-video': 'Video berbayar', 'path': 'Laluan', 'paths': 'Laluan', 'pixel': 'Piksel', 'pixels': 'Piksel', 'preferences': 'Keutamaan', 'previous': 'Sebelumnya', 'previous-period': 'Tempoh sebelumnya', 'previous-year': 'Tahun sebelumnya', 'profiles': 'Profil', 'properties': 'Sifat', 'property': 'Sifat', 'queries': 'Pertanyaan', 'query': 'Pertanyaan', 'query-parameters': 'Parameter pertanyaan', 'referral': 'Rujukan', 'referrer': 'Perujuk', 'regenerate': 'Jana semula', 'region': 'Wilayah', 'regions': 'Wilayah', 'remaining': 'Baki', 'remove': 'Buang', 'remove-member': 'Buang ahli', 'reports': 'Laporan', 'retention': 'Pengekalan', 'retention-description': 'Ukur kelekatan laman web anda dengan menjejaki kekerapan pengguna kembali.', 'revenue': 'Hasil', 'role': 'Peranan', 'run-query': 'Jalankan pertanyaan', 'save-cohort': 'Simpan kohort', 'save-segment': 'Simpan segmen', 'screen': 'Skrin', 'screens': 'Skrin', 'search': 'Cari', 'segment': 'Segmen', 'segments': 'Segmen', 'select': 'Pilih', 'select-date': 'Pilih tarikh', 'select-filter': 'Pilih tapis', 'select-role': 'Pilih peranan', 'select-website': 'Pilih laman web', 'session': 'Sesi', 'session-data': 'Data sesi', 'sessions': 'Sesi', 'share': 'Kongsi', 'sms': 'SMS', 'source': 'Sumber', 'sources': 'Sumber', 'start-step': 'Langkah mula', 'steps': 'Langkah', 'sum': 'Jumlah', 'support': 'Sokongan', 'switch-account': 'Tukar akaun', 'table': 'Jadual', 'tablet': 'Tablet', 'tag': 'Tag', 'tags': 'Tag', 'team': 'Pasukan', 'team-id': 'ID pasukan', 'team-manager': 'Pengurus pasukan', 'team-member': 'Ahli pasukan', 'team-name': 'Nama pasukan', 'team-owner': 'Pemilik pasukan', 'team-settings': 'Tetapan pasukan', 'team-view-only': 'Lihat sahaja pasukan', 'team-websites': 'Laman web pasukan', 'teams': 'Pasukan', 'term': 'Kata kunci', 'terms': 'Syarat', 'theme': 'Tema', 'title': 'Tajuk', 'toggle-charts': 'Togol carta', 'total': 'Jumlah', 'total-records': 'Jumlah rekod', 'traffic': 'Trafik', 'transactions': 'Transaksi', 'transfer': 'Pindahkan', 'transfer-website': 'Pindahkan laman web', 'true': 'Benar', 'type': 'Jenis', 'unique': 'Unik', 'unique-events': 'Peristiwa unik', 'uniqueCustomers': 'Pelanggan unik', 'untitled': 'Tanpa tajuk', 'update': 'Kemas kini', 'url': 'URL', 'user': 'Pengguna', 'users': 'Pengguna', 'utm': 'UTM', 'utm-campaign': 'UTM Kempen', 'utm-content': 'UTM Kandungan', 'utm-description': 'Jejaki kempen anda melalui parameter UTM.', 'utm-medium': 'UTM Medium', 'utm-source': 'UTM Sumber', 'utm-term': 'UTM Kata Kunci', 'value': 'Nilai', 'version': 'Versi', 'view': 'Lihat', 'view-only': 'Lihat sahaja', 'views-per-visit': 'Paparan per lawatan', 'visits': 'Lawatan', 'website': 'Laman web', 'website-id': 'ID laman web', 'window': 'Tetingkap', 'yesterday': 'Semalam' }, message: { 'action-confirmation': 'Taip {confirmation} dalam kotak di bawah untuk mengesahkan.', 'bad-request': 'Permintaan tidak sah', 'collected-data': 'Data yang dikumpul', 'confirm-leave': 'Adakah anda pasti mahu meninggalkan {target}?', 'confirm-remove': 'Adakah anda pasti mahu membuang {target}?', 'delete-team-warning': 'Memadamkan pasukan juga akan memadamkan semua laman web pasukan.', 'event-log': '{event} di {url}', 'forbidden': 'Dilarang', 'min-password-length': 'Panjang minimum {n} aksara', 'new-version-available': 'Versi baharu Umami {version} tersedia!', 'no-event-data': 'Tiada data peristiwa tersedia.', 'no-team-websites': 'Pasukan ini tidak mempunyai laman web.', 'no-teams': 'Anda belum mencipta sebarang pasukan.', 'no-users': 'Tiada pengguna.', 'not-found': 'Tidak dijumpai', 'nothing-selected': 'Tiada yang dipilih.', 'reset-website': 'Untuk menetapkan semula laman web ini, taip {confirmation} dalam kotak di bawah.', 'sever-error': 'Ralat pelayan', 'team-already-member': 'Anda sudah menjadi ahli pasukan.', 'team-not-found': 'Pasukan tidak dijumpai.', 'team-websites-info': 'Laman web boleh dilihat oleh sesiapa dalam pasukan.', 'transfer-team-website-to-user': 'Pindahkan laman web ini ke akaun anda?', 'transfer-user-website-to-team': 'Pilih pasukan untuk memindahkan laman web ini.', 'transfer-website': 'Pindahkan pemilikan laman web ke akaun anda atau pasukan lain.', 'triggered-event': 'Peristiwa yang dicetuskan', 'unauthorized': 'Tidak dibenarkan', 'user-deleted': 'Pengguna dipadamkan.', 'viewed-page': 'Halaman dilihat' } }, 'uz-UZ': { label: { 'account': 'Hisob', 'action': 'Harakat', 'add-link': 'Havola qo\'shish', 'add-pixel': 'Piksel qo\'shish', 'analysis': 'Tahlil', 'application': 'Ilova', 'audience': 'Auditoriya', 'campaign': 'Kampaniya', 'channel': 'Kanal', 'chart': 'Grafik', 'cohorts': 'Kogortalar', 'criteria': 'Mezonlar', 'destination-url': 'Maqsad URL', 'documentation': 'Hujjatlar', 'download': 'Yuklab olish', 'environment': 'Muhit', 'exclude-bounce': 'Chiqib ketishni istisno qilish', 'growth': 'O\'sish', 'hour': 'Soat', 'invalid-url': 'Noto\'g\'ri URL', 'link': 'Havola', 'location': 'Joylashuv', 'minute': 'Daqiqa', 'model': 'Model', 'month': 'Oy', 'ok': 'OK', 'pixel': 'Piksel', 'preferences': 'Sozlamalar', 'profiles': 'Profillar', 'save-cohort': 'Kogortani saqlash', 'save-segment': 'Segmentni saqlash', 'screen': 'Ekran', 'segment': 'Segment', 'segments': 'Segmentlar', 'sms': 'SMS', 'source': 'Manba', 'support': 'Qo\'llab-quvvatlash', 'switch-account': 'Hisobni almashtirish', 'table': 'Jadval', 'term': 'Qidiruv iborasi', 'traffic': 'Trafik', 'unique-events': 'Noyob hodisalar', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Kampaniya', 'utm-content': 'UTM Kontent', 'utm-medium': 'UTM Vosita', 'utm-source': 'UTM Manba', 'utm-term': 'UTM Ibora', 'version': 'Versiya' }, message: {} }, 'mn-MN': { label: { 'account': 'Бүртгэл', 'action': 'Үйлдэл', 'add-link': 'Холбоос нэмэх', 'add-pixel': 'Пиксел нэмэх', 'analysis': 'Шинжилгээ', 'application': 'Программ', 'audience': 'Үзэгчид', 'campaign': 'Кампанит ажил', 'channel': 'Суваг', 'chart': 'График', 'cohorts': 'Когортууд', 'criteria': 'Шалгуур', 'destination-url': 'Очих URL', 'documentation': 'Баримт бичиг', 'download': 'Татах', 'environment': 'Орчин', 'exclude-bounce': 'Буцалтыг хасах', 'growth': 'Өсөлт', 'hour': 'Цаг', 'invalid-url': 'Буруу URL', 'link': 'Холбоос', 'location': 'Байршил', 'max': 'Дээд', 'min': 'Доод', 'minute': 'Минут', 'month': 'Сар', 'online': 'Онлайн', 'os': 'ҮС', 'pixel': 'Пиксел', 'preferences': 'Тохиргоо', 'profiles': 'Профайлууд', 'query': 'Асуулга', 'referral': 'Лавлагаа', 'save-cohort': 'Когорт хадгалах', 'save-segment': 'Сегмент хадгалах', 'screen': 'Дэлгэц', 'segment': 'Сегмент', 'segments': 'Сегментүүд', 'select-role': 'Үүрэг сонгох', 'session': 'Сессия', 'sessions': 'Сессиүд', 'sms': 'SMS', 'source': 'Эх сурвалж', 'support': 'Дэмжлэг', 'switch-account': 'Бүртгэл солих', 'table': 'Хүснэгт', 'team-view-only': 'Зөвхөн багийн харагдац', 'term': 'Хайлтын нөхцөл', 'traffic': 'Урсгал', 'transactions': 'Гүйлгээнүүд', 'unique-events': 'Өвөрмөц үйл явдлууд', 'url': 'URL', 'utm': 'UTM', 'utm-campaign': 'UTM Кампанит ажил', 'utm-content': 'UTM Агуулга', 'utm-medium': 'UTM Хэрэгсэл', 'utm-source': 'UTM Эх сурвалж', 'utm-term': 'UTM Нөхцөл', 'version': 'Хувилбар' }, message: { 'bad-request': 'Буруу хүсэлт', 'forbidden': 'Хориотой', 'not-found': 'Олдсонгүй', 'nothing-selected': 'Юу ч сонгоогүй байна.', 'sever-error': 'Серверийн алдаа', 'unauthorized': 'Зөвшөөрөлгүй' } } }; for (const [locale, trans] of Object.entries(translations)) { const filePath = path.join(dir, locale + '.json'); const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); let count = 0; for (const [section, keys] of Object.entries(trans)) { for (const [key, value] of Object.entries(keys)) { if (data[section] && key in data[section]) { data[section][key] = value; count++; } } } const sorted = {}; for (const section of Object.keys(enUS)) { if (data[section]) { sorted[section] = {}; for (const key of Object.keys(enUS[section])) { if (key in data[section]) sorted[section][key] = data[section][key]; } for (const key of Object.keys(data[section])) { if (!(key in sorted[section])) sorted[section][key] = data[section][key]; } } } fs.writeFileSync(filePath, JSON.stringify(sorted, null, 2) + '\n', 'utf8'); console.log('Updated ' + locale + ': ' + count + ' keys'); }