Files
BetterDesk/web-nodejs/scripts/patch-guest-access-i18n.js
T
UNITRONIX fc1ded710e feat(remote): add Guest Access Links for RdClient allowlist shares (Refs #274)
Temporary opaque links give guests a minimal Web Remote UI for selected devices only, without Console inventory or add-any-ID paths. Also fix mesh_share desktop tunnel auth for unauthenticated guests.
2026-07-18 12:27:46 +02:00

552 lines
28 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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 quaux 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é na pas de jeton.',
expired: 'Ce lien invité est invalide ou expiré.',
device_denied: 'Ce lien invité est invalide, expiré ou nautorise 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 URLsi',
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);
}