From 516cc0f481acfb5d237f2bc392229104b3a1ad9d Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Mon, 28 Sep 2026 12:30:15 -0400 Subject: [PATCH 1/8] chore: green and red playcast edge relay status --- components/settings/PlaycastEdgeRelay.vue | 25 +++++++++++++------ i18n/locales/ar_SA.json | 1 - i18n/locales/da_DK.json | 1 - i18n/locales/de_DE.json | 1 - i18n/locales/en.json | 1 - i18n/locales/es_ES.json | 1 - i18n/locales/fr_FR.json | 1 - i18n/locales/it_IT.json | 1 - i18n/locales/ja_JP.json | 1 - i18n/locales/ko_KR.json | 1 - i18n/locales/pl_PL.json | 1 - i18n/locales/pt_BR.json | 1 - i18n/locales/ru_RU.json | 1 - i18n/locales/sv_SE.json | 1 - i18n/locales/tr_TR.json | 1 - i18n/locales/uk_UA.json | 1 - i18n/locales/zh_Hans.json | 1 - i18n/locales/zh_Hant.json | 1 - .../settings/PlaycastEdgeRelay.spec.ts | 5 ++++ 19 files changed, 22 insertions(+), 25 deletions(-) diff --git a/components/settings/PlaycastEdgeRelay.vue b/components/settings/PlaycastEdgeRelay.vue index 233db2f5..3397732c 100644 --- a/components/settings/PlaycastEdgeRelay.vue +++ b/components/settings/PlaycastEdgeRelay.vue @@ -1,6 +1,6 @@ + + diff --git a/components/settings/EdgeStatusPanel.vue b/components/settings/EdgeStatusPanel.vue new file mode 100644 index 00000000..cb1ffdd2 --- /dev/null +++ b/components/settings/EdgeStatusPanel.vue @@ -0,0 +1,176 @@ + + + diff --git a/components/settings/PlaycastEdgeRelay.vue b/components/settings/PlaycastEdgeRelay.vue index 3397732c..1b51fa44 100644 --- a/components/settings/PlaycastEdgeRelay.vue +++ b/components/settings/PlaycastEdgeRelay.vue @@ -1,41 +1,62 @@ diff --git a/components/settings/StorageCheck.vue b/components/settings/StorageCheck.vue new file mode 100644 index 00000000..48f84274 --- /dev/null +++ b/components/settings/StorageCheck.vue @@ -0,0 +1,317 @@ + + + diff --git a/i18n/locales/ar_SA.json b/i18n/locales/ar_SA.json index f7063225..30b50495 100644 --- a/i18n/locales/ar_SA.json +++ b/i18n/locales/ar_SA.json @@ -1991,14 +1991,10 @@ "playcast_description": "فعّل Playcast بدلًا من استخدام منافذ TV مباشرة. ", "playcast_learn_more": "اعرف المزيد", "relay_title": "مرحّل الحافة (Cloudflare)", - "relay_description": "قدّم البث لمشاهدي Playcast من حافة شبكة Cloudflare. مع worker مرحّل Playcast من 5stack على نطاق المرحّل لديك، تواصل خوادم اللعب إرسال بثها مباشرة إلى هذا الخادم، ويُخدم المشاهدون من ذاكرة Cloudflare المؤقتة.", - "relay_checking": "جارٍ فحص {domain}", - "relay_active": "نشط: يُخدم مشاهدو Playcast على {domain} من حافة شبكة Cloudflare", - "relay_inactive": "غير نشط: يخدم هذا الخادم مشاهدي Playcast على {domain}", - "relay_check_again": "افحص مجدداً", - "relay_setup_proxied": "يجب أن يمر {domain} عبر وكيل Cloudflare (السحابة البرتقالية).", - "relay_setup_deploy": "من نسخة 5stack-panel لديك، انشره على نطاق المرحّل:", - "relay_setup_guide": "دليل الإعداد", + "relay_description": "اختياري. عامل Cloudflare على نطاق الترحيل يقدّم Playcast للمشاهدين من ذاكرة Cloudflare المؤقتة، بينما تواصل خوادم اللعب إرسال البث مباشرة إلى هذا الخادم.", + "relay_checking": "جارٍ البحث عن عامل ترحيل الحافة.", + "relay_active": "يحصل مشاهدو Playcast على البث من ذاكرة Cloudflare المؤقتة.", + "relay_inactive": "يحصل مشاهدو Playcast على البث من هذا الخادم. يوضح دليل الإعداد كيفية وضع Cloudflare أمامه.", "encoding_section": "الترميز", "live_video_codec": "ترميز البث المباشر", "live_video_codec_description": "H.264 هو الخيار الافتراضي لأوسع توافق مع المتصفحات والأجهزة، بما في ذلك مسار WebRTC الأقل تأخيرًا في كل المتصفحات. أما H.265 (HEVC) فيقلّل الحجم بنحو 30% عند الجودة نفسها، لكن HEVC عبر WebRTC مدعوم في Safari 17+ فقط — ومشاهدو Chrome وFirefox يرجعون إلى مسار HLS. ويرجع H.265 إلى H.264 تلقائيًا إذا كان GPU لا يدعم NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "أقصى تخزين", "unit_days": "(أيام)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "التوصيل عبر Cloudflare", + "cloudflare_worker_description": "اختياري. عامل Cloudflare أمام حاوية Backblaze يقدّم العروض والمقاطع والوسائط من ذاكرة Cloudflare المؤقتة، فلا تُحتسب التنزيلات ضمن حركة البيانات الصادرة من الحاوية.", + "cloudflare_worker_not_set": "تُقدَّم الملفات مباشرة من الحاوية.", + "cloudflare_worker_checking": "جارٍ سؤال العامل عمّا إذا كان يستطيع قراءة الحاوية.", + "cloudflare_worker_online": "تُقدَّم العروض والمقاطع والوسائط عبر Cloudflare.", + "cloudflare_worker_unreachable": "العامل لا يستجيب.", + "cloudflare_worker_outdated": "نُشر هذا العامل قبل إضافة فحوص الحالة، لذا لا يمكن التحقق من مفاتيحه. أعد تشغيل الإعداد لتحديثه.", + "cloudflare_worker_keys_rejected": "يرفض Backblaze مفاتيح العامل، لذا تفشل الملفات غير المخزّنة مؤقتًا في التحميل. أعد تشغيل الإعداد بالمفاتيح التي تستخدمها اللوحة.", + "cloudflare_worker_misconfigured": "إعدادات الحاوية مفقودة في العامل. أعد تشغيل الإعداد.", + "cloudflare_worker_bucket_unreachable": "لا يستطيع العامل الوصول إلى الحاوية.", + "cloudflare_worker_row_bucket": "الحاوية", + "cloudflare_worker_bucket_ok": "قبل Backblaze المفاتيح", + "cloudflare_worker_bucket_rejected": "المفاتيح مرفوضة ({code})", + "storage_check_section": "فحص التخزين", + "storage_check_description": "يكتب ملفًا تجريبيًا في الحاوية ثم يقرؤه في هذا المتصفح، كما تعمل التنزيلات.", + "storage_check_run": "تشغيل الفحص", + "storage_check_rerun": "تشغيل مجددًا", + "storage_check_not_run": "لم يُشغَّل بعد", + "storage_check_last_run": "آخر تشغيل {time}", + "storage_check_write": "كتابة", + "storage_check_write_path": "اللوحة ← الحاوية", + "storage_check_read": "قراءة", + "storage_check_read_path": "المتصفح ← الحاوية", + "storage_check_edge": "الحافة", + "storage_check_edge_path": "عبر {domain}", + "storage_check_idle": "بانتظار التشغيل", + "storage_check_running": "قيد التشغيل", + "storage_check_skipped": "تم التخطي", + "storage_check_ms": "{ms} مللي ثانية", + "storage_check_unexpected": "عاد الملف مختلفًا عمّا كُتب.", + "storage_check_read_blocked": "لا يستطيع هذا المتصفح قراءة الحاوية مباشرة (الحاوية لا تسمح لهذا الموقع).", + "storage_check_open_file": "فتح الملف التجريبي", "retention_storage_description": "يُحتفظ بملفات Demo لأقل مدة احتفاظ على الأقل. وعند تجاوز التخزين الكلي للحد الأقصى، تُحذف أقدم الملفات التي انتهت مدة احتفاظها أولًا.", - "cloudflare_worker_url_description": "يقدّم العروض والمقاطع والوسائط من حاوية Backblaze عبر Cloudflare، فلا تُحتسب التنزيلات ضمن حركة البيانات الصادرة من الحاوية. لإعداده أو تغييره، شغّل هذا الأمر من مجلد 5stack-panel:", - "cloudflare_worker_url_not_set": "غير مُعدّ. تُقدَّم الملفات مباشرة من الحاوية.", - "test_s3_description": "اختبر اتصال S3 وارفع ملفًا إلى bucket ملفات Demo.", - "test_upload": "اختبر الرفع", - "test_upload_success": "نجح اختبار الرفع", - "test_upload_failed": "تعذّر اختبار الرفع", - "test_download": "اختبر التنزيل", - "test_download_failed": "تعذّر اختبار التنزيل", "demo_network_limiter": "حد نطاق الشبكة العام لملفات Demo", "demo_network_limiter_description": "يحدّ من نطاق الرفع الذي تستخدمه عقدة السيرفرات عند نقل ملفات Demo المكتملة إلى S3.", "updated_s3_settings": "تم تحديث إعدادات S3", @@ -9938,5 +9957,15 @@ "open_plugin": "افتح صفحة هذه الإضافة في تبويب جديد", "archived_instead": "جرت مباريات بهذا النمط من قبل، لذا أُخفي بدلاً من حذفه. يمكنك استعادته في أي وقت." } + }, + "edge_status": { + "online": "متصل", + "attention": "يحتاج إلى انتباه", + "offline": "غير متصل", + "checking": "جارٍ التحقق", + "idle": "غير مُعدّ", + "checked_at": "آخر فحص {time}", + "check_again": "تحقّق مجددًا", + "setup_guide": "دليل الإعداد" } } diff --git a/i18n/locales/da_DK.json b/i18n/locales/da_DK.json index 3bea2b80..aa4e9b00 100644 --- a/i18n/locales/da_DK.json +++ b/i18n/locales/da_DK.json @@ -1991,14 +1991,10 @@ "playcast_description": "Brug Playcast i stedet for TV-porte direkte. ", "playcast_learn_more": "Læs mere", "relay_title": "Edge-relay (Cloudflare)", - "relay_description": "Server Playcast-seere fra Cloudflares edge. Med 5stack-playcast-relay-workeren på dit relay-domæne sender spilservere stadig deres udsendelse direkte til denne server, og seerne betjenes fra Cloudflares cache.", - "relay_checking": "Tjekker {domain}", - "relay_active": "Aktiv: Playcast-seere på {domain} betjenes fra Cloudflares edge", - "relay_inactive": "Ikke aktiv: Playcast-seere på {domain} betjenes af denne server", - "relay_check_again": "Tjek igen", - "relay_setup_proxied": "{domain} skal gå gennem Cloudflares proxy (orange sky).", - "relay_setup_deploy": "Udrul den på relay-domænet fra din kopi af 5stack-panel:", - "relay_setup_guide": "Opsætningsguide", + "relay_description": "Valgfrit. En Cloudflare Worker på dit relay-domæne leverer Playcast til seerne fra Cloudflares cache, mens spilserverne fortsat sender deres udsendelse direkte til denne server.", + "relay_checking": "Leder efter edge relay-workeren.", + "relay_active": "Playcast-seere får udsendelsen fra Cloudflares cache.", + "relay_inactive": "Playcast-seere får udsendelsen fra denne server. Opsætningsguiden viser, hvordan du sætter Cloudflare foran.", "encoding_section": "Encoding", "live_video_codec": "Codec til livestream", "live_video_codec_description": "H.264 er standard og giver bredest mulig understøttelse i browsere og på enheder, inklusive den WebRTC-sti med lavest latency i alle browsere. H.265 (HEVC) fylder ca. 30 % mindre ved samme kvalitet, men HEVC over WebRTC virker kun i Safari 17+ — seere i Chrome og Firefox falder tilbage til HLS. H.265 falder automatisk tilbage til H.264, hvis GPU'en mangler NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Maksimal lagring", "unit_days": "(dage)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker-URL", + "cloudflare_worker_section": "Levering via Cloudflare", + "cloudflare_worker_description": "Valgfrit. En Cloudflare Worker foran din Backblaze-bucket leverer demoer, klip og medier fra Cloudflares cache, så downloads ikke tæller med i bucketens udgående trafik.", + "cloudflare_worker_not_set": "Filer leveres direkte fra din bucket.", + "cloudflare_worker_checking": "Spørger workeren, om den kan læse din bucket.", + "cloudflare_worker_online": "Demoer, klip og medier leveres gennem Cloudflare.", + "cloudflare_worker_unreachable": "Workeren svarer ikke.", + "cloudflare_worker_outdated": "Denne worker blev udrullet før statustjek, så dens nøgler kan ikke bekræftes. Kør opsætningen igen for at opdatere den.", + "cloudflare_worker_keys_rejected": "Backblaze afviser workerens nøgler, så filer, der ikke er cachet endnu, kan ikke indlæses. Kør opsætningen igen med de nøgler, panelet bruger.", + "cloudflare_worker_misconfigured": "Workeren mangler sine bucket-indstillinger. Kør opsætningen igen.", + "cloudflare_worker_bucket_unreachable": "Workeren kan ikke nå din bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Nøgler godkendt af Backblaze", + "cloudflare_worker_bucket_rejected": "Nøgler afvist ({code})", + "storage_check_section": "Lagertjek", + "storage_check_description": "Skriver en testfil til din bucket og læser den derefter tilbage i denne browser, sådan som downloads virker.", + "storage_check_run": "Kør tjek", + "storage_check_rerun": "Kør igen", + "storage_check_not_run": "Ikke kørt endnu", + "storage_check_last_run": "Sidst kørt {time}", + "storage_check_write": "Skriv", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Læs", + "storage_check_read_path": "Browser → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Gennem {domain}", + "storage_check_idle": "Venter", + "storage_check_running": "Kører", + "storage_check_skipped": "Sprunget over", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Filen kom tilbage anderledes end det, der blev skrevet.", + "storage_check_read_blocked": "Denne browser kan ikke læse bucketen direkte (bucketen tillader ikke dette site).", + "storage_check_open_file": "Åbn testfilen", "retention_storage_description": "Demoer gemmes mindst i den angivne minimumsperiode. Når den samlede lagring overskrider maksimum, slettes de ældste demoer, der er ude over deres opbevaringsperiode, først.", - "cloudflare_worker_url_description": "Leverer demoer, klip og medier fra din Backblaze-bucket gennem Cloudflare, så downloads ikke tæller med i din buckets udgående trafik. Kør dette fra din 5stack-panel-mappe for at sætte det op eller ændre det:", - "cloudflare_worker_url_not_set": "Ikke sat op. Filer leveres direkte fra din bucket.", - "test_s3_description": "Test S3-forbindelsen og upload en fil til demo-bucketen.", - "test_upload": "Test upload", - "test_upload_success": "Testupload lykkedes", - "test_upload_failed": "Testupload mislykkedes", - "test_download": "Test download", - "test_download_failed": "Testdownload mislykkedes", "demo_network_limiter": "Global netværksgrænse for demoer", "demo_network_limiter_description": "Begrænser den upload-båndbredde, en game server node bruger, når færdige demofiler overføres til S3.", "updated_s3_settings": "S3-indstillinger opdateret", @@ -9938,5 +9957,15 @@ "open_plugin": "Åbn dette plugins side i en ny fane", "archived_instead": "Der er allerede spillet kampe i denne tilstand, så den blev skjult i stedet for slettet. Du kan gendanne den når som helst." } + }, + "edge_status": { + "online": "Online", + "attention": "Kræver opmærksomhed", + "offline": "Offline", + "checking": "Tjekker", + "idle": "Ikke sat op", + "checked_at": "Tjekket {time}", + "check_again": "Tjek igen", + "setup_guide": "Opsætningsguide" } } diff --git a/i18n/locales/de_DE.json b/i18n/locales/de_DE.json index b26640ae..e47c065f 100644 --- a/i18n/locales/de_DE.json +++ b/i18n/locales/de_DE.json @@ -1991,14 +1991,10 @@ "playcast_description": "Playcast statt direkter TV-Ports verwenden. ", "playcast_learn_more": "Mehr erfahren", "relay_title": "Edge-Relay (Cloudflare)", - "relay_description": "Playcast-Zuschauer über das Edge-Netz von Cloudflare bedienen. Mit dem 5stack-Playcast-Relay-Worker auf deiner Relay-Domain senden Gameserver ihre Übertragung weiterhin direkt an diesen Server, und Zuschauer werden aus dem Cache von Cloudflare bedient.", - "relay_checking": "Prüfe {domain}", - "relay_active": "Aktiv: Playcast-Zuschauer auf {domain} werden über das Edge-Netz von Cloudflare bedient", - "relay_inactive": "Nicht aktiv: Playcast-Zuschauer auf {domain} werden von diesem Server bedient", - "relay_check_again": "Erneut prüfen", - "relay_setup_proxied": "{domain} muss über Cloudflare geleitet werden (orangene Wolke).", - "relay_setup_deploy": "Stelle ihn aus deinem 5stack-panel-Checkout auf der Relay-Domain bereit:", - "relay_setup_guide": "Einrichtungsanleitung", + "relay_description": "Optional. Ein Cloudflare Worker auf deiner Relay-Domain beliefert Playcast-Zuschauer aus dem Cloudflare-Cache, während die Spielserver ihre Übertragung weiterhin direkt an diesen Server senden.", + "relay_checking": "Suche nach dem Edge-Relay-Worker.", + "relay_active": "Playcast-Zuschauer werden aus dem Cloudflare-Cache beliefert.", + "relay_inactive": "Playcast-Zuschauer werden von diesem Server beliefert. Die Einrichtungsanleitung zeigt, wie du Cloudflare davorschaltest.", "encoding_section": "Encoding", "live_video_codec": "Codec für Live-Streams", "live_video_codec_description": "H.264 ist der Standard für die breiteste Browser- und Geräte-Kompatibilität, inklusive des WebRTC-Pfads mit der geringsten Latenz in jedem Browser. H.265 (HEVC) ist bei gleicher Qualität rund 30 % kleiner, aber HEVC über WebRTC läuft nur ab Safari 17 — Zuschauer in Chrome und Firefox fallen auf den HLS-Pfad zurück. H.265 fällt automatisch auf H.264 zurück, wenn die GPU kein NVENC HEVC unterstützt.", @@ -2302,16 +2298,39 @@ "max_storage": "Maximaler Speicher", "unit_days": "(Tage)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Auslieferung über Cloudflare", + "cloudflare_worker_description": "Optional. Ein Cloudflare Worker vor deinem Backblaze-Bucket liefert Demos, Clips und Medien aus dem Cloudflare-Cache aus, sodass Downloads nicht auf den ausgehenden Traffic des Buckets angerechnet werden.", + "cloudflare_worker_not_set": "Dateien werden direkt aus deinem Bucket ausgeliefert.", + "cloudflare_worker_checking": "Frage den Worker, ob er deinen Bucket lesen kann.", + "cloudflare_worker_online": "Demos, Clips und Medien werden über Cloudflare ausgeliefert.", + "cloudflare_worker_unreachable": "Der Worker antwortet nicht.", + "cloudflare_worker_outdated": "Dieser Worker wurde vor den Statusprüfungen bereitgestellt, daher lassen sich seine Schlüssel nicht prüfen. Führe die Einrichtung erneut aus, um ihn zu aktualisieren.", + "cloudflare_worker_keys_rejected": "Backblaze lehnt die Schlüssel des Workers ab, daher lassen sich noch nicht gecachte Dateien nicht laden. Führe die Einrichtung erneut mit den Schlüsseln aus, die das Panel verwendet.", + "cloudflare_worker_misconfigured": "Dem Worker fehlen seine Bucket-Einstellungen. Führe die Einrichtung erneut aus.", + "cloudflare_worker_bucket_unreachable": "Der Worker erreicht deinen Bucket nicht.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Schlüssel von Backblaze akzeptiert", + "cloudflare_worker_bucket_rejected": "Schlüssel abgelehnt ({code})", + "storage_check_section": "Speicherprüfung", + "storage_check_description": "Schreibt eine Testdatei in deinen Bucket und liest sie dann in diesem Browser zurück, so wie Downloads funktionieren.", + "storage_check_run": "Prüfung starten", + "storage_check_rerun": "Erneut ausführen", + "storage_check_not_run": "Noch nicht ausgeführt", + "storage_check_last_run": "Zuletzt ausgeführt {time}", + "storage_check_write": "Schreiben", + "storage_check_write_path": "Panel → Bucket", + "storage_check_read": "Lesen", + "storage_check_read_path": "Browser → Bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Über {domain}", + "storage_check_idle": "Wartet", + "storage_check_running": "Läuft", + "storage_check_skipped": "Übersprungen", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Die Datei kam anders zurück, als sie geschrieben wurde.", + "storage_check_read_blocked": "Dieser Browser kann den Bucket nicht direkt lesen (der Bucket erlaubt diese Seite nicht).", + "storage_check_open_file": "Testdatei öffnen", "retention_storage_description": "Demos werden mindestens für den Aufbewahrungszeitraum behalten. Sobald der Gesamtspeicher das Maximum überschreitet, werden die ältesten Demos nach Ablauf ihrer Aufbewahrung zuerst gelöscht.", - "cloudflare_worker_url_description": "Liefert Demos, Clips und Medien aus deinem Backblaze-Bucket über Cloudflare aus, sodass Downloads nicht auf den ausgehenden Traffic deines Buckets angerechnet werden. Zum Einrichten oder Ändern führe dies in deinem 5stack-panel-Verzeichnis aus:", - "cloudflare_worker_url_not_set": "Nicht eingerichtet. Dateien werden direkt aus deinem Bucket ausgeliefert.", - "test_s3_description": "Teste die S3-Verbindung und lade eine Datei in den Demo-Bucket hoch.", - "test_upload": "Upload testen", - "test_upload_success": "Test-Upload erfolgreich", - "test_upload_failed": "Test-Upload fehlgeschlagen", - "test_download": "Download testen", - "test_download_failed": "Test-Download fehlgeschlagen", "demo_network_limiter": "Globales Demo-Netzwerklimit", "demo_network_limiter_description": "Begrenzt die Upload-Bandbreite, die ein Game-Server-Node beim Übertragen fertiger Demo-Dateien zu S3 nutzt.", "updated_s3_settings": "S3-Einstellungen aktualisiert", @@ -9938,5 +9957,15 @@ "open_plugin": "Die Seite dieses Plugins in einem neuen Tab öffnen", "archived_instead": "Dieser Modus wurde bereits in Matches gespielt, deshalb wurde er ausgeblendet statt gelöscht. Du kannst ihn jederzeit wiederherstellen." } + }, + "edge_status": { + "online": "Online", + "attention": "Handlungsbedarf", + "offline": "Offline", + "checking": "Wird geprüft", + "idle": "Nicht eingerichtet", + "checked_at": "Geprüft um {time}", + "check_again": "Erneut prüfen", + "setup_guide": "Einrichtungsanleitung" } } diff --git a/i18n/locales/en.json b/i18n/locales/en.json index fefc03b8..a0dbcd5c 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -1991,14 +1991,10 @@ "playcast_description": "Enable Playcast over using TV ports directly. ", "playcast_learn_more": "Learn more", "relay_title": "Edge relay (Cloudflare)", - "relay_description": "Serve Playcast viewers from Cloudflare's edge. With the 5stack playcast relay worker on your relay domain, game servers keep sending their broadcast straight through to this server, and viewers are served from Cloudflare's cache.", - "relay_checking": "Checking {domain}", - "relay_active": "Active: Playcast viewers on {domain} are served from Cloudflare's edge", - "relay_inactive": "Not active: Playcast viewers on {domain} are served by this server", - "relay_check_again": "Check again", - "relay_setup_proxied": "{domain} must be proxied through Cloudflare (orange cloud).", - "relay_setup_deploy": "From your 5stack-panel checkout, deploy it onto the relay domain:", - "relay_setup_guide": "Setup guide", + "relay_description": "Optional. A Cloudflare Worker on your relay domain serves Playcast viewers from Cloudflare's cache, while game servers keep sending their broadcast straight to this server.", + "relay_checking": "Looking for the edge relay worker.", + "relay_active": "Playcast viewers are served from Cloudflare's cache.", + "relay_inactive": "Playcast viewers are served by this server. The setup guide shows how to put Cloudflare in front of it.", "encoding_section": "Encoding", "live_video_codec": "Live Stream Codec", "live_video_codec_description": "H.264 is the default for the broadest browser and device compatibility, including the lowest-latency WebRTC path on every browser. H.265 (HEVC) is ~30% smaller at matched quality, but HEVC-over-WebRTC is Safari 17+ only — Chrome and Firefox viewers fall back to the HLS path. H.265 falls back to H.264 automatically if the GPU lacks NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Maximum Storage", "unit_days": "(days)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Cloudflare delivery", + "cloudflare_worker_description": "Optional. A Cloudflare Worker in front of your Backblaze bucket serves demos, clips and media from Cloudflare's cache, so downloads don't count against the bucket's egress.", + "cloudflare_worker_not_set": "Files are served straight from your bucket.", + "cloudflare_worker_checking": "Asking the worker whether it can read your bucket.", + "cloudflare_worker_online": "Demos, clips and media are served through Cloudflare.", + "cloudflare_worker_unreachable": "The worker isn't answering.", + "cloudflare_worker_outdated": "This worker was deployed before status checks, so its keys can't be verified. Run the setup again to update it.", + "cloudflare_worker_keys_rejected": "Backblaze rejects the worker's keys, so files that aren't cached yet fail to load. Run the setup again with the keys the panel uses.", + "cloudflare_worker_misconfigured": "The worker is missing its bucket settings. Run the setup again.", + "cloudflare_worker_bucket_unreachable": "The worker can't reach your bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Keys accepted by Backblaze", + "cloudflare_worker_bucket_rejected": "Keys rejected ({code})", + "storage_check_section": "Storage check", + "storage_check_description": "Writes a test file to your bucket, then reads it back in this browser, the way downloads work.", + "storage_check_run": "Run check", + "storage_check_rerun": "Run again", + "storage_check_not_run": "Not run yet", + "storage_check_last_run": "Last run {time}", + "storage_check_write": "Write", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Read", + "storage_check_read_path": "Browser → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Through {domain}", + "storage_check_idle": "Waiting", + "storage_check_running": "Running", + "storage_check_skipped": "Skipped", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "The file came back different from what was written.", + "storage_check_read_blocked": "This browser can't read the bucket directly (the bucket doesn't allow this site).", + "storage_check_open_file": "Open the test file", "retention_storage_description": "Demos are kept at least the minimum retention period. Once total storage exceeds the maximum, the oldest demos past their retention are deleted first.", - "cloudflare_worker_url_description": "Serves demos, clips and media from your Backblaze bucket through Cloudflare, so downloads don't count against your bucket's egress. To set it up or change it, run this from your 5stack-panel directory:", - "cloudflare_worker_url_not_set": "Not set up. Files are served straight from your bucket.", - "test_s3_description": "Test the S3 connection and upload a file to the demo bucket.", - "test_upload": "Test Upload", - "test_upload_success": "Test Upload Success", - "test_upload_failed": "Test Upload Failed", - "test_download": "Test Download", - "test_download_failed": "Test Download Failed", "demo_network_limiter": "Global Demo Network Limiter", "demo_network_limiter_description": "Caps the upload bandwidth a game-server node will use when transferring finished demo files to S3.", "updated_s3_settings": "Updated S3 Settings", @@ -9938,5 +9957,15 @@ "open_plugin": "Open this plugin's page in a new tab", "archived_instead": "Matches have already run this mode, so it was hidden instead of deleted. You can restore it any time." } + }, + "edge_status": { + "online": "Online", + "attention": "Needs attention", + "offline": "Offline", + "checking": "Checking", + "idle": "Not set up", + "checked_at": "Checked {time}", + "check_again": "Check again", + "setup_guide": "Setup guide" } } diff --git a/i18n/locales/es_ES.json b/i18n/locales/es_ES.json index 064b1924..29055822 100644 --- a/i18n/locales/es_ES.json +++ b/i18n/locales/es_ES.json @@ -1991,14 +1991,10 @@ "playcast_description": "Usa Playcast en lugar de los puertos de TV directamente. ", "playcast_learn_more": "Más información", "relay_title": "Relé en el borde (Cloudflare)", - "relay_description": "Sirve a los espectadores de Playcast desde el borde de Cloudflare. Con el worker de relé de Playcast de 5stack en tu dominio de relé, los servidores de juego siguen enviando su emisión directamente a este servidor y los espectadores se sirven desde la caché de Cloudflare.", - "relay_checking": "Comprobando {domain}", - "relay_active": "Activo: los espectadores de Playcast en {domain} se sirven desde el borde de Cloudflare", - "relay_inactive": "Inactivo: los espectadores de Playcast en {domain} se sirven desde este servidor", - "relay_check_again": "Comprobar de nuevo", - "relay_setup_proxied": "{domain} debe pasar por el proxy de Cloudflare (nube naranja).", - "relay_setup_deploy": "Desde tu copia de 5stack-panel, despliégalo en el dominio de relé:", - "relay_setup_guide": "Guía de configuración", + "relay_description": "Opcional. Un Cloudflare Worker en tu dominio de relay sirve Playcast a los espectadores desde la caché de Cloudflare, mientras los servidores de juego siguen enviando su emisión directamente a este servidor.", + "relay_checking": "Buscando el worker del relay en el edge.", + "relay_active": "Los espectadores de Playcast reciben la emisión desde la caché de Cloudflare.", + "relay_inactive": "Los espectadores de Playcast reciben la emisión desde este servidor. La guía de configuración explica cómo poner Cloudflare delante.", "encoding_section": "Codificación", "live_video_codec": "Códec de la retransmisión en directo", "live_video_codec_description": "H.264 es el valor por defecto por su máxima compatibilidad con navegadores y dispositivos, incluida la ruta WebRTC de menor latencia en todos los navegadores. H.265 (HEVC) ocupa ~30% menos con la misma calidad, pero HEVC sobre WebRTC solo funciona en Safari 17+: los espectadores de Chrome y Firefox pasan a la ruta HLS. H.265 recurre automáticamente a H.264 si la GPU no admite NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Almacenamiento máximo", "unit_days": "(días)", "unit_gb": "(GB)", - "cloudflare_worker_url": "URL del Worker de Cloudflare", + "cloudflare_worker_section": "Entrega por Cloudflare", + "cloudflare_worker_description": "Opcional. Un Cloudflare Worker delante de tu bucket de Backblaze sirve demos, clips y contenido multimedia desde la caché de Cloudflare, para que las descargas no cuenten en el tráfico de salida del bucket.", + "cloudflare_worker_not_set": "Los archivos se sirven directamente desde tu bucket.", + "cloudflare_worker_checking": "Preguntando al worker si puede leer tu bucket.", + "cloudflare_worker_online": "Las demos, los clips y el contenido multimedia se sirven a través de Cloudflare.", + "cloudflare_worker_unreachable": "El worker no responde.", + "cloudflare_worker_outdated": "Este worker se desplegó antes de las comprobaciones de estado, así que no se pueden verificar sus claves. Vuelve a ejecutar la configuración para actualizarlo.", + "cloudflare_worker_keys_rejected": "Backblaze rechaza las claves del worker, así que los archivos que aún no están en caché no cargan. Vuelve a ejecutar la configuración con las claves que usa el panel.", + "cloudflare_worker_misconfigured": "Al worker le falta la configuración del bucket. Vuelve a ejecutar la configuración.", + "cloudflare_worker_bucket_unreachable": "El worker no puede llegar a tu bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Claves aceptadas por Backblaze", + "cloudflare_worker_bucket_rejected": "Claves rechazadas ({code})", + "storage_check_section": "Comprobación de almacenamiento", + "storage_check_description": "Escribe un archivo de prueba en tu bucket y luego lo lee en este navegador, igual que funcionan las descargas.", + "storage_check_run": "Ejecutar comprobación", + "storage_check_rerun": "Ejecutar de nuevo", + "storage_check_not_run": "Aún no se ha ejecutado", + "storage_check_last_run": "Última ejecución a las {time}", + "storage_check_write": "Escritura", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Lectura", + "storage_check_read_path": "Navegador → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "A través de {domain}", + "storage_check_idle": "En espera", + "storage_check_running": "En curso", + "storage_check_skipped": "Omitido", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "El archivo volvió distinto de lo que se escribió.", + "storage_check_read_blocked": "Este navegador no puede leer el bucket directamente (el bucket no permite este sitio).", + "storage_check_open_file": "Abrir el archivo de prueba", "retention_storage_description": "Las demos se conservan al menos durante el periodo de retención mínimo. Cuando el almacenamiento total supera el máximo, se eliminan primero las demos más antiguas que ya han superado su retención.", - "cloudflare_worker_url_description": "Sirve demos, clips y contenido multimedia de tu bucket de Backblaze a través de Cloudflare, para que las descargas no cuenten en el tráfico de salida de tu bucket. Para configurarlo o cambiarlo, ejecuta esto desde tu directorio 5stack-panel:", - "cloudflare_worker_url_not_set": "No configurado. Los archivos se sirven directamente desde tu bucket.", - "test_s3_description": "Prueba la conexión con S3 y sube un archivo al bucket de demos.", - "test_upload": "Probar subida", - "test_upload_success": "Subida de prueba correcta", - "test_upload_failed": "Fallo en la subida de prueba", - "test_download": "Probar descarga", - "test_download_failed": "Fallo en la descarga de prueba", "demo_network_limiter": "Limitador de red global para demos", "demo_network_limiter_description": "Limita el ancho de banda de subida que usará un nodo de servidores al transferir las demos finalizadas a S3.", "updated_s3_settings": "Ajustes de S3 actualizados", @@ -9938,5 +9957,15 @@ "open_plugin": "Abrir la página de este plugin en una pestaña nueva", "archived_instead": "Ya se han jugado partidas con este modo, así que se ha ocultado en lugar de eliminarse. Puedes restaurarlo cuando quieras." } + }, + "edge_status": { + "online": "En línea", + "attention": "Requiere atención", + "offline": "Sin conexión", + "checking": "Comprobando", + "idle": "Sin configurar", + "checked_at": "Comprobado a las {time}", + "check_again": "Comprobar de nuevo", + "setup_guide": "Guía de configuración" } } diff --git a/i18n/locales/fr_FR.json b/i18n/locales/fr_FR.json index 8ad48ba8..f069277c 100644 --- a/i18n/locales/fr_FR.json +++ b/i18n/locales/fr_FR.json @@ -1991,14 +1991,10 @@ "playcast_description": "Utiliser Playcast plutôt que les ports TV directement. ", "playcast_learn_more": "En savoir plus", "relay_title": "Relais en périphérie (Cloudflare)", - "relay_description": "Servez les spectateurs Playcast depuis la périphérie de Cloudflare. Avec le worker de relais Playcast de 5stack sur votre domaine de relais, les serveurs de jeu continuent d'envoyer leur diffusion directement à ce serveur, et les spectateurs sont servis depuis le cache de Cloudflare.", - "relay_checking": "Vérification de {domain}", - "relay_active": "Actif : les spectateurs Playcast sur {domain} sont servis depuis la périphérie de Cloudflare", - "relay_inactive": "Inactif : les spectateurs Playcast sur {domain} sont servis par ce serveur", - "relay_check_again": "Vérifier à nouveau", - "relay_setup_proxied": "{domain} doit passer par le proxy de Cloudflare (nuage orange).", - "relay_setup_deploy": "Depuis votre copie de 5stack-panel, déployez-le sur le domaine de relais :", - "relay_setup_guide": "Guide de configuration", + "relay_description": "Facultatif. Un Cloudflare Worker sur votre domaine de relais sert Playcast aux spectateurs depuis le cache de Cloudflare, tandis que les serveurs de jeu continuent d'envoyer leur diffusion directement à ce serveur.", + "relay_checking": "Recherche du worker de relais en périphérie.", + "relay_active": "Les spectateurs Playcast sont servis depuis le cache de Cloudflare.", + "relay_inactive": "Les spectateurs Playcast sont servis par ce serveur. Le guide d'installation explique comment placer Cloudflare devant.", "encoding_section": "Encodage", "live_video_codec": "Codec du stream live", "live_video_codec_description": "H.264 est le choix par défaut pour la compatibilité navigateurs et appareils la plus large, y compris le chemin WebRTC à plus faible latence sur tous les navigateurs. H.265 (HEVC) est environ 30 % plus léger à qualité équivalente, mais HEVC via WebRTC n'est disponible que sur Safari 17+ — les spectateurs Chrome et Firefox basculent sur le chemin HLS. H.265 retombe automatiquement sur H.264 si le GPU n'a pas NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Stockage maximal", "unit_days": "(jours)", "unit_gb": "(GB)", - "cloudflare_worker_url": "URL du Worker Cloudflare", + "cloudflare_worker_section": "Distribution via Cloudflare", + "cloudflare_worker_description": "Facultatif. Un Cloudflare Worker placé devant votre bucket Backblaze sert les démos, clips et médias depuis le cache de Cloudflare, pour que les téléchargements ne comptent pas dans le trafic sortant du bucket.", + "cloudflare_worker_not_set": "Les fichiers sont servis directement depuis votre bucket.", + "cloudflare_worker_checking": "Demande au worker s'il peut lire votre bucket.", + "cloudflare_worker_online": "Les démos, clips et médias sont servis via Cloudflare.", + "cloudflare_worker_unreachable": "Le worker ne répond pas.", + "cloudflare_worker_outdated": "Ce worker a été déployé avant les vérifications d'état, ses clés ne peuvent donc pas être vérifiées. Relancez l'installation pour le mettre à jour.", + "cloudflare_worker_keys_rejected": "Backblaze refuse les clés du worker, donc les fichiers pas encore en cache ne se chargent pas. Relancez l'installation avec les clés utilisées par le panel.", + "cloudflare_worker_misconfigured": "Il manque au worker les réglages de son bucket. Relancez l'installation.", + "cloudflare_worker_bucket_unreachable": "Le worker n'arrive pas à joindre votre bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Clés acceptées par Backblaze", + "cloudflare_worker_bucket_rejected": "Clés refusées ({code})", + "storage_check_section": "Vérification du stockage", + "storage_check_description": "Écrit un fichier de test dans votre bucket, puis le relit dans ce navigateur, comme le font les téléchargements.", + "storage_check_run": "Lancer la vérification", + "storage_check_rerun": "Relancer", + "storage_check_not_run": "Pas encore lancée", + "storage_check_last_run": "Dernier lancement à {time}", + "storage_check_write": "Écriture", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Lecture", + "storage_check_read_path": "Navigateur → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Via {domain}", + "storage_check_idle": "En attente", + "storage_check_running": "En cours", + "storage_check_skipped": "Ignorée", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Le fichier est revenu différent de ce qui a été écrit.", + "storage_check_read_blocked": "Ce navigateur ne peut pas lire le bucket directement (le bucket n'autorise pas ce site).", + "storage_check_open_file": "Ouvrir le fichier de test", "retention_storage_description": "Les démos sont conservées au moins pendant la durée de rétention minimale. Une fois le stockage total au-delà du maximum, les démos les plus anciennes ayant dépassé leur rétention sont supprimées en premier.", - "cloudflare_worker_url_description": "Sert les démos, clips et médias de votre bucket Backblaze via Cloudflare, pour que les téléchargements ne comptent pas dans le trafic sortant de votre bucket. Pour le configurer ou le modifier, exécutez ceci depuis votre dossier 5stack-panel :", - "cloudflare_worker_url_not_set": "Non configuré. Les fichiers sont servis directement depuis votre bucket.", - "test_s3_description": "Teste la connexion S3 et envoie un fichier dans le bucket des démos.", - "test_upload": "Tester l'envoi", - "test_upload_success": "Test d'envoi réussi", - "test_upload_failed": "Échec du test d'envoi", - "test_download": "Tester le téléchargement", - "test_download_failed": "Échec du test de téléchargement", "demo_network_limiter": "Limiteur réseau global des démos", "demo_network_limiter_description": "Plafonne la bande passante en envoi qu'un nœud de serveurs de jeu utilise pour transférer les fichiers de démo terminés vers S3.", "updated_s3_settings": "Paramètres S3 mis à jour", @@ -9938,5 +9957,15 @@ "open_plugin": "Ouvrir la page de ce plugin dans un nouvel onglet", "archived_instead": "Des matchs ont déjà utilisé ce mode : il a donc été masqué au lieu d'être supprimé. Tu peux le restaurer à tout moment." } + }, + "edge_status": { + "online": "En ligne", + "attention": "À vérifier", + "offline": "Hors ligne", + "checking": "Vérification", + "idle": "Non configuré", + "checked_at": "Vérifié à {time}", + "check_again": "Vérifier à nouveau", + "setup_guide": "Guide d'installation" } } diff --git a/i18n/locales/it_IT.json b/i18n/locales/it_IT.json index 86dda045..0f58ba30 100644 --- a/i18n/locales/it_IT.json +++ b/i18n/locales/it_IT.json @@ -1991,14 +1991,10 @@ "playcast_description": "Usa Playcast al posto delle porte TV dirette. ", "playcast_learn_more": "Scopri di più", "relay_title": "Relay edge (Cloudflare)", - "relay_description": "Servi gli spettatori Playcast dall'edge di Cloudflare. Con il worker relay Playcast di 5stack sul tuo dominio di relay, i server di gioco continuano a inviare la trasmissione direttamente a questo server e gli spettatori vengono serviti dalla cache di Cloudflare.", - "relay_checking": "Controllo di {domain}", - "relay_active": "Attivo: gli spettatori Playcast su {domain} sono serviti dall'edge di Cloudflare", - "relay_inactive": "Non attivo: gli spettatori Playcast su {domain} sono serviti da questo server", - "relay_check_again": "Controlla di nuovo", - "relay_setup_proxied": "{domain} deve passare dal proxy di Cloudflare (nuvola arancione).", - "relay_setup_deploy": "Dalla tua copia di 5stack-panel, distribuiscilo sul dominio di relay:", - "relay_setup_guide": "Guida alla configurazione", + "relay_description": "Facoltativo. Un Cloudflare Worker sul tuo dominio di relay serve Playcast agli spettatori dalla cache di Cloudflare, mentre i server di gioco continuano a inviare la trasmissione direttamente a questo server.", + "relay_checking": "Ricerca del worker di relay edge.", + "relay_active": "Gli spettatori di Playcast ricevono la trasmissione dalla cache di Cloudflare.", + "relay_inactive": "Gli spettatori di Playcast ricevono la trasmissione da questo server. La guida alla configurazione spiega come mettere Cloudflare davanti.", "encoding_section": "Codifica", "live_video_codec": "Codec della diretta", "live_video_codec_description": "H.264 è il predefinito per la massima compatibilità con browser e dispositivi, incluso il percorso WebRTC a latenza più bassa su ogni browser. H.265 (HEVC) pesa circa il 30% in meno a parità di qualità, ma HEVC su WebRTC funziona solo su Safari 17+: gli spettatori su Chrome e Firefox ricadono sul percorso HLS. H.265 ricade automaticamente su H.264 se la GPU non supporta NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Archiviazione massima", "unit_days": "(giorni)", "unit_gb": "(GB)", - "cloudflare_worker_url": "URL Cloudflare Worker", + "cloudflare_worker_section": "Distribuzione tramite Cloudflare", + "cloudflare_worker_description": "Facoltativo. Un Cloudflare Worker davanti al tuo bucket Backblaze serve demo, clip e contenuti multimediali dalla cache di Cloudflare, così i download non contano sul traffico in uscita del bucket.", + "cloudflare_worker_not_set": "I file vengono serviti direttamente dal bucket.", + "cloudflare_worker_checking": "Chiedo al worker se riesce a leggere il bucket.", + "cloudflare_worker_online": "Demo, clip e contenuti multimediali vengono serviti tramite Cloudflare.", + "cloudflare_worker_unreachable": "Il worker non risponde.", + "cloudflare_worker_outdated": "Questo worker è stato distribuito prima delle verifiche di stato, quindi le sue chiavi non possono essere verificate. Esegui di nuovo la configurazione per aggiornarlo.", + "cloudflare_worker_keys_rejected": "Backblaze rifiuta le chiavi del worker, quindi i file non ancora in cache non si caricano. Esegui di nuovo la configurazione con le chiavi usate dal pannello.", + "cloudflare_worker_misconfigured": "Al worker mancano le impostazioni del bucket. Esegui di nuovo la configurazione.", + "cloudflare_worker_bucket_unreachable": "Il worker non riesce a raggiungere il bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Chiavi accettate da Backblaze", + "cloudflare_worker_bucket_rejected": "Chiavi rifiutate ({code})", + "storage_check_section": "Verifica dello storage", + "storage_check_description": "Scrive un file di prova nel bucket e poi lo rilegge in questo browser, come fanno i download.", + "storage_check_run": "Avvia verifica", + "storage_check_rerun": "Esegui di nuovo", + "storage_check_not_run": "Non ancora eseguita", + "storage_check_last_run": "Ultima esecuzione alle {time}", + "storage_check_write": "Scrittura", + "storage_check_write_path": "Pannello → bucket", + "storage_check_read": "Lettura", + "storage_check_read_path": "Browser → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Tramite {domain}", + "storage_check_idle": "In attesa", + "storage_check_running": "In corso", + "storage_check_skipped": "Saltata", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Il file è tornato diverso da quello scritto.", + "storage_check_read_blocked": "Questo browser non può leggere il bucket direttamente (il bucket non consente questo sito).", + "storage_check_open_file": "Apri il file di prova", "retention_storage_description": "Le demo sono conservate almeno per il periodo minimo. Quando l'archiviazione totale supera il massimo, vengono eliminate per prime le demo più vecchie oltre il periodo di conservazione.", - "cloudflare_worker_url_description": "Distribuisce demo, clip e contenuti multimediali dal tuo bucket Backblaze tramite Cloudflare, così i download non contano sul traffico in uscita del bucket. Per configurarlo o modificarlo, esegui questo comando dalla cartella 5stack-panel:", - "cloudflare_worker_url_not_set": "Non configurato. I file vengono serviti direttamente dal bucket.", - "test_s3_description": "Testa la connessione S3 e carica un file nel bucket delle demo.", - "test_upload": "Testa upload", - "test_upload_success": "Upload di prova riuscito", - "test_upload_failed": "Upload di prova fallito", - "test_download": "Testa download", - "test_download_failed": "Download di prova fallito", "demo_network_limiter": "Limitatore di rete globale demo", "demo_network_limiter_description": "Limita la banda in upload che un nodo server di gioco usa per trasferire su S3 le demo completate.", "updated_s3_settings": "Impostazioni S3 aggiornate", @@ -9938,5 +9957,15 @@ "open_plugin": "Apri la pagina di questo plugin in una nuova scheda", "archived_instead": "Alcune partite hanno già usato questa modalità, quindi è stata nascosta anziché eliminata. Puoi ripristinarla quando vuoi." } + }, + "edge_status": { + "online": "Online", + "attention": "Richiede attenzione", + "offline": "Offline", + "checking": "Verifica in corso", + "idle": "Non configurato", + "checked_at": "Verificato alle {time}", + "check_again": "Verifica di nuovo", + "setup_guide": "Guida alla configurazione" } } diff --git a/i18n/locales/ja_JP.json b/i18n/locales/ja_JP.json index e5b6d0f7..eb297d7a 100644 --- a/i18n/locales/ja_JP.json +++ b/i18n/locales/ja_JP.json @@ -1991,14 +1991,10 @@ "playcast_description": "TV ポートへの直接接続の代わりに Playcast を使用します。", "playcast_learn_more": "詳細", "relay_title": "エッジリレー (Cloudflare)", - "relay_description": "Playcast の視聴者を Cloudflare のエッジから配信します。リレードメインに 5stack の playcast リレー Worker を置くと、ゲームサーバーは引き続きこのサーバーへ直接配信を送り、視聴者には Cloudflare のキャッシュから配信されます。", - "relay_checking": "{domain} を確認中", - "relay_active": "有効: {domain} の Playcast 視聴者は Cloudflare のエッジから配信されています", - "relay_inactive": "無効: {domain} の Playcast 視聴者はこのサーバーから配信されています", - "relay_check_again": "再確認", - "relay_setup_proxied": "{domain} は Cloudflare のプロキシ (オレンジの雲) を経由している必要があります。", - "relay_setup_deploy": "5stack-panel のチェックアウトから、リレードメインにデプロイします:", - "relay_setup_guide": "セットアップガイド", + "relay_description": "任意。リレードメイン上の Cloudflare Worker が Playcast の視聴者に Cloudflare のキャッシュから配信し、ゲームサーバーはこれまでどおりこのサーバーへ直接配信を送ります。", + "relay_checking": "エッジリレーの Worker を探しています。", + "relay_active": "Playcast の視聴者には Cloudflare のキャッシュから配信されています。", + "relay_inactive": "Playcast の視聴者にはこのサーバーから配信されています。Cloudflare を前段に置く方法はセットアップガイドを参照してください。", "encoding_section": "エンコード", "live_video_codec": "ライブ配信のコーデック", "live_video_codec_description": "H.264 が既定で、ブラウザやデバイスの互換性が最も広く、すべてのブラウザで最も低遅延な WebRTC 経路を使えます。H.265 (HEVC) は同等画質で約 30% 小さくなりますが、WebRTC 上の HEVC は Safari 17 以降のみ対応で、Chrome と Firefox の視聴者は HLS 経路にフォールバックします。GPU が NVENC HEVC に非対応の場合、H.265 は自動的に H.264 にフォールバックします。", @@ -2302,16 +2298,39 @@ "max_storage": "最大ストレージ", "unit_days": "(日)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Cloudflare 配信", + "cloudflare_worker_description": "任意。Backblaze バケットの前段に置いた Cloudflare Worker が、デモ・クリップ・メディアを Cloudflare のキャッシュから配信するため、ダウンロードがバケットの送信量に含まれません。", + "cloudflare_worker_not_set": "ファイルはバケットから直接配信されています。", + "cloudflare_worker_checking": "Worker がバケットを読めるか確認しています。", + "cloudflare_worker_online": "デモ・クリップ・メディアは Cloudflare 経由で配信されています。", + "cloudflare_worker_unreachable": "Worker が応答しません。", + "cloudflare_worker_outdated": "この Worker はステータス確認の導入前にデプロイされたため、キーを確認できません。セットアップを再実行して更新してください。", + "cloudflare_worker_keys_rejected": "Backblaze が Worker のキーを拒否しているため、まだキャッシュされていないファイルを読み込めません。パネルと同じキーでセットアップを再実行してください。", + "cloudflare_worker_misconfigured": "Worker にバケットの設定がありません。セットアップを再実行してください。", + "cloudflare_worker_bucket_unreachable": "Worker がバケットに接続できません。", + "cloudflare_worker_row_bucket": "バケット", + "cloudflare_worker_bucket_ok": "Backblaze がキーを受け入れました", + "cloudflare_worker_bucket_rejected": "キーが拒否されました ({code})", + "storage_check_section": "ストレージチェック", + "storage_check_description": "バケットにテストファイルを書き込み、ダウンロードと同じようにこのブラウザで読み戻します。", + "storage_check_run": "チェックを実行", + "storage_check_rerun": "再実行", + "storage_check_not_run": "未実行", + "storage_check_last_run": "{time} に実行", + "storage_check_write": "書き込み", + "storage_check_write_path": "パネル → バケット", + "storage_check_read": "読み込み", + "storage_check_read_path": "ブラウザ → バケット", + "storage_check_edge": "エッジ", + "storage_check_edge_path": "{domain} 経由", + "storage_check_idle": "待機中", + "storage_check_running": "実行中", + "storage_check_skipped": "スキップ", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "書き込んだ内容と異なるファイルが返されました。", + "storage_check_read_blocked": "このブラウザはバケットを直接読み込めません (バケットがこのサイトを許可していません)。", + "storage_check_open_file": "テストファイルを開く", "retention_storage_description": "デモは最小保持期間の間は保持されます。合計ストレージが最大値を超えると、保持期間を過ぎた古いデモから削除されます。", - "cloudflare_worker_url_description": "Backblaze バケットのデモ、クリップ、メディアを Cloudflare 経由で配信し、ダウンロードがバケットの送信量に含まれないようにします。設定・変更するには、5stack-panel ディレクトリでこれを実行してください:", - "cloudflare_worker_url_not_set": "未設定です。ファイルはバケットから直接配信されます。", - "test_s3_description": "S3接続をテストし、デモ用バケットにファイルをアップロードします。", - "test_upload": "アップロードをテスト", - "test_upload_success": "アップロードテスト成功", - "test_upload_failed": "アップロードテスト失敗", - "test_download": "ダウンロードをテスト", - "test_download_failed": "ダウンロードテスト失敗", "demo_network_limiter": "デモのグローバル帯域制限", "demo_network_limiter_description": "ゲームサーバーノードが完了したデモファイルをS3へ転送する際に使用するアップロード帯域の上限です。", "updated_s3_settings": "S3設定を更新しました", @@ -9938,5 +9957,15 @@ "open_plugin": "このプラグインのページを新しいタブで開く", "archived_instead": "このモードではすでに試合が行われているため、削除ではなく非表示になりました。いつでも復元できます。" } + }, + "edge_status": { + "online": "オンライン", + "attention": "要確認", + "offline": "オフライン", + "checking": "確認中", + "idle": "未設定", + "checked_at": "{time} に確認", + "check_again": "再確認", + "setup_guide": "セットアップガイド" } } diff --git a/i18n/locales/ko_KR.json b/i18n/locales/ko_KR.json index 02fc2249..ae32f352 100644 --- a/i18n/locales/ko_KR.json +++ b/i18n/locales/ko_KR.json @@ -1991,14 +1991,10 @@ "playcast_description": "TV 포트를 직접 사용하는 대신 Playcast를 활성화합니다. ", "playcast_learn_more": "자세히 알아보기", "relay_title": "엣지 릴레이 (Cloudflare)", - "relay_description": "Playcast 시청자를 Cloudflare 엣지에서 제공합니다. 릴레이 도메인에 5stack playcast 릴레이 Worker를 두면 게임 서버는 계속 이 서버로 방송을 바로 보내고, 시청자는 Cloudflare 캐시에서 제공받습니다.", - "relay_checking": "{domain} 확인 중", - "relay_active": "활성: {domain}의 Playcast 시청자는 Cloudflare 엣지에서 제공됩니다", - "relay_inactive": "비활성: {domain}의 Playcast 시청자는 이 서버가 제공합니다", - "relay_check_again": "다시 확인", - "relay_setup_proxied": "{domain}은(는) Cloudflare 프록시(주황색 구름)를 거쳐야 합니다.", - "relay_setup_deploy": "5stack-panel 체크아웃에서 릴레이 도메인에 배포하세요:", - "relay_setup_guide": "설정 가이드", + "relay_description": "선택 사항입니다. 릴레이 도메인의 Cloudflare Worker가 Playcast 시청자에게 Cloudflare 캐시에서 방송을 제공하고, 게임 서버는 계속 이 서버로 방송을 직접 보냅니다.", + "relay_checking": "엣지 릴레이 Worker를 찾는 중입니다.", + "relay_active": "Playcast 시청자는 Cloudflare 캐시에서 방송을 받습니다.", + "relay_inactive": "Playcast 시청자는 이 서버에서 방송을 받습니다. Cloudflare를 앞단에 두는 방법은 설정 가이드를 참고하세요.", "encoding_section": "인코딩", "live_video_codec": "실시간 스트림 코덱", "live_video_codec_description": "H.264는 모든 브라우저에서 가장 낮은 지연의 WebRTC 경로를 포함해 가장 폭넓은 브라우저·기기 호환성을 위한 기본값입니다. H.265(HEVC)는 동일 품질에서 약 30% 더 작지만, HEVC over WebRTC는 Safari 17 이상에서만 지원되며 Chrome과 Firefox 시청자는 HLS 경로로 대체됩니다. GPU에 NVENC HEVC가 없으면 H.265는 자동으로 H.264로 대체됩니다.", @@ -2302,16 +2298,39 @@ "max_storage": "최대 저장 용량", "unit_days": "(일)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare 워커 URL", + "cloudflare_worker_section": "Cloudflare 전송", + "cloudflare_worker_description": "선택 사항입니다. Backblaze 버킷 앞의 Cloudflare Worker가 데모, 클립, 미디어를 Cloudflare 캐시에서 제공하므로 다운로드가 버킷의 송신 트래픽에 포함되지 않습니다.", + "cloudflare_worker_not_set": "파일은 버킷에서 직접 제공됩니다.", + "cloudflare_worker_checking": "Worker가 버킷을 읽을 수 있는지 확인하는 중입니다.", + "cloudflare_worker_online": "데모, 클립, 미디어가 Cloudflare를 통해 제공됩니다.", + "cloudflare_worker_unreachable": "Worker가 응답하지 않습니다.", + "cloudflare_worker_outdated": "이 Worker는 상태 확인 기능 이전에 배포되어 키를 확인할 수 없습니다. 설정을 다시 실행해 업데이트하세요.", + "cloudflare_worker_keys_rejected": "Backblaze가 Worker의 키를 거부하여 아직 캐시되지 않은 파일을 불러올 수 없습니다. 패널이 사용하는 키로 설정을 다시 실행하세요.", + "cloudflare_worker_misconfigured": "Worker에 버킷 설정이 없습니다. 설정을 다시 실행하세요.", + "cloudflare_worker_bucket_unreachable": "Worker가 버킷에 연결할 수 없습니다.", + "cloudflare_worker_row_bucket": "버킷", + "cloudflare_worker_bucket_ok": "Backblaze가 키를 수락함", + "cloudflare_worker_bucket_rejected": "키 거부됨 ({code})", + "storage_check_section": "스토리지 확인", + "storage_check_description": "버킷에 테스트 파일을 쓴 뒤, 다운로드와 같은 방식으로 이 브라우저에서 다시 읽습니다.", + "storage_check_run": "확인 실행", + "storage_check_rerun": "다시 실행", + "storage_check_not_run": "아직 실행하지 않음", + "storage_check_last_run": "{time}에 실행함", + "storage_check_write": "쓰기", + "storage_check_write_path": "패널 → 버킷", + "storage_check_read": "읽기", + "storage_check_read_path": "브라우저 → 버킷", + "storage_check_edge": "엣지", + "storage_check_edge_path": "{domain} 경유", + "storage_check_idle": "대기 중", + "storage_check_running": "실행 중", + "storage_check_skipped": "건너뜀", + "storage_check_ms": "{ms}ms", + "storage_check_unexpected": "파일이 쓴 내용과 다르게 돌아왔습니다.", + "storage_check_read_blocked": "이 브라우저는 버킷을 직접 읽을 수 없습니다(버킷이 이 사이트를 허용하지 않음).", + "storage_check_open_file": "테스트 파일 열기", "retention_storage_description": "데모는 최소 보관 기간 동안 유지됩니다. 총 저장 용량이 최대치를 초과하면 보관 기간이 지난 오래된 데모부터 삭제됩니다.", - "cloudflare_worker_url_description": "Backblaze 버킷의 데모, 클립, 미디어를 Cloudflare를 통해 제공하므로 다운로드가 버킷의 송신 트래픽에 포함되지 않습니다. 설정하거나 변경하려면 5stack-panel 디렉터리에서 다음을 실행하세요:", - "cloudflare_worker_url_not_set": "설정되지 않았습니다. 파일은 버킷에서 직접 제공됩니다.", - "test_s3_description": "S3 연결을 테스트하고 데모 버킷에 파일을 업로드합니다.", - "test_upload": "업로드 테스트", - "test_upload_success": "업로드 테스트 성공", - "test_upload_failed": "업로드 테스트 실패", - "test_download": "다운로드 테스트", - "test_download_failed": "다운로드 테스트 실패", "demo_network_limiter": "전역 데모 네트워크 제한", "demo_network_limiter_description": "게임 서버 노드가 완료된 데모 파일을 S3로 전송할 때 사용하는 업로드 대역폭 상한입니다.", "updated_s3_settings": "S3 설정이 업데이트되었습니다", @@ -9938,5 +9957,15 @@ "open_plugin": "이 플러그인의 페이지를 새 탭에서 열기", "archived_instead": "이미 이 모드로 진행된 매치가 있어 삭제 대신 숨겨졌습니다. 언제든지 복원할 수 있습니다." } + }, + "edge_status": { + "online": "온라인", + "attention": "확인 필요", + "offline": "오프라인", + "checking": "확인 중", + "idle": "설정 안 됨", + "checked_at": "{time}에 확인함", + "check_again": "다시 확인", + "setup_guide": "설정 가이드" } } diff --git a/i18n/locales/pl_PL.json b/i18n/locales/pl_PL.json index 67cc883d..c7c574bc 100644 --- a/i18n/locales/pl_PL.json +++ b/i18n/locales/pl_PL.json @@ -1991,14 +1991,10 @@ "playcast_description": "Włącz Playcast zamiast bezpośredniego korzystania z portów TV", "playcast_learn_more": "Dowiedz się więcej", "relay_title": "Przekaźnik brzegowy (Cloudflare)", - "relay_description": "Obsługuj widzów Playcast z brzegu sieci Cloudflare. Z workerem przekaźnika Playcast 5stack w domenie przekaźnika serwery gry nadal wysyłają transmisję bezpośrednio do tego serwera, a widzowie są obsługiwani z pamięci podręcznej Cloudflare.", - "relay_checking": "Sprawdzanie {domain}", - "relay_active": "Aktywny: widzowie Playcast w {domain} są obsługiwani z brzegu sieci Cloudflare", - "relay_inactive": "Nieaktywny: widzowie Playcast w {domain} są obsługiwani przez ten serwer", - "relay_check_again": "Sprawdź ponownie", - "relay_setup_proxied": "{domain} musi przechodzić przez proxy Cloudflare (pomarańczowa chmura).", - "relay_setup_deploy": "W swojej kopii 5stack-panel wdróż go w domenie przekaźnika:", - "relay_setup_guide": "Przewodnik konfiguracji", + "relay_description": "Opcjonalne. Cloudflare Worker w domenie relay udostępnia widzom Playcast transmisję z pamięci podręcznej Cloudflare, a serwery gry nadal wysyłają transmisję bezpośrednio do tego serwera.", + "relay_checking": "Szukanie workera edge relay.", + "relay_active": "Widzowie Playcast dostają transmisję z pamięci podręcznej Cloudflare.", + "relay_inactive": "Widzowie Playcast dostają transmisję z tego serwera. Instrukcja konfiguracji pokazuje, jak postawić przed nim Cloudflare.", "encoding_section": "Kodowanie", "live_video_codec": "Kodek transmisji na żywo", "live_video_codec_description": "H.264 jest domyślny dla najszerszej kompatybilności z przeglądarkami i urządzeniami, w tym dla ścieżki WebRTC o najniższym opóźnieniu w każdej przeglądarce. H.265 (HEVC) jest ~30% mniejszy przy tej samej jakości, ale HEVC przez WebRTC działa tylko w Safari 17+ — przeglądarki Chrome i Firefox przełączają się na ścieżkę HLS. H.265 automatycznie przełącza się na H.264, jeśli GPU nie obsługuje NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Maksymalna pojemność", "unit_days": "(dni)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Adres URL Cloudflare Worker", + "cloudflare_worker_section": "Dostarczanie przez Cloudflare", + "cloudflare_worker_description": "Opcjonalne. Cloudflare Worker przed bucketem Backblaze udostępnia dema, klipy i multimedia z pamięci podręcznej Cloudflare, więc pobieranie nie wlicza się do ruchu wychodzącego bucketu.", + "cloudflare_worker_not_set": "Pliki są udostępniane bezpośrednio z bucketu.", + "cloudflare_worker_checking": "Pytanie workera, czy może odczytać bucket.", + "cloudflare_worker_online": "Dema, klipy i multimedia są udostępniane przez Cloudflare.", + "cloudflare_worker_unreachable": "Worker nie odpowiada.", + "cloudflare_worker_outdated": "Ten worker został wdrożony przed wprowadzeniem sprawdzania stanu, więc nie da się zweryfikować jego kluczy. Uruchom konfigurację ponownie, aby go zaktualizować.", + "cloudflare_worker_keys_rejected": "Backblaze odrzuca klucze workera, więc pliki, których nie ma jeszcze w pamięci podręcznej, nie wczytują się. Uruchom konfigurację ponownie z kluczami, których używa panel.", + "cloudflare_worker_misconfigured": "Workerowi brakuje ustawień bucketu. Uruchom konfigurację ponownie.", + "cloudflare_worker_bucket_unreachable": "Worker nie może połączyć się z bucketem.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Klucze zaakceptowane przez Backblaze", + "cloudflare_worker_bucket_rejected": "Klucze odrzucone ({code})", + "storage_check_section": "Test magazynu", + "storage_check_description": "Zapisuje plik testowy w buckecie, a potem odczytuje go w tej przeglądarce, tak jak działa pobieranie.", + "storage_check_run": "Uruchom test", + "storage_check_rerun": "Uruchom ponownie", + "storage_check_not_run": "Jeszcze nie uruchomiono", + "storage_check_last_run": "Ostatnio uruchomiono o {time}", + "storage_check_write": "Zapis", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Odczyt", + "storage_check_read_path": "Przeglądarka → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Przez {domain}", + "storage_check_idle": "Oczekuje", + "storage_check_running": "W toku", + "storage_check_skipped": "Pominięto", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Plik wrócił inny, niż został zapisany.", + "storage_check_read_blocked": "Ta przeglądarka nie może odczytać bucketu bezpośrednio (bucket nie zezwala tej witrynie).", + "storage_check_open_file": "Otwórz plik testowy", "retention_storage_description": "Demo są przechowywane co najmniej przez minimalny okres retencji. Gdy łączna ilość danych przekroczy limit, najpierw usuwane są najstarsze demo po upływie ich retencji.", - "cloudflare_worker_url_description": "Udostępnia dema, klipy i multimedia z Twojego bucketu Backblaze przez Cloudflare, dzięki czemu pobieranie nie wlicza się do ruchu wychodzącego bucketu. Aby to skonfigurować lub zmienić, uruchom to w katalogu 5stack-panel:", - "cloudflare_worker_url_not_set": "Nie skonfigurowano. Pliki są udostępniane bezpośrednio z bucketu.", - "test_s3_description": "Przetestuj połączenie z S3 i prześlij plik testowy do bucketa demo.", - "test_upload": "Testuj wysyłanie", - "test_upload_success": "Test wysyłania udany", - "test_upload_failed": "Test wysyłania nieudany", - "test_download": "Testuj pobieranie", - "test_download_failed": "Test pobierania nieudany", "demo_network_limiter": "Globalny limiter sieci demo", "demo_network_limiter_description": "Ogranicza przepustowość wysyłania, jaką węzeł serwerów gry wykorzysta przy przesyłaniu gotowych plików demo do S3.", "updated_s3_settings": "Zaktualizowano ustawienia S3", @@ -9938,5 +9957,15 @@ "open_plugin": "Otwórz stronę tej wtyczki w nowej karcie", "archived_instead": "W tym trybie rozegrano już mecze, więc został ukryty zamiast usunięty. Możesz go przywrócić w dowolnej chwili." } + }, + "edge_status": { + "online": "Online", + "attention": "Wymaga uwagi", + "offline": "Offline", + "checking": "Sprawdzanie", + "idle": "Nieskonfigurowane", + "checked_at": "Sprawdzono o {time}", + "check_again": "Sprawdź ponownie", + "setup_guide": "Instrukcja konfiguracji" } } diff --git a/i18n/locales/pt_BR.json b/i18n/locales/pt_BR.json index 0313b2ee..47eb8ce4 100644 --- a/i18n/locales/pt_BR.json +++ b/i18n/locales/pt_BR.json @@ -1991,14 +1991,10 @@ "playcast_description": "Habilitar Playcast usando portas da GOTV diretamente. ", "playcast_learn_more": "Leia mais", "relay_title": "Relay na borda (Cloudflare)", - "relay_description": "Atenda os espectadores do Playcast pela borda da Cloudflare. Com o worker de relay Playcast do 5stack no seu domínio de relay, os servidores de jogo continuam enviando a transmissão direto para este servidor e os espectadores são atendidos pelo cache da Cloudflare.", - "relay_checking": "Verificando {domain}", - "relay_active": "Ativo: os espectadores do Playcast em {domain} são atendidos pela borda da Cloudflare", - "relay_inactive": "Inativo: os espectadores do Playcast em {domain} são atendidos por este servidor", - "relay_check_again": "Verificar novamente", - "relay_setup_proxied": "{domain} precisa passar pelo proxy da Cloudflare (nuvem laranja).", - "relay_setup_deploy": "Na sua cópia do 5stack-panel, implante-o no domínio de relay:", - "relay_setup_guide": "Guia de configuração", + "relay_description": "Opcional. Um Cloudflare Worker no seu domínio de relay entrega o Playcast aos espectadores a partir do cache da Cloudflare, enquanto os servidores de jogo continuam enviando a transmissão direto para este servidor.", + "relay_checking": "Procurando o worker do relay de borda.", + "relay_active": "Os espectadores do Playcast recebem a transmissão do cache da Cloudflare.", + "relay_inactive": "Os espectadores do Playcast recebem a transmissão deste servidor. O guia de configuração mostra como colocar a Cloudflare na frente.", "encoding_section": "Encodando", "live_video_codec": "Live Stream Codec", "live_video_codec_description": "H.264 é o padrão para a maior compatibilidade entre navegadores e dispositivos, incluindo o caminho WebRTC de menor latência em todos os navegadores. H.265 (HEVC) é ~30% menor na mesma qualidade, mas HEVC-over-WebRTC funciona apenas no Safari 17+ — espectadores no Chrome e Firefox usam fallback para o caminho HLS. H.265 faz fallback automático para H.264 se a GPU não tiver NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Armazenamento Máximo", "unit_days": "(dias)", "unit_gb": "(GB)", - "cloudflare_worker_url": "URL do trabalhador do Cloudflare", + "cloudflare_worker_section": "Entrega pela Cloudflare", + "cloudflare_worker_description": "Opcional. Um Cloudflare Worker na frente do seu bucket do Backblaze entrega demos, clipes e mídias a partir do cache da Cloudflare, para que os downloads não contem no tráfego de saída do bucket.", + "cloudflare_worker_not_set": "Os arquivos são entregues direto do seu bucket.", + "cloudflare_worker_checking": "Perguntando ao worker se ele consegue ler seu bucket.", + "cloudflare_worker_online": "Demos, clipes e mídias são entregues pela Cloudflare.", + "cloudflare_worker_unreachable": "O worker não está respondendo.", + "cloudflare_worker_outdated": "Este worker foi implantado antes das verificações de status, então as chaves dele não podem ser verificadas. Execute a configuração de novo para atualizá-lo.", + "cloudflare_worker_keys_rejected": "O Backblaze rejeita as chaves do worker, então arquivos que ainda não estão em cache não carregam. Execute a configuração de novo com as chaves que o painel usa.", + "cloudflare_worker_misconfigured": "Faltam ao worker as configurações do bucket. Execute a configuração de novo.", + "cloudflare_worker_bucket_unreachable": "O worker não consegue acessar seu bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Chaves aceitas pelo Backblaze", + "cloudflare_worker_bucket_rejected": "Chaves rejeitadas ({code})", + "storage_check_section": "Verificação de armazenamento", + "storage_check_description": "Grava um arquivo de teste no seu bucket e depois o lê de volta neste navegador, do jeito que os downloads funcionam.", + "storage_check_run": "Executar verificação", + "storage_check_rerun": "Executar de novo", + "storage_check_not_run": "Ainda não executada", + "storage_check_last_run": "Última execução às {time}", + "storage_check_write": "Gravação", + "storage_check_write_path": "Painel → bucket", + "storage_check_read": "Leitura", + "storage_check_read_path": "Navegador → bucket", + "storage_check_edge": "Borda", + "storage_check_edge_path": "Via {domain}", + "storage_check_idle": "Aguardando", + "storage_check_running": "Executando", + "storage_check_skipped": "Ignorada", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "O arquivo voltou diferente do que foi gravado.", + "storage_check_read_blocked": "Este navegador não consegue ler o bucket diretamente (o bucket não permite este site).", + "storage_check_open_file": "Abrir o arquivo de teste", "retention_storage_description": "As demos são mantidas pelo menos durante o período mínimo de retenção. Quando o armazenamento total excede o máximo, as demonstrações mais antigas, que já ultrapassaram o período de retenção, são excluídas primeiro.", - "cloudflare_worker_url_description": "Entrega demos, clipes e mídias do seu bucket do Backblaze pela Cloudflare, para que os downloads não contem no tráfego de saída do bucket. Para configurar ou alterar, execute isto no diretório 5stack-panel:", - "cloudflare_worker_url_not_set": "Não configurado. Os arquivos são entregues direto do seu bucket.", - "test_s3_description": "Teste a conexão S3 e envie um arquivo para o grupo de demonstração.", - "test_upload": "Testar Upload", - "test_upload_success": "Teste Envio com Sucesso", - "test_upload_failed": "Testar Upload Falhou", - "test_download": "Testar Download", - "test_download_failed": "Download de teste falhou", "demo_network_limiter": "Global Demo Network Limiter", "demo_network_limiter_description": "The global network limiter for the demo files.", "updated_s3_settings": "Updated S3 Settings", @@ -9938,5 +9957,15 @@ "open_plugin": "Abrir a página deste plugin em uma nova aba", "archived_instead": "Já houve partidas com este modo, então ele foi ocultado em vez de excluído. Você pode restaurá-lo quando quiser." } + }, + "edge_status": { + "online": "Online", + "attention": "Requer atenção", + "offline": "Offline", + "checking": "Verificando", + "idle": "Não configurado", + "checked_at": "Verificado às {time}", + "check_again": "Verificar de novo", + "setup_guide": "Guia de configuração" } } diff --git a/i18n/locales/ru_RU.json b/i18n/locales/ru_RU.json index fcdabe63..ba312d97 100644 --- a/i18n/locales/ru_RU.json +++ b/i18n/locales/ru_RU.json @@ -1991,14 +1991,10 @@ "playcast_description": "Использовать Playcast вместо прямого подключения через TV-порты. ", "playcast_learn_more": "Узнать больше", "relay_title": "Пограничный ретранслятор (Cloudflare)", - "relay_description": "Обслуживайте зрителей Playcast с периферии Cloudflare. С worker ретранслятора Playcast от 5stack на вашем домене ретранслятора игровые серверы по-прежнему отправляют трансляцию напрямую на этот сервер, а зрители получают её из кэша Cloudflare.", - "relay_checking": "Проверка {domain}", - "relay_active": "Активен: зрители Playcast на {domain} обслуживаются с периферии Cloudflare", - "relay_inactive": "Не активен: зрителей Playcast на {domain} обслуживает этот сервер", - "relay_check_again": "Проверить снова", - "relay_setup_proxied": "{domain} должен проходить через прокси Cloudflare (оранжевое облако).", - "relay_setup_deploy": "Из вашей копии 5stack-panel разверните его на домене ретранслятора:", - "relay_setup_guide": "Руководство по настройке", + "relay_description": "Необязательно. Cloudflare Worker на домене ретранслятора раздаёт Playcast зрителям из кэша Cloudflare, а игровые серверы по-прежнему отправляют трансляцию напрямую на этот сервер.", + "relay_checking": "Поиск воркера edge-ретранслятора.", + "relay_active": "Зрители Playcast получают трансляцию из кэша Cloudflare.", + "relay_inactive": "Зрители Playcast получают трансляцию с этого сервера. В инструкции по настройке описано, как поставить перед ним Cloudflare.", "encoding_section": "Кодирование", "live_video_codec": "Кодек прямой трансляции", "live_video_codec_description": "H.264 — вариант по умолчанию для максимальной совместимости с браузерами и устройствами, включая путь WebRTC с наименьшей задержкой в любом браузере. H.265 (HEVC) примерно на 30% компактнее при том же качестве, но HEVC через WebRTC поддерживается только в Safari 17+ — Chrome и Firefox переключаются на путь HLS. H.265 автоматически переключается на H.264, если у GPU нет NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Максимальный объём хранилища", "unit_days": "(дней)", "unit_gb": "(ГБ)", - "cloudflare_worker_url": "URL Cloudflare Worker", + "cloudflare_worker_section": "Доставка через Cloudflare", + "cloudflare_worker_description": "Необязательно. Cloudflare Worker перед бакетом Backblaze раздаёт демо, клипы и медиа из кэша Cloudflare, поэтому загрузки не учитываются в исходящем трафике бакета.", + "cloudflare_worker_not_set": "Файлы раздаются напрямую из бакета.", + "cloudflare_worker_checking": "Спрашиваем воркер, может ли он читать бакет.", + "cloudflare_worker_online": "Демо, клипы и медиа раздаются через Cloudflare.", + "cloudflare_worker_unreachable": "Воркер не отвечает.", + "cloudflare_worker_outdated": "Этот воркер развёрнут до появления проверок состояния, поэтому его ключи проверить нельзя. Запустите настройку снова, чтобы обновить его.", + "cloudflare_worker_keys_rejected": "Backblaze отклоняет ключи воркера, поэтому файлы, которых ещё нет в кэше, не загружаются. Запустите настройку снова с ключами, которые использует панель.", + "cloudflare_worker_misconfigured": "У воркера нет настроек бакета. Запустите настройку снова.", + "cloudflare_worker_bucket_unreachable": "Воркер не может подключиться к бакету.", + "cloudflare_worker_row_bucket": "Бакет", + "cloudflare_worker_bucket_ok": "Backblaze принял ключи", + "cloudflare_worker_bucket_rejected": "Ключи отклонены ({code})", + "storage_check_section": "Проверка хранилища", + "storage_check_description": "Записывает тестовый файл в бакет, а затем читает его в этом браузере, так же как работают загрузки.", + "storage_check_run": "Запустить проверку", + "storage_check_rerun": "Запустить снова", + "storage_check_not_run": "Ещё не запускалась", + "storage_check_last_run": "Последний запуск в {time}", + "storage_check_write": "Запись", + "storage_check_write_path": "Панель → бакет", + "storage_check_read": "Чтение", + "storage_check_read_path": "Браузер → бакет", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Через {domain}", + "storage_check_idle": "Ожидание", + "storage_check_running": "Выполняется", + "storage_check_skipped": "Пропущено", + "storage_check_ms": "{ms} мс", + "storage_check_unexpected": "Файл вернулся не таким, каким был записан.", + "storage_check_read_blocked": "Этот браузер не может читать бакет напрямую (бакет не разрешает этот сайт).", + "storage_check_open_file": "Открыть тестовый файл", "retention_storage_description": "Демки хранятся не менее минимального срока. Когда общий объём хранилища превышает максимум, первыми удаляются самые старые демки, срок хранения которых уже истёк.", - "cloudflare_worker_url_description": "Раздаёт демо, клипы и медиа из вашего бакета Backblaze через Cloudflare, чтобы загрузки не учитывались в исходящем трафике бакета. Чтобы настроить или изменить, выполните это в каталоге 5stack-panel:", - "cloudflare_worker_url_not_set": "Не настроено. Файлы раздаются напрямую из бакета.", - "test_s3_description": "Проверь соединение с S3 и загрузи файл в бакет демок.", - "test_upload": "Тестовая загрузка", - "test_upload_success": "Тестовая загрузка успешна", - "test_upload_failed": "Тестовая загрузка не удалась", - "test_download": "Тестовое скачивание", - "test_download_failed": "Тестовое скачивание не удалось", "demo_network_limiter": "Глобальный лимитер сети для демок", "demo_network_limiter_description": "Ограничивает исходящую пропускную способность ноды игровых серверов при передаче завершённых демок в S3.", "updated_s3_settings": "Настройки S3 обновлены", @@ -9938,5 +9957,15 @@ "open_plugin": "Открыть страницу этого плагина в новой вкладке", "archived_instead": "В этом режиме уже проходили матчи, поэтому он был скрыт, а не удалён. Восстановить его можно в любой момент." } + }, + "edge_status": { + "online": "В сети", + "attention": "Требует внимания", + "offline": "Не в сети", + "checking": "Проверка", + "idle": "Не настроено", + "checked_at": "Проверено в {time}", + "check_again": "Проверить снова", + "setup_guide": "Инструкция по настройке" } } diff --git a/i18n/locales/sv_SE.json b/i18n/locales/sv_SE.json index f8cb5bff..918dcbe4 100644 --- a/i18n/locales/sv_SE.json +++ b/i18n/locales/sv_SE.json @@ -1991,14 +1991,10 @@ "playcast_description": "Aktivera Playcast istället för att använda TV-portar direkt. ", "playcast_learn_more": "Läs mer", "relay_title": "Edge-relä (Cloudflare)", - "relay_description": "Servera Playcast-tittare från Cloudflares edge. Med 5stacks playcast-relä-worker på din relädomän skickar spelservrar fortfarande sin sändning direkt till den här servern, och tittarna betjänas från Cloudflares cache.", - "relay_checking": "Kontrollerar {domain}", - "relay_active": "Aktiv: Playcast-tittare på {domain} betjänas från Cloudflares edge", - "relay_inactive": "Inte aktiv: Playcast-tittare på {domain} betjänas av den här servern", - "relay_check_again": "Kontrollera igen", - "relay_setup_proxied": "{domain} måste gå via Cloudflares proxy (orange moln).", - "relay_setup_deploy": "Driftsätt den på relädomänen från din utcheckning av 5stack-panel:", - "relay_setup_guide": "Installationsguide", + "relay_description": "Valfritt. En Cloudflare Worker på din relay-domän levererar Playcast till tittarna från Cloudflares cache, medan spelservrarna fortsätter att skicka sin sändning direkt till den här servern.", + "relay_checking": "Letar efter edge relay-workern.", + "relay_active": "Playcast-tittare får sändningen från Cloudflares cache.", + "relay_inactive": "Playcast-tittare får sändningen från den här servern. Installationsguiden visar hur du sätter Cloudflare framför den.", "encoding_section": "Kodning", "live_video_codec": "Codec för livesändning", "live_video_codec_description": "H.264 är standard för bredast kompatibilitet med webbläsare och enheter, inklusive den snabbaste WebRTC-vägen i alla webbläsare. H.265 (HEVC) är cirka 30 % mindre vid samma kvalitet, men HEVC över WebRTC funkar bara i Safari 17+ — Chrome- och Firefox-tittare faller tillbaka till HLS-vägen. H.265 faller automatiskt tillbaka till H.264 om GPU:n saknar NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Max lagring", "unit_days": "(dagar)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker-URL", + "cloudflare_worker_section": "Leverans via Cloudflare", + "cloudflare_worker_description": "Valfritt. En Cloudflare Worker framför din Backblaze-bucket levererar demos, klipp och media från Cloudflares cache, så att nedladdningar inte räknas mot bucketens utgående trafik.", + "cloudflare_worker_not_set": "Filer levereras direkt från din bucket.", + "cloudflare_worker_checking": "Frågar workern om den kan läsa din bucket.", + "cloudflare_worker_online": "Demos, klipp och media levereras via Cloudflare.", + "cloudflare_worker_unreachable": "Workern svarar inte.", + "cloudflare_worker_outdated": "Den här workern driftsattes före statuskontrollerna, så dess nycklar kan inte verifieras. Kör installationen igen för att uppdatera den.", + "cloudflare_worker_keys_rejected": "Backblaze avvisar workerns nycklar, så filer som inte har cachats än går inte att läsa in. Kör installationen igen med nycklarna som panelen använder.", + "cloudflare_worker_misconfigured": "Workern saknar sina bucket-inställningar. Kör installationen igen.", + "cloudflare_worker_bucket_unreachable": "Workern når inte din bucket.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Nycklarna godkända av Backblaze", + "cloudflare_worker_bucket_rejected": "Nycklarna avvisade ({code})", + "storage_check_section": "Lagringskontroll", + "storage_check_description": "Skriver en testfil till din bucket och läser sedan tillbaka den i den här webbläsaren, på samma sätt som nedladdningar fungerar.", + "storage_check_run": "Kör kontroll", + "storage_check_rerun": "Kör igen", + "storage_check_not_run": "Inte körd än", + "storage_check_last_run": "Senast körd {time}", + "storage_check_write": "Skriv", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Läs", + "storage_check_read_path": "Webbläsare → bucket", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Via {domain}", + "storage_check_idle": "Väntar", + "storage_check_running": "Pågår", + "storage_check_skipped": "Hoppades över", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Filen kom tillbaka annorlunda än det som skrevs.", + "storage_check_read_blocked": "Den här webbläsaren kan inte läsa bucketen direkt (bucketen tillåter inte den här webbplatsen).", + "storage_check_open_file": "Öppna testfilen", "retention_storage_description": "Demos sparas minst den angivna minimiperioden. När den totala lagringen överstiger maxgränsen tas de äldsta demorna vars sparandeperiod löpt ut bort först.", - "cloudflare_worker_url_description": "Levererar demos, klipp och media från din Backblaze-bucket via Cloudflare, så att nedladdningar inte räknas mot bucketens utgående trafik. Kör detta i din 5stack-panel-katalog för att ställa in eller ändra det:", - "cloudflare_worker_url_not_set": "Inte inställt. Filer levereras direkt från din bucket.", - "test_s3_description": "Testa S3-anslutningen och ladda upp en fil till demo-bucketen.", - "test_upload": "Testa uppladdning", - "test_upload_success": "Testuppladdning lyckades", - "test_upload_failed": "Testuppladdning misslyckades", - "test_download": "Testa nedladdning", - "test_download_failed": "Testnedladdning misslyckades", "demo_network_limiter": "Global nätverksbegränsare för demos", "demo_network_limiter_description": "Begränsar uppladdningsbandbredden en spelservernod använder när färdiga demofiler överförs till S3.", "updated_s3_settings": "S3-inställningar uppdaterade", @@ -9938,5 +9957,15 @@ "open_plugin": "Öppna det här tilläggets sida i en ny flik", "archived_instead": "Matcher har redan kört det här läget, så det doldes i stället för att tas bort. Du kan återställa det när som helst." } + }, + "edge_status": { + "online": "Online", + "attention": "Kräver åtgärd", + "offline": "Offline", + "checking": "Kontrollerar", + "idle": "Inte inställt", + "checked_at": "Kontrollerad {time}", + "check_again": "Kontrollera igen", + "setup_guide": "Installationsguide" } } diff --git a/i18n/locales/tr_TR.json b/i18n/locales/tr_TR.json index d21a0cbc..40767861 100644 --- a/i18n/locales/tr_TR.json +++ b/i18n/locales/tr_TR.json @@ -1991,14 +1991,10 @@ "playcast_description": "TV portlarını doğrudan kullanmak yerine Playcast'i etkinleştir. ", "playcast_learn_more": "Daha fazla bilgi", "relay_title": "Uç aktarıcı (Cloudflare)", - "relay_description": "Playcast izleyicilerine Cloudflare'in uç ağından hizmet verin. Aktarıcı alan adınızdaki 5stack playcast aktarıcı worker'ı ile oyun sunucuları yayınlarını doğrudan bu sunucuya göndermeye devam eder ve izleyicilere Cloudflare önbelleğinden hizmet verilir.", - "relay_checking": "{domain} kontrol ediliyor", - "relay_active": "Etkin: {domain} üzerindeki Playcast izleyicilerine Cloudflare'in uç ağından hizmet veriliyor", - "relay_inactive": "Etkin değil: {domain} üzerindeki Playcast izleyicilerine bu sunucu hizmet veriyor", - "relay_check_again": "Tekrar kontrol et", - "relay_setup_proxied": "{domain} Cloudflare proxy'sinden geçmelidir (turuncu bulut).", - "relay_setup_deploy": "5stack-panel kopyandan onu aktarıcı alan adına dağıt:", - "relay_setup_guide": "Kurulum kılavuzu", + "relay_description": "İsteğe bağlı. Relay alan adınızdaki bir Cloudflare Worker, Playcast izleyicilerine yayını Cloudflare önbelleğinden sunar; oyun sunucuları ise yayınlarını doğrudan bu sunucuya göndermeye devam eder.", + "relay_checking": "Uç relay worker'ı aranıyor.", + "relay_active": "Playcast izleyicileri yayını Cloudflare önbelleğinden alıyor.", + "relay_inactive": "Playcast izleyicileri yayını bu sunucudan alıyor. Kurulum kılavuzu, önüne Cloudflare'i nasıl koyacağınızı gösterir.", "encoding_section": "Kodlama", "live_video_codec": "Canlı yayın kodeği", "live_video_codec_description": "H.264, her tarayıcıda en düşük gecikmeli WebRTC yolu da dahil olmak üzere en geniş tarayıcı ve cihaz uyumluluğu için varsayılandır. H.265 (HEVC) aynı kalitede yaklaşık %30 daha küçüktür, ancak HEVC-over-WebRTC yalnızca Safari 17+ ile çalışır — Chrome ve Firefox izleyicileri HLS yoluna döner. GPU'da NVENC HEVC yoksa H.265 otomatik olarak H.264'e döner.", @@ -2302,16 +2298,39 @@ "max_storage": "Maksimum Depolama", "unit_days": "(gün)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Cloudflare ile dağıtım", + "cloudflare_worker_description": "İsteğe bağlı. Backblaze bucket'ınızın önündeki bir Cloudflare Worker demoları, klipleri ve medyayı Cloudflare önbelleğinden sunar; böylece indirmeler bucket'ın giden trafiğine sayılmaz.", + "cloudflare_worker_not_set": "Dosyalar doğrudan bucket'ınızdan sunuluyor.", + "cloudflare_worker_checking": "Worker'a bucket'ınızı okuyup okuyamadığı soruluyor.", + "cloudflare_worker_online": "Demolar, klipler ve medya Cloudflare üzerinden sunuluyor.", + "cloudflare_worker_unreachable": "Worker yanıt vermiyor.", + "cloudflare_worker_outdated": "Bu worker durum kontrollerinden önce dağıtıldığı için anahtarları doğrulanamıyor. Güncellemek için kurulumu yeniden çalıştırın.", + "cloudflare_worker_keys_rejected": "Backblaze worker'ın anahtarlarını reddediyor, bu yüzden henüz önbelleğe alınmamış dosyalar yüklenemiyor. Kurulumu panelin kullandığı anahtarlarla yeniden çalıştırın.", + "cloudflare_worker_misconfigured": "Worker'ın bucket ayarları eksik. Kurulumu yeniden çalıştırın.", + "cloudflare_worker_bucket_unreachable": "Worker bucket'ınıza ulaşamıyor.", + "cloudflare_worker_row_bucket": "Bucket", + "cloudflare_worker_bucket_ok": "Anahtarlar Backblaze tarafından kabul edildi", + "cloudflare_worker_bucket_rejected": "Anahtarlar reddedildi ({code})", + "storage_check_section": "Depolama kontrolü", + "storage_check_description": "Bucket'ınıza bir test dosyası yazar, ardından indirmelerin çalıştığı şekilde bu tarayıcıda geri okur.", + "storage_check_run": "Kontrolü çalıştır", + "storage_check_rerun": "Tekrar çalıştır", + "storage_check_not_run": "Henüz çalıştırılmadı", + "storage_check_last_run": "Son çalıştırma {time}", + "storage_check_write": "Yazma", + "storage_check_write_path": "Panel → bucket", + "storage_check_read": "Okuma", + "storage_check_read_path": "Tarayıcı → bucket", + "storage_check_edge": "Uç", + "storage_check_edge_path": "{domain} üzerinden", + "storage_check_idle": "Bekliyor", + "storage_check_running": "Çalışıyor", + "storage_check_skipped": "Atlandı", + "storage_check_ms": "{ms} ms", + "storage_check_unexpected": "Dosya yazılandan farklı döndü.", + "storage_check_read_blocked": "Bu tarayıcı bucket'ı doğrudan okuyamıyor (bucket bu siteye izin vermiyor).", + "storage_check_open_file": "Test dosyasını aç", "retention_storage_description": "Demolar en az minimum saklama süresi boyunca tutulur. Toplam depolama maksimumu aştığında, saklama süresini geçmiş en eski demolar önce silinir.", - "cloudflare_worker_url_description": "Backblaze bucket'ınızdaki demoları, klipleri ve medyayı Cloudflare üzerinden sunar; böylece indirmeler bucket'ınızın giden trafiğine sayılmaz. Kurmak veya değiştirmek için bunu 5stack-panel dizininizde çalıştırın:", - "cloudflare_worker_url_not_set": "Kurulmamış. Dosyalar doğrudan bucket'ınızdan sunulur.", - "test_s3_description": "S3 bağlantısını test et ve demo bucket'ına bir dosya yükle.", - "test_upload": "Yükleme Testi", - "test_upload_success": "Yükleme Testi Başarılı", - "test_upload_failed": "Yükleme Testi Başarısız", - "test_download": "İndirme Testi", - "test_download_failed": "İndirme Testi Başarısız", "demo_network_limiter": "Genel Demo Ağ Sınırlayıcısı", "demo_network_limiter_description": "Bir sunucu düğümünün tamamlanan demo dosyalarını S3'e aktarırken kullanacağı yükleme bant genişliğini sınırlar.", "updated_s3_settings": "S3 Ayarları Güncellendi", @@ -9938,5 +9957,15 @@ "open_plugin": "Bu eklentinin sayfasını yeni sekmede aç", "archived_instead": "Bu modda daha önce maç oynandığı için silinmek yerine gizlendi. İstediğin zaman geri getirebilirsin." } + }, + "edge_status": { + "online": "Çevrimiçi", + "attention": "İlgi gerekiyor", + "offline": "Çevrimdışı", + "checking": "Kontrol ediliyor", + "idle": "Kurulmadı", + "checked_at": "{time} itibarıyla kontrol edildi", + "check_again": "Tekrar kontrol et", + "setup_guide": "Kurulum kılavuzu" } } diff --git a/i18n/locales/uk_UA.json b/i18n/locales/uk_UA.json index 3b7fb10e..3aaacfe4 100644 --- a/i18n/locales/uk_UA.json +++ b/i18n/locales/uk_UA.json @@ -1991,14 +1991,10 @@ "playcast_description": "Увімкнути Playcast замість прямого використання портів TV. ", "playcast_learn_more": "Дізнатися більше", "relay_title": "Прикордонний ретранслятор (Cloudflare)", - "relay_description": "Обслуговуйте глядачів Playcast із периферії Cloudflare. З worker ретранслятора Playcast від 5stack на вашому домені ретранслятора ігрові сервери й надалі надсилають трансляцію напряму на цей сервер, а глядачі отримують її з кешу Cloudflare.", - "relay_checking": "Перевірка {domain}", - "relay_active": "Активний: глядачів Playcast на {domain} обслуговує периферія Cloudflare", - "relay_inactive": "Не активний: глядачів Playcast на {domain} обслуговує цей сервер", - "relay_check_again": "Перевірити знову", - "relay_setup_proxied": "{domain} має проходити через проксі Cloudflare (помаранчева хмара).", - "relay_setup_deploy": "З вашої копії 5stack-panel розгорніть його на домені ретранслятора:", - "relay_setup_guide": "Посібник із налаштування", + "relay_description": "Необов'язково. Cloudflare Worker на домені ретранслятора роздає Playcast глядачам із кешу Cloudflare, а ігрові сервери й далі надсилають трансляцію безпосередньо на цей сервер.", + "relay_checking": "Пошук воркера edge-ретранслятора.", + "relay_active": "Глядачі Playcast отримують трансляцію з кешу Cloudflare.", + "relay_inactive": "Глядачі Playcast отримують трансляцію з цього сервера. В інструкції з налаштування описано, як поставити перед ним Cloudflare.", "encoding_section": "Кодування", "live_video_codec": "Кодек прямої трансляції", "live_video_codec_description": "H.264 — типовий вибір для найширшої сумісності з браузерами й пристроями, включно з найнижчою затримкою WebRTC в усіх браузерах. H.265 (HEVC) приблизно на 30% менший при однаковій якості, але HEVC через WebRTC підтримується лише в Safari 17+ — Chrome і Firefox переходять на шлях HLS. H.265 автоматично переходить на H.264, якщо GPU не має NVENC HEVC.", @@ -2302,16 +2298,39 @@ "max_storage": "Максимальний обсяг сховища", "unit_days": "(днів)", "unit_gb": "(ГБ)", - "cloudflare_worker_url": "URL Cloudflare Worker", + "cloudflare_worker_section": "Доставка через Cloudflare", + "cloudflare_worker_description": "Необов'язково. Cloudflare Worker перед бакетом Backblaze роздає демо, кліпи та медіа з кешу Cloudflare, тож завантаження не враховуються у вихідному трафіку бакета.", + "cloudflare_worker_not_set": "Файли роздаються безпосередньо з бакета.", + "cloudflare_worker_checking": "Питаємо воркер, чи може він читати бакет.", + "cloudflare_worker_online": "Демо, кліпи та медіа роздаються через Cloudflare.", + "cloudflare_worker_unreachable": "Воркер не відповідає.", + "cloudflare_worker_outdated": "Цей воркер розгорнуто до появи перевірок стану, тому його ключі не можна перевірити. Запустіть налаштування знову, щоб оновити його.", + "cloudflare_worker_keys_rejected": "Backblaze відхиляє ключі воркера, тому файли, яких ще немає в кеші, не завантажуються. Запустіть налаштування знову з ключами, які використовує панель.", + "cloudflare_worker_misconfigured": "У воркера немає налаштувань бакета. Запустіть налаштування знову.", + "cloudflare_worker_bucket_unreachable": "Воркер не може під'єднатися до бакета.", + "cloudflare_worker_row_bucket": "Бакет", + "cloudflare_worker_bucket_ok": "Backblaze прийняв ключі", + "cloudflare_worker_bucket_rejected": "Ключі відхилено ({code})", + "storage_check_section": "Перевірка сховища", + "storage_check_description": "Записує тестовий файл у бакет, а потім читає його в цьому браузері, так само як працюють завантаження.", + "storage_check_run": "Запустити перевірку", + "storage_check_rerun": "Запустити знову", + "storage_check_not_run": "Ще не запускалася", + "storage_check_last_run": "Останній запуск о {time}", + "storage_check_write": "Запис", + "storage_check_write_path": "Панель → бакет", + "storage_check_read": "Читання", + "storage_check_read_path": "Браузер → бакет", + "storage_check_edge": "Edge", + "storage_check_edge_path": "Через {domain}", + "storage_check_idle": "Очікування", + "storage_check_running": "Виконується", + "storage_check_skipped": "Пропущено", + "storage_check_ms": "{ms} мс", + "storage_check_unexpected": "Файл повернувся не таким, яким його записали.", + "storage_check_read_blocked": "Цей браузер не може читати бакет напряму (бакет не дозволяє цей сайт).", + "storage_check_open_file": "Відкрити тестовий файл", "retention_storage_description": "Демки зберігаються щонайменше мінімальний термін. Коли загальний обсяг перевищує максимум, першими видаляються найстаріші демки, у яких термін зберігання вже минув.", - "cloudflare_worker_url_description": "Роздає демо, кліпи та медіа з вашого бакета Backblaze через Cloudflare, щоб завантаження не враховувалися у вихідному трафіку бакета. Щоб налаштувати або змінити, виконайте це в каталозі 5stack-panel:", - "cloudflare_worker_url_not_set": "Не налаштовано. Файли роздаються безпосередньо з бакета.", - "test_s3_description": "Перевір з’єднання з S3 і завантаж файл у бакет демок.", - "test_upload": "Тестове завантаження", - "test_upload_success": "Тестове завантаження успішне", - "test_upload_failed": "Тестове завантаження не вдалося", - "test_download": "Тестове скачування", - "test_download_failed": "Тестове скачування не вдалося", "demo_network_limiter": "Глобальний обмежувач мережі для демок", "demo_network_limiter_description": "Обмежує вихідну пропускну здатність, яку нода ігрових серверів використовує для передачі готових файлів демок у S3.", "updated_s3_settings": "Налаштування S3 оновлено", @@ -9938,5 +9957,15 @@ "open_plugin": "Відкрити сторінку цього плагіна в новій вкладці", "archived_instead": "У цьому режимі вже проходили матчі, тож його приховано, а не видалено. Відновити його можна будь-коли." } + }, + "edge_status": { + "online": "Онлайн", + "attention": "Потребує уваги", + "offline": "Офлайн", + "checking": "Перевірка", + "idle": "Не налаштовано", + "checked_at": "Перевірено о {time}", + "check_again": "Перевірити знову", + "setup_guide": "Інструкція з налаштування" } } diff --git a/i18n/locales/zh_Hans.json b/i18n/locales/zh_Hans.json index f6def9f7..1ccf74ad 100644 --- a/i18n/locales/zh_Hans.json +++ b/i18n/locales/zh_Hans.json @@ -1991,14 +1991,10 @@ "playcast_description": "启用 Playcast 而非直接使用 TV 端口。", "playcast_learn_more": "了解更多", "relay_title": "边缘中继 (Cloudflare)", - "relay_description": "通过 Cloudflare 边缘为 Playcast 观众提供服务。在你的中继域名上部署 5stack playcast 中继 Worker 后,游戏服务器仍会将广播直接发送到本服务器,观众则由 Cloudflare 缓存提供服务。", - "relay_checking": "正在检查 {domain}", - "relay_active": "已启用:{domain} 上的 Playcast 观众由 Cloudflare 边缘提供服务", - "relay_inactive": "未启用:{domain} 上的 Playcast 观众由本服务器提供服务", - "relay_check_again": "重新检查", - "relay_setup_proxied": "{domain} 必须通过 Cloudflare 代理(橙色云朵)。", - "relay_setup_deploy": "在你的 5stack-panel 检出目录中,将其部署到中继域名:", - "relay_setup_guide": "设置指南", + "relay_description": "可选。中继域名上的 Cloudflare Worker 会从 Cloudflare 缓存向 Playcast 观众分发,游戏服务器仍直接把直播发送到这台服务器。", + "relay_checking": "正在查找边缘中继 Worker。", + "relay_active": "Playcast 观众从 Cloudflare 缓存接收直播。", + "relay_inactive": "Playcast 观众从这台服务器接收直播。设置指南介绍了如何在它前面加上 Cloudflare。", "encoding_section": "编码", "live_video_codec": "直播视频编码", "live_video_codec_description": "H.264 是默认选项,可在最广泛的浏览器和设备上兼容,包括在每款浏览器上延迟最低的 WebRTC 路径。H.265 (HEVC) 在同等质量下体积小约 30%,但 HEVC-over-WebRTC 仅支持 Safari 17+——Chrome 和 Firefox 观众将回退到 HLS 路径。如果 GPU 缺少 NVENC HEVC,H.265 将自动回退到 H.264。", @@ -2302,16 +2298,39 @@ "max_storage": "最大存储量", "unit_days": "(天)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Cloudflare 分发", + "cloudflare_worker_description": "可选。放在 Backblaze 存储桶前面的 Cloudflare Worker 会从 Cloudflare 缓存分发演示、片段和媒体,下载不会计入存储桶的出站流量。", + "cloudflare_worker_not_set": "文件直接从存储桶提供。", + "cloudflare_worker_checking": "正在询问 Worker 能否读取存储桶。", + "cloudflare_worker_online": "演示、片段和媒体通过 Cloudflare 分发。", + "cloudflare_worker_unreachable": "Worker 没有响应。", + "cloudflare_worker_outdated": "此 Worker 部署于状态检查推出之前,无法验证其密钥。请重新运行设置以更新它。", + "cloudflare_worker_keys_rejected": "Backblaze 拒绝了 Worker 的密钥,尚未缓存的文件无法加载。请使用面板所用的密钥重新运行设置。", + "cloudflare_worker_misconfigured": "Worker 缺少存储桶设置。请重新运行设置。", + "cloudflare_worker_bucket_unreachable": "Worker 无法连接到存储桶。", + "cloudflare_worker_row_bucket": "存储桶", + "cloudflare_worker_bucket_ok": "Backblaze 已接受密钥", + "cloudflare_worker_bucket_rejected": "密钥被拒绝({code})", + "storage_check_section": "存储检查", + "storage_check_description": "向存储桶写入一个测试文件,然后像下载那样在此浏览器中读回。", + "storage_check_run": "运行检查", + "storage_check_rerun": "再次运行", + "storage_check_not_run": "尚未运行", + "storage_check_last_run": "上次运行于 {time}", + "storage_check_write": "写入", + "storage_check_write_path": "面板 → 存储桶", + "storage_check_read": "读取", + "storage_check_read_path": "浏览器 → 存储桶", + "storage_check_edge": "边缘", + "storage_check_edge_path": "经由 {domain}", + "storage_check_idle": "等待中", + "storage_check_running": "运行中", + "storage_check_skipped": "已跳过", + "storage_check_ms": "{ms} 毫秒", + "storage_check_unexpected": "读回的文件与写入的内容不一致。", + "storage_check_read_blocked": "此浏览器无法直接读取存储桶(存储桶不允许此网站)。", + "storage_check_open_file": "打开测试文件", "retention_storage_description": "Demo 至少保留最短保留期。一旦总存储量超过最大值,将首先删除超过保留期的最旧 Demo。", - "cloudflare_worker_url_description": "通过 Cloudflare 分发你 Backblaze 存储桶中的演示、片段和媒体,下载不会计入存储桶的出站流量。如需设置或更改,请在 5stack-panel 目录中运行:", - "cloudflare_worker_url_not_set": "未设置。文件直接从存储桶提供。", - "test_s3_description": "测试 S3 连接并上传文件到 Demo 存储桶。", - "test_upload": "测试上传", - "test_upload_success": "测试上传成功", - "test_upload_failed": "测试上传失败", - "test_download": "测试下载", - "test_download_failed": "测试下载失败", "demo_network_limiter": "全局 Demo 网络限速", "demo_network_limiter_description": "限制游戏服务器节点在将完成的 Demo 文件传输到 S3 时使用的上传带宽。", "updated_s3_settings": "S3 设置已更新", @@ -9938,5 +9957,15 @@ "open_plugin": "在新标签页中打开该插件的页面", "archived_instead": "已经有比赛使用过这个模式,因此它被隐藏而不是删除。您可以随时恢复它。" } + }, + "edge_status": { + "online": "在线", + "attention": "需要处理", + "offline": "离线", + "checking": "检查中", + "idle": "未设置", + "checked_at": "检查于 {time}", + "check_again": "重新检查", + "setup_guide": "设置指南" } } diff --git a/i18n/locales/zh_Hant.json b/i18n/locales/zh_Hant.json index 7351b0b4..01768774 100644 --- a/i18n/locales/zh_Hant.json +++ b/i18n/locales/zh_Hant.json @@ -1991,14 +1991,10 @@ "playcast_description": "啟用 Playcast,取代直接使用 TV 連接埠。", "playcast_learn_more": "了解更多", "relay_title": "邊緣中繼 (Cloudflare)", - "relay_description": "透過 Cloudflare 邊緣為 Playcast 觀眾提供服務。在你的中繼網域上部署 5stack playcast 中繼 Worker 後,遊戲伺服器仍會將轉播直接傳送到本伺服器,觀眾則由 Cloudflare 快取提供服務。", - "relay_checking": "正在檢查 {domain}", - "relay_active": "已啟用:{domain} 上的 Playcast 觀眾由 Cloudflare 邊緣提供服務", - "relay_inactive": "未啟用:{domain} 上的 Playcast 觀眾由本伺服器提供服務", - "relay_check_again": "重新檢查", - "relay_setup_proxied": "{domain} 必須經過 Cloudflare 代理(橘色雲朵)。", - "relay_setup_deploy": "在你的 5stack-panel 檢出目錄中,將其部署到中繼網域:", - "relay_setup_guide": "設定指南", + "relay_description": "選用。中繼網域上的 Cloudflare Worker 會從 Cloudflare 快取向 Playcast 觀眾提供直播,遊戲伺服器仍直接將直播傳送到這台伺服器。", + "relay_checking": "正在尋找邊緣中繼 Worker。", + "relay_active": "Playcast 觀眾從 Cloudflare 快取接收直播。", + "relay_inactive": "Playcast 觀眾從這台伺服器接收直播。設定指南說明了如何在前面加上 Cloudflare。", "encoding_section": "編碼", "live_video_codec": "直播視訊編碼", "live_video_codec_description": "H.264 為預設選項,可在最廣泛的瀏覽器與裝置上相容,包括在每款瀏覽器上延遲最低的 WebRTC 路徑。H.265 (HEVC) 在同等品質下體積約小 30%,但 HEVC-over-WebRTC 僅支援 Safari 17+——Chrome 和 Firefox 的觀眾會回退到 HLS 路徑。若 GPU 缺少 NVENC HEVC,H.265 會自動回退到 H.264。", @@ -2302,16 +2298,39 @@ "max_storage": "最大儲存量", "unit_days": "(天)", "unit_gb": "(GB)", - "cloudflare_worker_url": "Cloudflare Worker URL", + "cloudflare_worker_section": "Cloudflare 傳送", + "cloudflare_worker_description": "選用。放在 Backblaze 儲存桶前面的 Cloudflare Worker 會從 Cloudflare 快取提供示範、片段與媒體,下載不會計入儲存桶的輸出流量。", + "cloudflare_worker_not_set": "檔案直接從儲存桶提供。", + "cloudflare_worker_checking": "正在詢問 Worker 能否讀取儲存桶。", + "cloudflare_worker_online": "示範、片段與媒體透過 Cloudflare 提供。", + "cloudflare_worker_unreachable": "Worker 沒有回應。", + "cloudflare_worker_outdated": "此 Worker 部署於狀態檢查推出之前,無法驗證其金鑰。請重新執行設定以更新它。", + "cloudflare_worker_keys_rejected": "Backblaze 拒絕了 Worker 的金鑰,尚未快取的檔案無法載入。請使用面板所用的金鑰重新執行設定。", + "cloudflare_worker_misconfigured": "Worker 缺少儲存桶設定。請重新執行設定。", + "cloudflare_worker_bucket_unreachable": "Worker 無法連線到儲存桶。", + "cloudflare_worker_row_bucket": "儲存桶", + "cloudflare_worker_bucket_ok": "Backblaze 已接受金鑰", + "cloudflare_worker_bucket_rejected": "金鑰遭拒({code})", + "storage_check_section": "儲存空間檢查", + "storage_check_description": "向儲存桶寫入一個測試檔案,然後像下載一樣在此瀏覽器中讀回。", + "storage_check_run": "執行檢查", + "storage_check_rerun": "再次執行", + "storage_check_not_run": "尚未執行", + "storage_check_last_run": "上次執行於 {time}", + "storage_check_write": "寫入", + "storage_check_write_path": "面板 → 儲存桶", + "storage_check_read": "讀取", + "storage_check_read_path": "瀏覽器 → 儲存桶", + "storage_check_edge": "邊緣", + "storage_check_edge_path": "經由 {domain}", + "storage_check_idle": "等待中", + "storage_check_running": "執行中", + "storage_check_skipped": "已略過", + "storage_check_ms": "{ms} 毫秒", + "storage_check_unexpected": "讀回的檔案與寫入的內容不一致。", + "storage_check_read_blocked": "此瀏覽器無法直接讀取儲存桶(儲存桶不允許此網站)。", + "storage_check_open_file": "開啟測試檔案", "retention_storage_description": "Demo 至少保留最短保留期。一旦總儲存量超過上限,將優先刪除超過保留期的最舊 Demo。", - "cloudflare_worker_url_description": "透過 Cloudflare 提供你 Backblaze 儲存桶中的示範、片段與媒體,下載不會計入儲存桶的輸出流量。如需設定或變更,請在 5stack-panel 目錄中執行:", - "cloudflare_worker_url_not_set": "尚未設定。檔案直接從儲存桶提供。", - "test_s3_description": "測試 S3 連線並上傳檔案到 Demo 儲存貯體。", - "test_upload": "測試上傳", - "test_upload_success": "測試上傳成功", - "test_upload_failed": "測試上傳失敗", - "test_download": "測試下載", - "test_download_failed": "測試下載失敗", "demo_network_limiter": "全域 Demo 網路限速", "demo_network_limiter_description": "限制遊戲伺服器節點將完成的 Demo 檔案傳輸到 S3 時所使用的上傳頻寬。", "updated_s3_settings": "S3 設定已更新", @@ -9938,5 +9957,15 @@ "open_plugin": "在新分頁中開啟該外掛的頁面", "archived_instead": "已經有比賽使用過這個模式,因此它被隱藏而不是刪除。您可以隨時還原它。" } + }, + "edge_status": { + "online": "線上", + "attention": "需要處理", + "offline": "離線", + "checking": "檢查中", + "idle": "未設定", + "checked_at": "檢查於 {time}", + "check_again": "重新檢查", + "setup_guide": "設定指南" } } diff --git a/pages/settings/application/demo-settings.vue b/pages/settings/application/demo-settings.vue index a1842f60..672eb5dd 100644 --- a/pages/settings/application/demo-settings.vue +++ b/pages/settings/application/demo-settings.vue @@ -1,5 +1,4 @@ diff --git a/i18n/locales/ar_SA.json b/i18n/locales/ar_SA.json index bf58c778..8432051a 100644 --- a/i18n/locales/ar_SA.json +++ b/i18n/locales/ar_SA.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "يرفض Backblaze مفاتيح العامل، لذا تفشل الملفات غير المخزّنة مؤقتًا في التحميل. أعد تشغيل الإعداد بالمفاتيح التي تستخدمها اللوحة.", "cloudflare_worker_misconfigured": "إعدادات الحاوية مفقودة في العامل. أعد تشغيل الإعداد.", "cloudflare_worker_bucket_unreachable": "لا يستطيع العامل الوصول إلى الحاوية.", - "cloudflare_worker_bucket_ok": "قبل Backblaze المفاتيح", "cloudflare_worker_bucket_rejected": "المفاتيح مرفوضة ({code})", "storage_check_section": "فحص التخزين", "storage_check_description": "يكتب ملفًا تجريبيًا في الحاوية ثم يقرؤه في هذا المتصفح، كما تعمل التنزيلات.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "بانتظار التشغيل", "storage_check_running": "قيد التشغيل", "storage_check_skipped": "تم التخطي", + "storage_check_failed": "فشل", + "storage_check_unverified": "تحقّق يدويًا", "storage_check_ms": "{ms} مللي ثانية", "storage_check_unexpected": "عاد الملف مختلفًا عمّا كُتب.", "storage_check_read_blocked": "لا يستطيع هذا المتصفح قراءة الحاوية مباشرة (الحاوية لا تسمح لهذا الموقع).", diff --git a/i18n/locales/da_DK.json b/i18n/locales/da_DK.json index c24eb3d0..75012802 100644 --- a/i18n/locales/da_DK.json +++ b/i18n/locales/da_DK.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze afviser workerens nøgler, så filer, der ikke er cachet endnu, kan ikke indlæses. Kør opsætningen igen med de nøgler, panelet bruger.", "cloudflare_worker_misconfigured": "Workeren mangler sine bucket-indstillinger. Kør opsætningen igen.", "cloudflare_worker_bucket_unreachable": "Workeren kan ikke nå din bucket.", - "cloudflare_worker_bucket_ok": "Nøgler godkendt af Backblaze", "cloudflare_worker_bucket_rejected": "Nøgler afvist ({code})", "storage_check_section": "Lagertjek", "storage_check_description": "Skriver en testfil til din bucket og læser den derefter tilbage i denne browser, sådan som downloads virker.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Venter", "storage_check_running": "Kører", "storage_check_skipped": "Sprunget over", + "storage_check_failed": "Mislykkedes", + "storage_check_unverified": "Tjek selv", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Filen kom tilbage anderledes end det, der blev skrevet.", "storage_check_read_blocked": "Denne browser kan ikke læse bucketen direkte (bucketen tillader ikke dette site).", diff --git a/i18n/locales/de_DE.json b/i18n/locales/de_DE.json index ddb85f73..6a45ffd1 100644 --- a/i18n/locales/de_DE.json +++ b/i18n/locales/de_DE.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze lehnt die Schlüssel des Workers ab, daher lassen sich noch nicht gecachte Dateien nicht laden. Führe die Einrichtung erneut mit den Schlüsseln aus, die das Panel verwendet.", "cloudflare_worker_misconfigured": "Dem Worker fehlen seine Bucket-Einstellungen. Führe die Einrichtung erneut aus.", "cloudflare_worker_bucket_unreachable": "Der Worker erreicht deinen Bucket nicht.", - "cloudflare_worker_bucket_ok": "Schlüssel von Backblaze akzeptiert", "cloudflare_worker_bucket_rejected": "Schlüssel abgelehnt ({code})", "storage_check_section": "Speicherprüfung", "storage_check_description": "Schreibt eine Testdatei in deinen Bucket und liest sie dann in diesem Browser zurück, so wie Downloads funktionieren.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Wartet", "storage_check_running": "Läuft", "storage_check_skipped": "Übersprungen", + "storage_check_failed": "Fehlgeschlagen", + "storage_check_unverified": "Selbst prüfen", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Die Datei kam anders zurück, als sie geschrieben wurde.", "storage_check_read_blocked": "Dieser Browser kann den Bucket nicht direkt lesen (der Bucket erlaubt diese Seite nicht).", diff --git a/i18n/locales/en.json b/i18n/locales/en.json index d41bd547..927a901b 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze rejects the worker's keys, so files that aren't cached yet fail to load. Run the setup again with the keys the panel uses.", "cloudflare_worker_misconfigured": "The worker is missing its bucket settings. Run the setup again.", "cloudflare_worker_bucket_unreachable": "The worker can't reach your bucket.", - "cloudflare_worker_bucket_ok": "Keys accepted by Backblaze", "cloudflare_worker_bucket_rejected": "Keys rejected ({code})", "storage_check_section": "Storage check", "storage_check_description": "Writes a test file to your bucket, then reads it back in this browser, the way downloads work.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Waiting", "storage_check_running": "Running", "storage_check_skipped": "Skipped", + "storage_check_failed": "Failed", + "storage_check_unverified": "Check by hand", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "The file came back different from what was written.", "storage_check_read_blocked": "This browser can't read the bucket directly (the bucket doesn't allow this site).", diff --git a/i18n/locales/es_ES.json b/i18n/locales/es_ES.json index 9e4dba21..a97cb982 100644 --- a/i18n/locales/es_ES.json +++ b/i18n/locales/es_ES.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze rechaza las claves del worker, así que los archivos que aún no están en caché no cargan. Vuelve a ejecutar la configuración con las claves que usa el panel.", "cloudflare_worker_misconfigured": "Al worker le falta la configuración del bucket. Vuelve a ejecutar la configuración.", "cloudflare_worker_bucket_unreachable": "El worker no puede llegar a tu bucket.", - "cloudflare_worker_bucket_ok": "Claves aceptadas por Backblaze", "cloudflare_worker_bucket_rejected": "Claves rechazadas ({code})", "storage_check_section": "Comprobación de almacenamiento", "storage_check_description": "Escribe un archivo de prueba en tu bucket y luego lo lee en este navegador, igual que funcionan las descargas.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "En espera", "storage_check_running": "En curso", "storage_check_skipped": "Omitido", + "storage_check_failed": "Error", + "storage_check_unverified": "Compruébalo a mano", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "El archivo volvió distinto de lo que se escribió.", "storage_check_read_blocked": "Este navegador no puede leer el bucket directamente (el bucket no permite este sitio).", diff --git a/i18n/locales/fr_FR.json b/i18n/locales/fr_FR.json index 969b3ea3..0a84e14f 100644 --- a/i18n/locales/fr_FR.json +++ b/i18n/locales/fr_FR.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze refuse les clés du worker, donc les fichiers pas encore en cache ne se chargent pas. Relancez l'installation avec les clés utilisées par le panel.", "cloudflare_worker_misconfigured": "Il manque au worker les réglages de son bucket. Relancez l'installation.", "cloudflare_worker_bucket_unreachable": "Le worker n'arrive pas à joindre votre bucket.", - "cloudflare_worker_bucket_ok": "Clés acceptées par Backblaze", "cloudflare_worker_bucket_rejected": "Clés refusées ({code})", "storage_check_section": "Vérification du stockage", "storage_check_description": "Écrit un fichier de test dans votre bucket, puis le relit dans ce navigateur, comme le font les téléchargements.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "En attente", "storage_check_running": "En cours", "storage_check_skipped": "Ignorée", + "storage_check_failed": "Échec", + "storage_check_unverified": "À vérifier à la main", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Le fichier est revenu différent de ce qui a été écrit.", "storage_check_read_blocked": "Ce navigateur ne peut pas lire le bucket directement (le bucket n'autorise pas ce site).", diff --git a/i18n/locales/it_IT.json b/i18n/locales/it_IT.json index 318ee224..381657f4 100644 --- a/i18n/locales/it_IT.json +++ b/i18n/locales/it_IT.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze rifiuta le chiavi del worker, quindi i file non ancora in cache non si caricano. Esegui di nuovo la configurazione con le chiavi usate dal pannello.", "cloudflare_worker_misconfigured": "Al worker mancano le impostazioni del bucket. Esegui di nuovo la configurazione.", "cloudflare_worker_bucket_unreachable": "Il worker non riesce a raggiungere il bucket.", - "cloudflare_worker_bucket_ok": "Chiavi accettate da Backblaze", "cloudflare_worker_bucket_rejected": "Chiavi rifiutate ({code})", "storage_check_section": "Verifica dello storage", "storage_check_description": "Scrive un file di prova nel bucket e poi lo rilegge in questo browser, come fanno i download.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "In attesa", "storage_check_running": "In corso", "storage_check_skipped": "Saltata", + "storage_check_failed": "Non riuscito", + "storage_check_unverified": "Verifica a mano", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Il file è tornato diverso da quello scritto.", "storage_check_read_blocked": "Questo browser non può leggere il bucket direttamente (il bucket non consente questo sito).", diff --git a/i18n/locales/ja_JP.json b/i18n/locales/ja_JP.json index ea2e5af8..2a5fd7c8 100644 --- a/i18n/locales/ja_JP.json +++ b/i18n/locales/ja_JP.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze が Worker のキーを拒否しているため、まだキャッシュされていないファイルを読み込めません。パネルと同じキーでセットアップを再実行してください。", "cloudflare_worker_misconfigured": "Worker にバケットの設定がありません。セットアップを再実行してください。", "cloudflare_worker_bucket_unreachable": "Worker がバケットに接続できません。", - "cloudflare_worker_bucket_ok": "Backblaze がキーを受け入れました", "cloudflare_worker_bucket_rejected": "キーが拒否されました ({code})", "storage_check_section": "ストレージチェック", "storage_check_description": "バケットにテストファイルを書き込み、ダウンロードと同じようにこのブラウザで読み戻します。", @@ -2325,6 +2324,8 @@ "storage_check_idle": "待機中", "storage_check_running": "実行中", "storage_check_skipped": "スキップ", + "storage_check_failed": "失敗", + "storage_check_unverified": "手動で確認", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "書き込んだ内容と異なるファイルが返されました。", "storage_check_read_blocked": "このブラウザはバケットを直接読み込めません (バケットがこのサイトを許可していません)。", diff --git a/i18n/locales/ko_KR.json b/i18n/locales/ko_KR.json index 71b86c0d..6e763e10 100644 --- a/i18n/locales/ko_KR.json +++ b/i18n/locales/ko_KR.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze가 Worker의 키를 거부하여 아직 캐시되지 않은 파일을 불러올 수 없습니다. 패널이 사용하는 키로 설정을 다시 실행하세요.", "cloudflare_worker_misconfigured": "Worker에 버킷 설정이 없습니다. 설정을 다시 실행하세요.", "cloudflare_worker_bucket_unreachable": "Worker가 버킷에 연결할 수 없습니다.", - "cloudflare_worker_bucket_ok": "Backblaze가 키를 수락함", "cloudflare_worker_bucket_rejected": "키 거부됨 ({code})", "storage_check_section": "스토리지 확인", "storage_check_description": "버킷에 테스트 파일을 쓴 뒤, 다운로드와 같은 방식으로 이 브라우저에서 다시 읽습니다.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "대기 중", "storage_check_running": "실행 중", "storage_check_skipped": "건너뜀", + "storage_check_failed": "실패", + "storage_check_unverified": "직접 확인", "storage_check_ms": "{ms}ms", "storage_check_unexpected": "파일이 쓴 내용과 다르게 돌아왔습니다.", "storage_check_read_blocked": "이 브라우저는 버킷을 직접 읽을 수 없습니다(버킷이 이 사이트를 허용하지 않음).", diff --git a/i18n/locales/pl_PL.json b/i18n/locales/pl_PL.json index 3a2a8b42..8e479b1c 100644 --- a/i18n/locales/pl_PL.json +++ b/i18n/locales/pl_PL.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze odrzuca klucze workera, więc pliki, których nie ma jeszcze w pamięci podręcznej, nie wczytują się. Uruchom konfigurację ponownie z kluczami, których używa panel.", "cloudflare_worker_misconfigured": "Workerowi brakuje ustawień bucketu. Uruchom konfigurację ponownie.", "cloudflare_worker_bucket_unreachable": "Worker nie może połączyć się z bucketem.", - "cloudflare_worker_bucket_ok": "Klucze zaakceptowane przez Backblaze", "cloudflare_worker_bucket_rejected": "Klucze odrzucone ({code})", "storage_check_section": "Test magazynu", "storage_check_description": "Zapisuje plik testowy w buckecie, a potem odczytuje go w tej przeglądarce, tak jak działa pobieranie.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Oczekuje", "storage_check_running": "W toku", "storage_check_skipped": "Pominięto", + "storage_check_failed": "Niepowodzenie", + "storage_check_unverified": "Sprawdź ręcznie", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Plik wrócił inny, niż został zapisany.", "storage_check_read_blocked": "Ta przeglądarka nie może odczytać bucketu bezpośrednio (bucket nie zezwala tej witrynie).", diff --git a/i18n/locales/pt_BR.json b/i18n/locales/pt_BR.json index 6a0fc5be..a0348ad4 100644 --- a/i18n/locales/pt_BR.json +++ b/i18n/locales/pt_BR.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "O Backblaze rejeita as chaves do worker, então arquivos que ainda não estão em cache não carregam. Execute a configuração de novo com as chaves que o painel usa.", "cloudflare_worker_misconfigured": "Faltam ao worker as configurações do bucket. Execute a configuração de novo.", "cloudflare_worker_bucket_unreachable": "O worker não consegue acessar seu bucket.", - "cloudflare_worker_bucket_ok": "Chaves aceitas pelo Backblaze", "cloudflare_worker_bucket_rejected": "Chaves rejeitadas ({code})", "storage_check_section": "Verificação de armazenamento", "storage_check_description": "Grava um arquivo de teste no seu bucket e depois o lê de volta neste navegador, do jeito que os downloads funcionam.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Aguardando", "storage_check_running": "Executando", "storage_check_skipped": "Ignorada", + "storage_check_failed": "Falhou", + "storage_check_unverified": "Verifique manualmente", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "O arquivo voltou diferente do que foi gravado.", "storage_check_read_blocked": "Este navegador não consegue ler o bucket diretamente (o bucket não permite este site).", diff --git a/i18n/locales/ru_RU.json b/i18n/locales/ru_RU.json index 55c2f1f9..ed3afb54 100644 --- a/i18n/locales/ru_RU.json +++ b/i18n/locales/ru_RU.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze отклоняет ключи воркера, поэтому файлы, которых ещё нет в кэше, не загружаются. Запустите настройку снова с ключами, которые использует панель.", "cloudflare_worker_misconfigured": "У воркера нет настроек бакета. Запустите настройку снова.", "cloudflare_worker_bucket_unreachable": "Воркер не может подключиться к бакету.", - "cloudflare_worker_bucket_ok": "Backblaze принял ключи", "cloudflare_worker_bucket_rejected": "Ключи отклонены ({code})", "storage_check_section": "Проверка хранилища", "storage_check_description": "Записывает тестовый файл в бакет, а затем читает его в этом браузере, так же как работают загрузки.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Ожидание", "storage_check_running": "Выполняется", "storage_check_skipped": "Пропущено", + "storage_check_failed": "Ошибка", + "storage_check_unverified": "Проверьте вручную", "storage_check_ms": "{ms} мс", "storage_check_unexpected": "Файл вернулся не таким, каким был записан.", "storage_check_read_blocked": "Этот браузер не может читать бакет напрямую (бакет не разрешает этот сайт).", diff --git a/i18n/locales/sv_SE.json b/i18n/locales/sv_SE.json index 937b2f5a..a9255459 100644 --- a/i18n/locales/sv_SE.json +++ b/i18n/locales/sv_SE.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze avvisar workerns nycklar, så filer som inte har cachats än går inte att läsa in. Kör installationen igen med nycklarna som panelen använder.", "cloudflare_worker_misconfigured": "Workern saknar sina bucket-inställningar. Kör installationen igen.", "cloudflare_worker_bucket_unreachable": "Workern når inte din bucket.", - "cloudflare_worker_bucket_ok": "Nycklarna godkända av Backblaze", "cloudflare_worker_bucket_rejected": "Nycklarna avvisade ({code})", "storage_check_section": "Lagringskontroll", "storage_check_description": "Skriver en testfil till din bucket och läser sedan tillbaka den i den här webbläsaren, på samma sätt som nedladdningar fungerar.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Väntar", "storage_check_running": "Pågår", "storage_check_skipped": "Hoppades över", + "storage_check_failed": "Misslyckades", + "storage_check_unverified": "Kontrollera själv", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Filen kom tillbaka annorlunda än det som skrevs.", "storage_check_read_blocked": "Den här webbläsaren kan inte läsa bucketen direkt (bucketen tillåter inte den här webbplatsen).", diff --git a/i18n/locales/tr_TR.json b/i18n/locales/tr_TR.json index c9f894b0..c0070765 100644 --- a/i18n/locales/tr_TR.json +++ b/i18n/locales/tr_TR.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze worker'ın anahtarlarını reddediyor, bu yüzden henüz önbelleğe alınmamış dosyalar yüklenemiyor. Kurulumu panelin kullandığı anahtarlarla yeniden çalıştırın.", "cloudflare_worker_misconfigured": "Worker'ın bucket ayarları eksik. Kurulumu yeniden çalıştırın.", "cloudflare_worker_bucket_unreachable": "Worker bucket'ınıza ulaşamıyor.", - "cloudflare_worker_bucket_ok": "Anahtarlar Backblaze tarafından kabul edildi", "cloudflare_worker_bucket_rejected": "Anahtarlar reddedildi ({code})", "storage_check_section": "Depolama kontrolü", "storage_check_description": "Bucket'ınıza bir test dosyası yazar, ardından indirmelerin çalıştığı şekilde bu tarayıcıda geri okur.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Bekliyor", "storage_check_running": "Çalışıyor", "storage_check_skipped": "Atlandı", + "storage_check_failed": "Başarısız", + "storage_check_unverified": "Elle kontrol edin", "storage_check_ms": "{ms} ms", "storage_check_unexpected": "Dosya yazılandan farklı döndü.", "storage_check_read_blocked": "Bu tarayıcı bucket'ı doğrudan okuyamıyor (bucket bu siteye izin vermiyor).", diff --git a/i18n/locales/uk_UA.json b/i18n/locales/uk_UA.json index 0b05f7ae..d8b76500 100644 --- a/i18n/locales/uk_UA.json +++ b/i18n/locales/uk_UA.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze відхиляє ключі воркера, тому файли, яких ще немає в кеші, не завантажуються. Запустіть налаштування знову з ключами, які використовує панель.", "cloudflare_worker_misconfigured": "У воркера немає налаштувань бакета. Запустіть налаштування знову.", "cloudflare_worker_bucket_unreachable": "Воркер не може під'єднатися до бакета.", - "cloudflare_worker_bucket_ok": "Backblaze прийняв ключі", "cloudflare_worker_bucket_rejected": "Ключі відхилено ({code})", "storage_check_section": "Перевірка сховища", "storage_check_description": "Записує тестовий файл у бакет, а потім читає його в цьому браузері, так само як працюють завантаження.", @@ -2325,6 +2324,8 @@ "storage_check_idle": "Очікування", "storage_check_running": "Виконується", "storage_check_skipped": "Пропущено", + "storage_check_failed": "Помилка", + "storage_check_unverified": "Перевірте вручну", "storage_check_ms": "{ms} мс", "storage_check_unexpected": "Файл повернувся не таким, яким його записали.", "storage_check_read_blocked": "Цей браузер не може читати бакет напряму (бакет не дозволяє цей сайт).", diff --git a/i18n/locales/zh_Hans.json b/i18n/locales/zh_Hans.json index 4dbda5c2..14837d8a 100644 --- a/i18n/locales/zh_Hans.json +++ b/i18n/locales/zh_Hans.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze 拒绝了 Worker 的密钥,尚未缓存的文件无法加载。请使用面板所用的密钥重新运行设置。", "cloudflare_worker_misconfigured": "Worker 缺少存储桶设置。请重新运行设置。", "cloudflare_worker_bucket_unreachable": "Worker 无法连接到存储桶。", - "cloudflare_worker_bucket_ok": "Backblaze 已接受密钥", "cloudflare_worker_bucket_rejected": "密钥被拒绝({code})", "storage_check_section": "存储检查", "storage_check_description": "向存储桶写入一个测试文件,然后像下载那样在此浏览器中读回。", @@ -2325,6 +2324,8 @@ "storage_check_idle": "等待中", "storage_check_running": "运行中", "storage_check_skipped": "已跳过", + "storage_check_failed": "失败", + "storage_check_unverified": "请手动检查", "storage_check_ms": "{ms} 毫秒", "storage_check_unexpected": "读回的文件与写入的内容不一致。", "storage_check_read_blocked": "此浏览器无法直接读取存储桶(存储桶不允许此网站)。", diff --git a/i18n/locales/zh_Hant.json b/i18n/locales/zh_Hant.json index 2316e967..8d9bcd0a 100644 --- a/i18n/locales/zh_Hant.json +++ b/i18n/locales/zh_Hant.json @@ -2308,7 +2308,6 @@ "cloudflare_worker_keys_rejected": "Backblaze 拒絕了 Worker 的金鑰,尚未快取的檔案無法載入。請使用面板所用的金鑰重新執行設定。", "cloudflare_worker_misconfigured": "Worker 缺少儲存桶設定。請重新執行設定。", "cloudflare_worker_bucket_unreachable": "Worker 無法連線到儲存桶。", - "cloudflare_worker_bucket_ok": "Backblaze 已接受金鑰", "cloudflare_worker_bucket_rejected": "金鑰遭拒({code})", "storage_check_section": "儲存空間檢查", "storage_check_description": "向儲存桶寫入一個測試檔案,然後像下載一樣在此瀏覽器中讀回。", @@ -2325,6 +2324,8 @@ "storage_check_idle": "等待中", "storage_check_running": "執行中", "storage_check_skipped": "已略過", + "storage_check_failed": "失敗", + "storage_check_unverified": "請手動檢查", "storage_check_ms": "{ms} 毫秒", "storage_check_unexpected": "讀回的檔案與寫入的內容不一致。", "storage_check_read_blocked": "此瀏覽器無法直接讀取儲存桶(儲存桶不允許此網站)。", diff --git a/tests/components/settings/StorageCheck.spec.ts b/tests/components/settings/StorageCheck.spec.ts index a185b83f..a079f3cd 100644 --- a/tests/components/settings/StorageCheck.spec.ts +++ b/tests/components/settings/StorageCheck.spec.ts @@ -30,6 +30,8 @@ const realFetch = globalThis.fetch; const stage = (wrapper: any, id: string) => wrapper.find(`[data-test="storage-check-${id}"]`); +const note = (wrapper: any, id: string) => + wrapper.find(`[data-test="storage-check-note-${id}"]`); async function runCheck(workerUrl: string | null) { useApplicationSettingsStore().settings = workerUrl @@ -83,6 +85,9 @@ describe("StorageCheck", () => { expect(stage(wrapper, "read").attributes("data-state")).toBe("ok"); expect(stage(wrapper, "edge").attributes("data-state")).toBe("ok"); expect(stage(wrapper, "edge").text()).toContain("Through cf.acme.gg"); + expect(wrapper.find('[data-test^="storage-check-note-"]').exists()).toBe( + false, + ); }); it("leaves out the edge stage without a worker", async () => { @@ -100,7 +105,8 @@ describe("StorageCheck", () => { const wrapper = await runCheck(null); expect(stage(wrapper, "write").attributes("data-state")).toBe("fail"); - expect(stage(wrapper, "write").text()).toContain("Access Denied"); + expect(stage(wrapper, "write").text()).toContain("Failed"); + expect(note(wrapper, "write").text()).toContain("Access Denied"); expect(stage(wrapper, "read").attributes("data-state")).toBe("skipped"); expect(readFile).not.toHaveBeenCalled(); }); @@ -111,7 +117,8 @@ describe("StorageCheck", () => { const wrapper = await runCheck(null); expect(stage(wrapper, "read").attributes("data-state")).toBe("manual"); - expect(stage(wrapper, "read").find("a").attributes("href")).toBe(TEST_FILE); + expect(stage(wrapper, "read").text()).toContain("Check by hand"); + expect(note(wrapper, "read").find("a").attributes("href")).toBe(TEST_FILE); }); it("fails the edge stage when Backblaze rejects the worker's keys", async () => { @@ -128,7 +135,7 @@ describe("StorageCheck", () => { const wrapper = await runCheck("https://cf.acme.gg"); expect(stage(wrapper, "edge").attributes("data-state")).toBe("fail"); - expect(stage(wrapper, "edge").text()).toContain( + expect(note(wrapper, "edge").text()).toContain( "Keys rejected (InvalidAccessKeyId)", ); }); From bee8b7ad2de8f89524563b961370dc11a2b5149b Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Mon, 28 Sep 2026 13:14:07 -0400 Subject: [PATCH 6/8] chore: signal bars and step circles, relay domain in env example --- .env-example | 2 +- components/settings/EdgeStatusPanel.vue | 37 ++++++++++---- components/settings/StorageCheck.vue | 66 +++++++++++-------------- 3 files changed, 58 insertions(+), 47 deletions(-) diff --git a/.env-example b/.env-example index 5ee8553a..14ea9b0a 100644 --- a/.env-example +++ b/.env-example @@ -4,7 +4,7 @@ HASURA_GRAPHQL_ADMIN_SECRET= NUXT_PUBLIC_WEB_DOMAIN=5stack.gg NUXT_PUBLIC_WS_DOMAIN=ws.5stack.gg NUXT_PUBLIC_API_DOMAIN=api.5stack.gg -NUXT_PUBLIC_RELAY_DOMAIN=relay.5stack.gg +NUXT_PUBLIC_RELAY_DOMAIN=tv.5stack.gg NUXT_PUBLIC_DEMOS_DOMAIN=demos.5stack.gg NUXT_PUBLIC_TYPESENSE_HOST=search.5stack.gg diff --git a/components/settings/EdgeStatusPanel.vue b/components/settings/EdgeStatusPanel.vue index c6374c52..3c1b71e1 100644 --- a/components/settings/EdgeStatusPanel.vue +++ b/components/settings/EdgeStatusPanel.vue @@ -25,40 +25,47 @@ const { locale } = useI18n(); const tones: Record< EdgeStatusState, - { rail: string; text: string; tint: string; dot: string } + { rail: string; text: string; tint: string; bar: string; lit: number } > = { online: { rail: "bg-success", text: "text-success", tint: "from-[hsl(var(--success)/0.08)]", - dot: "bg-success", + bar: "bg-success", + lit: 3, }, attention: { rail: "bg-warning", text: "text-warning", tint: "from-[hsl(var(--warning)/0.08)]", - dot: "bg-warning", + bar: "bg-warning", + lit: 2, }, offline: { rail: "bg-destructive", text: "text-destructive", tint: "from-[hsl(var(--destructive)/0.08)]", - dot: "bg-destructive", + bar: "bg-destructive", + lit: 1, }, checking: { rail: "bg-muted-foreground/30", text: "text-muted-foreground", tint: "from-muted/40", - dot: "bg-[hsl(var(--tac-amber))] motion-safe:animate-pulse", + bar: "bg-[hsl(var(--tac-amber))] motion-safe:animate-pulse", + lit: 3, }, idle: { rail: "bg-muted-foreground/30", text: "text-muted-foreground", tint: "from-muted/40", - dot: "border border-muted-foreground/70", + bar: "", + lit: 0, }, }; +const BAR_HEIGHTS = ["h-[5px]", "h-[8px]", "h-[11px]"]; + const tone = computed(() => tones[props.state]); const checkedTime = computed(() => @@ -83,12 +90,22 @@ const checkedTime = computed(() =>
- +