/** * One-shot: ensure guest_access keys exist in all locales with translations. * Run from repo root: node scripts/patch-guest-access-i18n.js */ const fs = require('fs'); const path = require('path'); const dir = path.join(__dirname, '..', 'lang'); const en = JSON.parse(fs.readFileSync(path.join(dir, 'en.json'), 'utf8')).guest_access; const T = { pl: { title: 'Gość — Remote', subtitle: 'Tymczasowy dostęp — tylko udostępnione urządzenia', menu: 'Link gościnny', create_title: 'Utwórz link gościnny', create_hint: 'Czasowy link RdClient. Odbiorca łączy się tylko z wybranymi urządzeniami — bez logowania do Console i bez pełnej listy.', devices: 'Urządzenia', ttl: 'Ważny przez (minuty)', label: 'Etykieta (opcjonalnie)', view_only: 'Tylko podgląd', url: 'URL do udostępnienia', create: 'Utwórz link', created: 'Utworzono link gościnny', invalid_title: 'Nieprawidłowy link gościnny', missing_token: 'Brak tokenu w linku gościnnym.', expired: 'Link gościnny jest nieprawidłowy lub wygasł.', device_denied: 'Link nie zezwala na to urządzenie albo wygasł.', empty: 'Brak urządzeń na tym linku.', expires: 'Wygasa', back_to_list: 'Wróć do listy gościa', }, de: { title: 'Gast-Remote', subtitle: 'Zeitlich begrenzter Zugriff — nur freigegebene Geräte', menu: 'Gastzugriff-Link', create_title: 'Gastzugriff-Link erstellen', create_hint: 'Zeitlich begrenzter RdClient-Link. Empfänger verbinden sich nur mit den ausgewählten Geräten — kein Console-Login, keine volle Geräteliste.', devices: 'Geräte', ttl: 'Gültig für (Minuten)', label: 'Bezeichnung (optional)', view_only: 'Nur Ansicht', url: 'Freigabe-URL', create: 'Link erstellen', created: 'Gastlink erstellt', invalid_title: 'Ungültiger Gastlink', missing_token: 'Diesem Gastlink fehlt ein Token.', expired: 'Dieser Gastlink ist ungültig oder abgelaufen.', device_denied: 'Dieser Gastlink ist ungültig, abgelaufen oder erlaubt dieses Gerät nicht.', empty: 'Keine Geräte auf diesem Gastlink.', expires: 'Läuft ab', back_to_list: 'Zurück zur Gästeliste', }, fr: { title: 'Remote invité', subtitle: 'Accès temporaire — uniquement les appareils partagés', menu: "Lien d'accès invité", create_title: "Créer un lien d'accès invité", create_hint: 'Lien RdClient à durée limitée. Le destinataire ne peut se connecter qu’aux appareils sélectionnés — sans compte Console ni inventaire complet.', devices: 'Appareils', ttl: 'Valide pendant (minutes)', label: 'Libellé (optionnel)', view_only: 'Lecture seule', url: 'URL de partage', create: 'Créer le lien', created: 'Lien invité créé', invalid_title: 'Lien invité invalide', missing_token: 'Ce lien invité n’a pas de jeton.', expired: 'Ce lien invité est invalide ou expiré.', device_denied: 'Ce lien invité est invalide, expiré ou n’autorise pas cet appareil.', empty: 'Aucun appareil sur ce lien invité.', expires: 'Expire', back_to_list: 'Retour à la liste invitée', }, es: { title: 'Remoto de invitado', subtitle: 'Acceso temporal — solo los dispositivos compartidos', menu: 'Enlace de acceso de invitado', create_title: 'Crear enlace de acceso de invitado', create_hint: 'Enlace RdClient con tiempo limitado. El destinatario solo puede conectar a los dispositivos seleccionados — sin inicio de sesión en Console ni lista completa.', devices: 'Dispositivos', ttl: 'Válido durante (minutos)', label: 'Etiqueta (opcional)', view_only: 'Solo ver', url: 'URL para compartir', create: 'Crear enlace', created: 'Enlace de invitado creado', invalid_title: 'Enlace de invitado no válido', missing_token: 'A este enlace de invitado le falta el token.', expired: 'Este enlace de invitado no es válido o ha caducado.', device_denied: 'Este enlace no es válido, ha caducado o no permite este dispositivo.', empty: 'No hay dispositivos en este enlace.', expires: 'Caduca', back_to_list: 'Volver a la lista de invitado', }, it: { title: 'Remote ospite', subtitle: 'Accesso temporaneo — solo i dispositivi condivisi', menu: 'Link accesso ospite', create_title: 'Crea link accesso ospite', create_hint: 'Link RdClient a tempo limitato. Il destinatario può collegarsi solo ai dispositivi selezionati — senza login Console né elenco completo.', devices: 'Dispositivi', ttl: 'Valido per (minuti)', label: 'Etichetta (opzionale)', view_only: 'Solo visualizzazione', url: 'URL di condivisione', create: 'Crea link', created: 'Link ospite creato', invalid_title: 'Link ospite non valido', missing_token: 'A questo link ospite manca il token.', expired: 'Questo link ospite non è valido o è scaduto.', device_denied: 'Questo link non è valido, è scaduto o non consente questo dispositivo.', empty: 'Nessun dispositivo su questo link.', expires: 'Scade', back_to_list: "Torna all'elenco ospite", }, pt: { title: 'Remoto convidado', subtitle: 'Acesso temporário — apenas os dispositivos partilhados', menu: 'Ligação de acesso de convidado', create_title: 'Criar ligação de acesso de convidado', create_hint: 'Ligação RdClient com tempo limitado. O destinatário só pode ligar-se aos dispositivos selecionados — sem login na Console nem lista completa.', devices: 'Dispositivos', ttl: 'Válido por (minutos)', label: 'Etiqueta (opcional)', view_only: 'Apenas visualização', url: 'URL de partilha', create: 'Criar ligação', created: 'Ligação de convidado criada', invalid_title: 'Ligação de convidado inválida', missing_token: 'Esta ligação de convidado não tem token.', expired: 'Esta ligação de convidado é inválida ou expirou.', device_denied: 'Esta ligação é inválida, expirou ou não permite este dispositivo.', empty: 'Nenhum dispositivo nesta ligação.', expires: 'Expira', back_to_list: 'Voltar à lista de convidado', }, nl: { title: 'Gast-remote', subtitle: 'Tijdelijke toegang — alleen gedeelde apparaten', menu: 'Gasttoegangslink', create_title: 'Gasttoegangslink maken', create_hint: 'Tijdbegrensde RdClient-link. Ontvangers verbinden alleen met geselecteerde apparaten — geen Console-login, geen volledige lijst.', devices: 'Apparaten', ttl: 'Geldig voor (minuten)', label: 'Label (optioneel)', view_only: 'Alleen bekijken', url: 'Deel-URL', create: 'Link maken', created: 'Gastlink gemaakt', invalid_title: 'Ongeldige gastlink', missing_token: 'Deze gastlink mist een token.', expired: 'Deze gastlink is ongeldig of verlopen.', device_denied: 'Deze gastlink is ongeldig, verlopen of staat dit apparaat niet toe.', empty: 'Geen apparaten op deze gastlink.', expires: 'Verloopt', back_to_list: 'Terug naar gastenlijst', }, cs: { title: 'Hostitelský remote', subtitle: 'Dočasný přístup — pouze sdílená zařízení', menu: 'Odkaz pro hosta', create_title: 'Vytvořit odkaz pro hosta', create_hint: 'Časově omezený odkaz RdClient. Příjemce se připojí jen k vybraným zařízením — bez přihlášení do Console a bez úplného seznamu.', devices: 'Zařízení', ttl: 'Platnost (minuty)', label: 'Štítek (volitelně)', view_only: 'Jen prohlížení', url: 'URL ke sdílení', create: 'Vytvořit odkaz', created: 'Odkaz pro hosta vytvořen', invalid_title: 'Neplatný odkaz pro hosta', missing_token: 'Tomuto odkazu chybí token.', expired: 'Tento odkaz je neplatný nebo vypršel.', device_denied: 'Odkaz je neplatný, vypršel nebo nepovoluje toto zařízení.', empty: 'Na tomto odkazu nejsou žádná zařízení.', expires: 'Vyprší', back_to_list: 'Zpět na seznam hosta', }, ja: { title: 'ゲストリモート', subtitle: '一時アクセス — 共有された端末のみ', menu: 'ゲストアクセスリンク', create_title: 'ゲストアクセスリンクを作成', create_hint: '有効期限付きの RdClient リンク。受信者は選択した端末にのみ接続できます(Console ログインや全端末一覧はありません)。', devices: '端末', ttl: '有効時間(分)', label: 'ラベル(任意)', view_only: '表示のみ', url: '共有 URL', create: 'リンクを作成', created: 'ゲストリンクを作成しました', invalid_title: '無効なゲストリンク', missing_token: 'このゲストリンクにはトークンがありません。', expired: 'このゲストリンクは無効か期限切れです。', device_denied: 'このリンクは無効・期限切れ、またはこの端末を許可していません。', empty: 'このゲストリンクに端末がありません。', expires: '期限', back_to_list: 'ゲスト一覧に戻る', }, ko: { title: '게스트 원격', subtitle: '임시 접근 — 공유된 장치만', menu: '게스트 액세스 링크', create_title: '게스트 액세스 링크 만들기', create_hint: '시간 제한 RdClient 링크. 수신자는 선택한 장치에만 연결할 수 있습니다 — Console 로그인 및 전체 목록 없음.', devices: '장치', ttl: '유효 시간(분)', label: '라벨(선택)', view_only: '보기 전용', url: '공유 URL', create: '링크 만들기', created: '게스트 링크가 생성됨', invalid_title: '잘못된 게스트 링크', missing_token: '이 게스트 링크에 토큰이 없습니다.', expired: '이 게스트 링크가 잘못되었거나 만료되었습니다.', device_denied: '이 링크가 잘못되었거나 만료되었거나 이 장치를 허용하지 않습니다.', empty: '이 게스트 링크에 장치가 없습니다.', expires: '만료', back_to_list: '게스트 목록으로', }, zh: { title: '访客远程', subtitle: '临时访问 — 仅限共享的设备', menu: '访客访问链接', create_title: '创建访客访问链接', create_hint: '限时 RdClient 链接。接收者只能连接所选设备 — 无需 Console 登录,也无完整设备列表。', devices: '设备', ttl: '有效期(分钟)', label: '标签(可选)', view_only: '仅查看', url: '分享 URL', create: '创建链接', created: '已创建访客链接', invalid_title: '无效的访客链接', missing_token: '此访客链接缺少令牌。', expired: '此访客链接无效或已过期。', device_denied: '此链接无效、已过期或不允许此设备。', empty: '此访客链接上没有设备。', expires: '过期时间', back_to_list: '返回访客列表', }, 'zh-TW': { title: '訪客遠端', subtitle: '暫時存取 — 僅限共用的裝置', menu: '訪客存取連結', create_title: '建立訪客存取連結', create_hint: '限時 RdClient 連結。收件者只能連線到所選裝置 — 無需 Console 登入,也無完整裝置清單。', devices: '裝置', ttl: '有效時間(分鐘)', label: '標籤(選填)', view_only: '僅檢視', url: '分享 URL', create: '建立連結', created: '已建立訪客連結', invalid_title: '無效的訪客連結', missing_token: '此訪客連結缺少權杖。', expired: '此訪客連結無效或已過期。', device_denied: '此連結無效、已過期或不允許此裝置。', empty: '此訪客連結上沒有裝置。', expires: '到期', back_to_list: '返回訪客清單', }, uk: { title: 'Гостьовий Remote', subtitle: 'Тимчасовий доступ — лише спільні пристрої', menu: 'Посилання гостьового доступу', create_title: 'Створити посилання гостьового доступу', create_hint: 'Тимчасове посилання RdClient. Отримувач може підключатися лише до вибраних пристроїв — без входу в Console і без повного списку.', devices: 'Пристрої', ttl: 'Дійсне (хвилини)', label: 'Мітка (необов’язково)', view_only: 'Лише перегляд', url: 'URL для спільного доступу', create: 'Створити посилання', created: 'Гостьове посилання створено', invalid_title: 'Недійсне гостьове посилання', missing_token: 'У цьому гостьовому посиланні немає токена.', expired: 'Це гостьове посилання недійсне або прострочене.', device_denied: 'Посилання недійсне, прострочене або не дозволяє цей пристрій.', empty: 'На цьому посиланні немає пристроїв.', expires: 'Закінчується', back_to_list: 'Назад до списку гостя', }, tr: { title: 'Misafir Remote', subtitle: 'Geçici erişim — yalnızca paylaşılan cihazlar', menu: 'Misafir erişim bağlantısı', create_title: 'Misafir erişim bağlantısı oluştur', create_hint: 'Süreli RdClient bağlantısı. Alıcı yalnızca seçilen cihazlara bağlanabilir — Console girişi ve tam liste yok.', devices: 'Cihazlar', ttl: 'Geçerlilik (dakika)', label: 'Etiket (isteğe bağlı)', view_only: 'Yalnızca görüntüleme', url: 'Paylaşım URL’si', create: 'Bağlantı oluştur', created: 'Misafir bağlantısı oluşturuldu', invalid_title: 'Geçersiz misafir bağlantısı', missing_token: 'Bu misafir bağlantısında jeton yok.', expired: 'Bu misafir bağlantısı geçersiz veya süresi dolmuş.', device_denied: 'Bu bağlantı geçersiz, süresi dolmuş veya bu cihaza izin vermiyor.', empty: 'Bu misafir bağlantısında cihaz yok.', expires: 'Bitiş', back_to_list: 'Misafir listesine dön', }, vi: { title: 'Remote khách', subtitle: 'Truy cập tạm thời — chỉ thiết bị được chia sẻ', menu: 'Liên kết truy cập khách', create_title: 'Tạo liên kết truy cập khách', create_hint: 'Liên kết RdClient có thời hạn. Người nhận chỉ kết nối được các thiết bị đã chọn — không đăng nhập Console, không danh sách đầy đủ.', devices: 'Thiết bị', ttl: 'Có hiệu lực (phút)', label: 'Nhãn (tuỳ chọn)', view_only: 'Chỉ xem', url: 'URL chia sẻ', create: 'Tạo liên kết', created: 'Đã tạo liên kết khách', invalid_title: 'Liên kết khách không hợp lệ', missing_token: 'Liên kết khách thiếu token.', expired: 'Liên kết khách không hợp lệ hoặc đã hết hạn.', device_denied: 'Liên kết không hợp lệ, hết hạn hoặc không cho phép thiết bị này.', empty: 'Không có thiết bị trên liên kết này.', expires: 'Hết hạn', back_to_list: 'Quay lại danh sách khách', }, th: { title: 'รีโมตผู้เยี่ยมชม', subtitle: 'การเข้าถึงชั่วคราว — เฉพาะอุปกรณ์ที่แชร์', menu: 'ลิงก์เข้าถึงผู้เยี่ยมชม', create_title: 'สร้างลิงก์เข้าถึงผู้เยี่ยมชม', create_hint: 'ลิงก์ RdClient แบบจำกัดเวลา ผู้รับเชื่อมต่อได้เฉพาะอุปกรณ์ที่เลือก — ไม่ต้องเข้าสู่ระบบ Console และไม่มีรายการทั้งหมด', devices: 'อุปกรณ์', ttl: 'มีผล (นาที)', label: 'ป้ายชื่อ (ไม่บังคับ)', view_only: 'ดูอย่างเดียว', url: 'URL สำหรับแชร์', create: 'สร้างลิงก์', created: 'สร้างลิงก์ผู้เยี่ยมชมแล้ว', invalid_title: 'ลิงก์ผู้เยี่ยมชมไม่ถูกต้อง', missing_token: 'ลิงก์นี้ไม่มีโทเค็น', expired: 'ลิงก์นี้ไม่ถูกต้องหรือหมดอายุ', device_denied: 'ลิงก์ไม่ถูกต้อง หมดอายุ หรือไม่อนุญาตอุปกรณ์นี้', empty: 'ไม่มีอุปกรณ์ในลิงก์นี้', expires: 'หมดอายุ', back_to_list: 'กลับไปรายการผู้เยี่ยมชม', }, hi: { title: 'गेस्ट रिमोट', subtitle: 'अस्थायी पहुँच — केवल साझा डिवाइस', menu: 'गेस्ट एक्सेस लिंक', create_title: 'गेस्ट एक्सेस लिंक बनाएँ', create_hint: 'समय-सीमित RdClient लिंक। प्राप्तकर्ता केवल चयनित डिवाइस से कनेक्ट कर सकते हैं — Console लॉगिन या पूरी सूची नहीं।', devices: 'डिवाइस', ttl: 'वैधता (मिनट)', label: 'लेबल (वैकल्पिक)', view_only: 'केवल देखें', url: 'शेयर URL', create: 'लिंक बनाएँ', created: 'गेस्ट लिंक बनाया गया', invalid_title: 'अमान्य गेस्ट लिंक', missing_token: 'इस गेस्ट लिंक में टोकन नहीं है।', expired: 'यह गेस्ट लिंक अमान्य या समाप्त है।', device_denied: 'यह लिंक अमान्य/समाप्त है या इस डिवाइस की अनुमति नहीं देता।', empty: 'इस गेस्ट लिंक पर कोई डिवाइस नहीं।', expires: 'समाप्ति', back_to_list: 'गेस्ट सूची पर वापस', }, id: { title: 'Remote tamu', subtitle: 'Akses sementara — hanya perangkat yang dibagikan', menu: 'Tautan akses tamu', create_title: 'Buat tautan akses tamu', create_hint: 'Tautan RdClient berbatas waktu. Penerima hanya dapat terhubung ke perangkat yang dipilih — tanpa login Console atau daftar lengkap.', devices: 'Perangkat', ttl: 'Berlaku (menit)', label: 'Label (opsional)', view_only: 'Hanya lihat', url: 'URL berbagi', create: 'Buat tautan', created: 'Tautan tamu dibuat', invalid_title: 'Tautan tamu tidak valid', missing_token: 'Tautan tamu ini tidak memiliki token.', expired: 'Tautan tamu ini tidak valid atau kedaluwarsa.', device_denied: 'Tautan tidak valid, kedaluwarsa, atau tidak mengizinkan perangkat ini.', empty: 'Tidak ada perangkat pada tautan ini.', expires: 'Kedaluwarsa', back_to_list: 'Kembali ke daftar tamu', }, ro: { title: 'Remote oaspete', subtitle: 'Acces temporar — doar dispozitivele partajate', menu: 'Link acces oaspete', create_title: 'Creează link acces oaspete', create_hint: 'Link RdClient cu durată limitată. Destinatarul se poate conecta doar la dispozitivele selectate — fără login Console și fără lista completă.', devices: 'Dispozitive', ttl: 'Valabil (minute)', label: 'Etichetă (opțional)', view_only: 'Doar vizualizare', url: 'URL de partajare', create: 'Creează link', created: 'Link oaspete creat', invalid_title: 'Link oaspete invalid', missing_token: 'Acestui link oaspete îi lipsește tokenul.', expired: 'Acest link oaspete este invalid sau a expirat.', device_denied: 'Linkul este invalid, a expirat sau nu permite acest dispozitiv.', empty: 'Niciun dispozitiv pe acest link.', expires: 'Expiră', back_to_list: 'Înapoi la lista oaspete', }, hu: { title: 'Vendég remote', subtitle: 'Ideiglenes hozzáférés — csak a megosztott eszközök', menu: 'Vendég hozzáférési link', create_title: 'Vendég hozzáférési link létrehozása', create_hint: 'Időkorlátos RdClient link. A címzett csak a kiválasztott eszközökhöz csatlakozhat — Console bejelentkezés és teljes lista nélkül.', devices: 'Eszközök', ttl: 'Érvényesség (perc)', label: 'Címke (opcionális)', view_only: 'Csak megtekintés', url: 'Megosztási URL', create: 'Link létrehozása', created: 'Vendéglink létrehozva', invalid_title: 'Érvénytelen vendéglink', missing_token: 'Ehhez a vendéglinkhez hiányzik a token.', expired: 'Ez a vendéglink érvénytelen vagy lejárt.', device_denied: 'A link érvénytelen, lejárt, vagy nem engedi ezt az eszközt.', empty: 'Nincs eszköz ezen a vendéglinken.', expires: 'Lejár', back_to_list: 'Vissza a vendéglistához', }, fi: { title: 'Vieras-remote', subtitle: 'Tilapäinen pääsy — vain jaetut laitteet', menu: 'Vieraspääsylinkki', create_title: 'Luo vieraspääsylinkki', create_hint: 'Aikarajoitettu RdClient-linkki. Vastaanottaja voi yhdistää vain valittuihin laitteisiin — ei Console-kirjautumista eikä täyttä listaa.', devices: 'Laitteet', ttl: 'Voimassa (minuuttia)', label: 'Nimike (valinnainen)', view_only: 'Vain katselu', url: 'Jakamis-URL', create: 'Luo linkki', created: 'Vieraslinkki luotu', invalid_title: 'Virheellinen vieraslinkki', missing_token: 'Tästä vieraslinkistä puuttuu token.', expired: 'Tämä vieraslinkki on virheellinen tai vanhentunut.', device_denied: 'Linkki on virheellinen, vanhentunut tai ei salli tätä laitetta.', empty: 'Tällä vieraslinkillä ei ole laitteita.', expires: 'Vanhenee', back_to_list: 'Takaisin vieraslistaan', }, sv: { title: 'Gästremote', subtitle: 'Tillfällig åtkomst — endast delade enheter', menu: 'Gäståtkomstlänk', create_title: 'Skapa gäståtkomstlänk', create_hint: 'Tidsbegränsad RdClient-länk. Mottagaren kan bara ansluta till valda enheter — ingen Console-inloggning och ingen full lista.', devices: 'Enheter', ttl: 'Giltig i (minuter)', label: 'Etikett (valfritt)', view_only: 'Endast visa', url: 'Delnings-URL', create: 'Skapa länk', created: 'Gästlänk skapad', invalid_title: 'Ogiltig gästlänk', missing_token: 'Denna gästlänk saknar token.', expired: 'Denna gästlänk är ogiltig eller har gått ut.', device_denied: 'Länken är ogiltig, har gått ut eller tillåter inte denna enhet.', empty: 'Inga enheter på denna gästlänk.', expires: 'Går ut', back_to_list: 'Tillbaka till gästlistan', }, da: { title: 'Gæste-remote', subtitle: 'Midlertidig adgang — kun delte enheder', menu: 'Gæsteadgangslink', create_title: 'Opret gæsteadgangslink', create_hint: 'Tidsbegrænset RdClient-link. Modtageren kan kun oprette forbindelse til valgte enheder — ingen Console-login og ingen fuld liste.', devices: 'Enheder', ttl: 'Gyldig i (minutter)', label: 'Etiket (valgfrit)', view_only: 'Kun visning', url: 'Delings-URL', create: 'Opret link', created: 'Gæstelink oprettet', invalid_title: 'Ugyldigt gæstelink', missing_token: 'Dette gæstelink mangler et token.', expired: 'Dette gæstelink er ugyldigt eller udløbet.', device_denied: 'Linket er ugyldigt, udløbet eller tillader ikke denne enhed.', empty: 'Ingen enheder på dette gæstelink.', expires: 'Udløber', back_to_list: 'Tilbage til gæstelisten', }, nb: { title: 'Gjest-remote', subtitle: 'Midlertidig tilgang — kun delte enheter', menu: 'Gjestetilgangslenke', create_title: 'Opprett gjestetilgangslenke', create_hint: 'Tidsbegrenset RdClient-lenke. Mottakeren kan bare koble til valgte enheter — ingen Console-pålogging og ingen full liste.', devices: 'Enheter', ttl: 'Gyldig i (minutter)', label: 'Etikett (valgfritt)', view_only: 'Kun visning', url: 'Delings-URL', create: 'Opprett lenke', created: 'Gjestelenke opprettet', invalid_title: 'Ugyldig gjestelenke', missing_token: 'Denne gjestelenken mangler token.', expired: 'Denne gjestelenken er ugyldig eller utløpt.', device_denied: 'Lenken er ugyldig, utløpt eller tillater ikke denne enheten.', empty: 'Ingen enheter på denne gjestelenken.', expires: 'Utløper', back_to_list: 'Tilbake til gjestelisten', }, ar: { title: 'التحكم عن بُعد للضيف', subtitle: 'وصول مؤقت — الأجهزة المشتركة فقط', menu: 'رابط وصول الضيف', create_title: 'إنشاء رابط وصول الضيف', create_hint: 'رابط RdClient محدود زمنياً. يمكن للمستلم الاتصال بالأجهزة المحددة فقط — بدون تسجيل دخول Console أو قائمة كاملة.', devices: 'الأجهزة', ttl: 'صالح لمدة (دقائق)', label: 'تسمية (اختياري)', view_only: 'عرض فقط', url: 'رابط المشاركة', create: 'إنشاء الرابط', created: 'تم إنشاء رابط الضيف', invalid_title: 'رابط ضيف غير صالح', missing_token: 'رابط الضيف هذا يفتقد الرمز.', expired: 'رابط الضيف هذا غير صالح أو منتهٍ.', device_denied: 'الرابط غير صالح أو منتهٍ أو لا يسمح بهذا الجهاز.', empty: 'لا توجد أجهزة على رابط الضيف هذا.', expires: 'ينتهي', back_to_list: 'العودة إلى قائمة الضيف', }, }; for (const file of fs.readdirSync(dir).filter((f) => f.endsWith('.json'))) { if (file === 'en.json') continue; const code = file.replace(/\.json$/, ''); const p = path.join(dir, file); const data = JSON.parse(fs.readFileSync(p, 'utf8')); data.guest_access = Object.assign({}, en, T[code] || {}); // ensure every en key present for (const k of Object.keys(en)) { if (!data.guest_access[k]) data.guest_access[k] = en[k]; } fs.writeFileSync(p, JSON.stringify(data, null, 4) + '\n'); console.log('updated', file); }