Files
umami/scripts/inject-missing-messages.mjs
T

1448 lines
56 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const messagesDir = join(__dirname, '..', 'public', 'intl', 'messages');
// Keys same in all languages (acronyms / technical terms)
const universal = {
label: {
aov: 'AOV',
arpu: 'ARPU',
cls: 'CLS',
fcp: 'FCP',
inp: 'INP',
lcp: 'LCP',
'replay-id': 'Replay ID',
slug: 'Slug',
ttfb: 'TTFB',
},
};
// Per-locale translations for the remaining 20 keys
const translations = {
'ar-SA': {
label: {
'block-selector': 'محدد الكتلة',
duration: 'المدة',
good: 'جيد',
'mask-level': 'مستوى القناع',
'max-duration': 'الحد الأقصى للمدة',
'needs-improvement': 'يحتاج إلى تحسين',
performance: 'الأداء',
play: 'تشغيل',
poor: 'ضعيف',
'recorded-at': 'سُجِّل في',
replay: 'إعادة التشغيل',
'replay-enabled': 'إعادة التشغيل مفعلة',
replays: 'إعادات التشغيل',
'retention-days': 'أيام الاحتفاظ',
'sample-rate': 'معدل أخذ العينات',
'sample-size': 'حجم العينة',
'select-component': 'اختر مكونًا',
},
message: {
'empty-dashboard': 'لوحة التحكم الخاصة بك فارغة. انقر فوق تحرير لإضافة مكونك الأول.',
'select-component-preview': 'اختر مكونًا للمعاينة',
'select-website-first': 'اختر موقعًا أولاً',
},
},
'be-BY': {
label: {
'block-selector': 'Выбар блока',
duration: 'Працягласць',
good: 'Добра',
'mask-level': 'Узровень маскіравання',
'max-duration': 'Максімальная працягласць',
'needs-improvement': 'Патрэбна паляпшэнне',
performance: 'Прадукцыйнасць',
play: 'Прайграць',
poor: 'Дрэнна',
'recorded-at': 'Запісана ў',
replay: 'Паўтор',
'replay-enabled': 'Паўтор уключаны',
replays: 'Паўторы',
'retention-days': 'Дні захоўвання',
'sample-rate': 'Частата выбаркі',
'sample-size': "Аб'ём выбаркі",
'select-component': 'Выберыце кампанент',
},
message: {
'empty-dashboard':
'Ваша панэль кіравання пустая. Націсніце Рэдагаваць, каб дадаць першы кампанент.',
'select-component-preview': 'Выберыце кампанент для прагляду',
'select-website-first': 'Спачатку выберыце сайт',
},
},
'bg-BG': {
label: {
'block-selector': 'Избор на блок',
duration: 'Продължителност',
good: 'Добро',
'mask-level': 'Ниво на маскиране',
'max-duration': 'Максимална продължителност',
'needs-improvement': 'Нуждае се от подобрение',
performance: 'Производителност',
play: 'Пусни',
poor: 'Слабо',
'recorded-at': 'Записано на',
replay: 'Повторение',
'replay-enabled': 'Повторението е активирано',
replays: 'Повторения',
'retention-days': 'Дни на съхранение',
'sample-rate': 'Честота на извадката',
'sample-size': 'Размер на извадката',
'select-component': 'Изберете компонент',
},
message: {
'empty-dashboard':
'Вашето табло е празно. Щракнете Редактиране, за да добавите първия си компонент.',
'select-component-preview': 'Изберете компонент за преглед',
'select-website-first': 'Първо изберете уебсайт',
},
},
'bn-BD': {
label: {
'block-selector': 'ব্লক নির্বাচক',
duration: 'সময়কাল',
good: 'ভালো',
'mask-level': 'মাস্ক স্তর',
'max-duration': 'সর্বোচ্চ সময়কাল',
'needs-improvement': 'উন্নতি প্রয়োজন',
performance: 'পারফরম্যান্স',
play: 'চালান',
poor: 'খারাপ',
'recorded-at': 'রেকর্ড করা হয়েছে',
replay: 'রিপ্লে',
'replay-enabled': 'রিপ্লে সক্রিয়',
replays: 'রিপ্লেসমূহ',
'retention-days': 'ধারণ দিন',
'sample-rate': 'নমুনার হার',
'sample-size': 'নমুনার আকার',
'select-component': 'উপাদান নির্বাচন করুন',
},
message: {
'empty-dashboard':
'আপনার ড্যাশবোর্ড খালি। প্রথম উপাদান যোগ করতে সম্পাদনা ক্লিক করুন।',
'select-component-preview': 'প্রিভিউয়ের জন্য একটি উপাদান নির্বাচন করুন',
'select-website-first': 'প্রথমে একটি ওয়েবসাইট নির্বাচন করুন',
},
},
'bs-BA': {
label: {
'block-selector': 'Odabir bloka',
duration: 'Trajanje',
good: 'Dobro',
'mask-level': 'Nivo maske',
'max-duration': 'Maksimalno trajanje',
'needs-improvement': 'Treba poboljšanje',
performance: 'Performanse',
play: 'Reprodukuj',
poor: 'Loše',
'recorded-at': 'Snimljeno u',
replay: 'Ponovna reprodukcija',
'replay-enabled': 'Ponovna reprodukcija omogućena',
replays: 'Ponovne reprodukcije',
'retention-days': 'Dani zadržavanja',
'sample-rate': 'Stopa uzorkovanja',
'sample-size': 'Veličina uzorka',
'select-component': 'Odaberite komponentu',
},
message: {
'empty-dashboard':
'Vaša kontrolna tabla je prazna. Kliknite Uredi da dodate prvu komponentu.',
'select-component-preview': 'Odaberite komponentu za pregled',
'select-website-first': 'Prvo odaberite web stranicu',
},
},
'ca-ES': {
label: {
'block-selector': 'Selector de bloc',
duration: 'Durada',
good: 'Bo',
'mask-level': 'Nivell de màscara',
'max-duration': 'Durada màxima',
'needs-improvement': 'Necessita millora',
performance: 'Rendiment',
play: 'Reprodueix',
poor: 'Deficient',
'recorded-at': 'Registrat a',
replay: 'Repetició',
'replay-enabled': 'Repetició activada',
replays: 'Repeticions',
'retention-days': 'Dies de retenció',
'sample-rate': 'Taxa de mostreig',
'sample-size': 'Mida de la mostra',
'select-component': 'Selecciona un component',
},
message: {
'empty-dashboard':
"El teu tauler és buit. Fes clic a Edita per afegir el teu primer component.",
'select-component-preview': 'Selecciona un component per previsualitzar',
'select-website-first': 'Primer selecciona un lloc web',
},
},
'cs-CZ': {
label: {
'block-selector': 'Výběr bloku',
duration: 'Trvání',
good: 'Dobré',
'mask-level': 'Úroveň masky',
'max-duration': 'Maximální trvání',
'needs-improvement': 'Potřebuje zlepšení',
performance: 'Výkon',
play: 'Přehrát',
poor: 'Špatné',
'recorded-at': 'Zaznamenáno v',
replay: 'Přehrávání',
'replay-enabled': 'Přehrávání povoleno',
replays: 'Přehrávání',
'retention-days': 'Dny uchování',
'sample-rate': 'Frekvence vzorkování',
'sample-size': 'Velikost vzorku',
'select-component': 'Vyberte komponentu',
},
message: {
'empty-dashboard':
'Váš řídicí panel je prázdný. Klikněte na Upravit a přidejte první komponentu.',
'select-component-preview': 'Vyberte komponentu pro náhled',
'select-website-first': 'Nejprve vyberte web',
},
},
'da-DK': {
label: {
'block-selector': 'Blokvælger',
duration: 'Varighed',
good: 'God',
'mask-level': 'Maskeniveau',
'max-duration': 'Maksimal varighed',
'needs-improvement': 'Behøver forbedring',
performance: 'Ydeevne',
play: 'Afspil',
poor: 'Dårlig',
'recorded-at': 'Optaget den',
replay: 'Afspilning',
'replay-enabled': 'Afspilning aktiveret',
replays: 'Afspilninger',
'retention-days': 'Opbevaringsdage',
'sample-rate': 'Samplingshastighed',
'sample-size': 'Stikprøvestørrelse',
'select-component': 'Vælg komponent',
},
message: {
'empty-dashboard':
'Dit dashboard er tomt. Klik på Rediger for at tilføje din første komponent.',
'select-component-preview': 'Vælg en komponent for at se forhåndsvisning',
'select-website-first': 'Vælg et websted først',
},
},
'de-CH': {
label: {
'block-selector': 'Blockauswahl',
duration: 'Dauer',
good: 'Gut',
'mask-level': 'Maskierungsstufe',
'max-duration': 'Maximale Dauer',
'needs-improvement': 'Verbesserungsbedarf',
performance: 'Leistung',
play: 'Abspielen',
poor: 'Schlecht',
'recorded-at': 'Aufgezeichnet am',
replay: 'Wiedergabe',
'replay-enabled': 'Wiedergabe aktiviert',
replays: 'Wiedergaben',
'retention-days': 'Aufbewahrungstage',
'sample-rate': 'Abtastrate',
'sample-size': 'Stichprobengrösse',
'select-component': 'Komponente auswählen',
},
message: {
'empty-dashboard':
'Ihr Dashboard ist leer. Klicken Sie auf Bearbeiten, um Ihre erste Komponente hinzuzufügen.',
'select-component-preview': 'Wählen Sie eine Komponente für die Vorschau',
'select-website-first': 'Wählen Sie zuerst eine Website',
},
},
'de-DE': {
label: {
'block-selector': 'Blockauswahl',
duration: 'Dauer',
good: 'Gut',
'mask-level': 'Maskierungsstufe',
'max-duration': 'Maximale Dauer',
'needs-improvement': 'Verbesserungsbedarf',
performance: 'Leistung',
play: 'Abspielen',
poor: 'Schlecht',
'recorded-at': 'Aufgezeichnet am',
replay: 'Wiedergabe',
'replay-enabled': 'Wiedergabe aktiviert',
replays: 'Wiedergaben',
'retention-days': 'Aufbewahrungstage',
'sample-rate': 'Abtastrate',
'sample-size': 'Stichprobengröße',
'select-component': 'Komponente auswählen',
},
message: {
'empty-dashboard':
'Ihr Dashboard ist leer. Klicken Sie auf Bearbeiten, um Ihre erste Komponente hinzuzufügen.',
'select-component-preview': 'Wählen Sie eine Komponente für die Vorschau',
'select-website-first': 'Wählen Sie zuerst eine Website',
},
},
'el-GR': {
label: {
'block-selector': 'Επιλογέας μπλοκ',
duration: 'Διάρκεια',
good: 'Καλό',
'mask-level': 'Επίπεδο μάσκας',
'max-duration': 'Μέγιστη διάρκεια',
'needs-improvement': 'Χρειάζεται βελτίωση',
performance: 'Απόδοση',
play: 'Αναπαραγωγή',
poor: 'Κακό',
'recorded-at': 'Καταγράφηκε στις',
replay: 'Επανάληψη',
'replay-enabled': 'Επανάληψη ενεργοποιημένη',
replays: 'Επαναλήψεις',
'retention-days': 'Ημέρες διατήρησης',
'sample-rate': 'Ρυθμός δειγματοληψίας',
'sample-size': 'Μέγεθος δείγματος',
'select-component': 'Επιλέξτε στοιχείο',
},
message: {
'empty-dashboard':
'Ο πίνακας ελέγχου σας είναι κενός. Κάντε κλικ στην Επεξεργασία για να προσθέσετε το πρώτο σας στοιχείο.',
'select-component-preview': 'Επιλέξτε ένα στοιχείο για προεπισκόπηση',
'select-website-first': 'Επιλέξτε πρώτα έναν ιστότοπο',
},
},
'en-GB': {
label: {
'block-selector': 'Block selector',
duration: 'Duration',
good: 'Good',
'mask-level': 'Mask level',
'max-duration': 'Max duration',
'needs-improvement': 'Needs improvement',
performance: 'Performance',
play: 'Play',
poor: 'Poor',
'recorded-at': 'Recorded at',
replay: 'Replay',
'replay-enabled': 'Replay enabled',
replays: 'Replays',
'retention-days': 'Retention days',
'sample-rate': 'Sample rate',
'sample-size': 'Sample size',
'select-component': 'Select component',
},
message: {
'empty-dashboard': 'Your dashboard is empty. Click Edit to add your first component.',
'select-component-preview': 'Select a component to preview',
'select-website-first': 'Select a website first',
},
},
'es-ES': {
label: {
'block-selector': 'Selector de bloque',
duration: 'Duración',
good: 'Bueno',
'mask-level': 'Nivel de máscara',
'max-duration': 'Duración máxima',
'needs-improvement': 'Necesita mejora',
performance: 'Rendimiento',
play: 'Reproducir',
poor: 'Deficiente',
'recorded-at': 'Registrado el',
replay: 'Repetición',
'replay-enabled': 'Repetición activada',
replays: 'Repeticiones',
'retention-days': 'Días de retención',
'sample-rate': 'Tasa de muestreo',
'sample-size': 'Tamaño de muestra',
'select-component': 'Seleccionar componente',
},
message: {
'empty-dashboard':
'Tu panel está vacío. Haz clic en Editar para añadir tu primer componente.',
'select-component-preview': 'Selecciona un componente para previsualizar',
'select-website-first': 'Selecciona un sitio web primero',
},
},
'fa-IR': {
label: {
'block-selector': 'انتخابگر بلوک',
duration: 'مدت',
good: 'خوب',
'mask-level': 'سطح ماسک',
'max-duration': 'حداکثر مدت',
'needs-improvement': 'نیاز به بهبود',
performance: 'عملکرد',
play: 'پخش',
poor: 'ضعیف',
'recorded-at': 'ثبت شده در',
replay: 'پخش مجدد',
'replay-enabled': 'پخش مجدد فعال',
replays: 'پخش‌های مجدد',
'retention-days': 'روزهای نگهداری',
'sample-rate': 'نرخ نمونه‌گیری',
'sample-size': 'اندازه نمونه',
'select-component': 'یک کامپوننت انتخاب کنید',
},
message: {
'empty-dashboard':
'داشبورد شما خالی است. روی ویرایش کلیک کنید تا اولین کامپوننت خود را اضافه کنید.',
'select-component-preview': 'یک کامپوننت برای پیش‌نمایش انتخاب کنید',
'select-website-first': 'ابتدا یک وب‌سایت انتخاب کنید',
},
},
'fi-FI': {
label: {
'block-selector': 'Lohkovalitsin',
duration: 'Kesto',
good: 'Hyvä',
'mask-level': 'Maskitaso',
'max-duration': 'Enimmäiskesto',
'needs-improvement': 'Tarvitsee parannusta',
performance: 'Suorituskyky',
play: 'Toista',
poor: 'Huono',
'recorded-at': 'Tallennettu',
replay: 'Toisto',
'replay-enabled': 'Toisto käytössä',
replays: 'Toistot',
'retention-days': 'Säilytyspäivät',
'sample-rate': 'Näytteenottotaajuus',
'sample-size': 'Otoskoko',
'select-component': 'Valitse komponentti',
},
message: {
'empty-dashboard':
'Koontinäyttösi on tyhjä. Napsauta Muokkaa lisätäksesi ensimmäisen komponentin.',
'select-component-preview': 'Valitse komponentti esikatselua varten',
'select-website-first': 'Valitse ensin verkkosivusto',
},
},
'fo-FO': {
label: {
'block-selector': 'Blokkveljari',
duration: 'Tíðarlongd',
good: 'Gott',
'mask-level': 'Maskustig',
'max-duration': 'Mesta tíðarlongd',
'needs-improvement': 'Tørvar at bætast',
performance: 'Effektivni',
play: 'Spæla',
poor: 'Dårligt',
'recorded-at': 'Upptikið tann',
replay: 'Uppspæling',
'replay-enabled': 'Uppspæling virkjað',
replays: 'Uppspælingar',
'retention-days': 'Geymingardagar',
'sample-rate': 'Samplingartiðindi',
'sample-size': 'Samplingarstødd',
'select-component': 'Vel eina íhlut',
},
message: {
'empty-dashboard':
'Stjórnarborðið títt er tómt. Trýst á Rætta fyri at leggja afturat fyrstu íhlut.',
'select-component-preview': 'Vel eina íhlut at forskoða',
'select-website-first': 'Vel fyrst eina heimasíðu',
},
},
'fr-FR': {
label: {
'block-selector': 'Sélecteur de bloc',
duration: 'Durée',
good: 'Bon',
'mask-level': 'Niveau de masque',
'max-duration': 'Durée maximale',
'needs-improvement': 'Doit être amélioré',
performance: 'Performance',
play: 'Lire',
poor: 'Mauvais',
'recorded-at': 'Enregistré le',
replay: 'Relecture',
'replay-enabled': 'Relecture activée',
replays: 'Relectures',
'retention-days': 'Jours de rétention',
'sample-rate': "Taux d'échantillonnage",
'sample-size': "Taille de l'échantillon",
'select-component': 'Sélectionner un composant',
},
message: {
'empty-dashboard':
'Votre tableau de bord est vide. Cliquez sur Modifier pour ajouter votre premier composant.',
'select-component-preview': 'Sélectionnez un composant pour le prévisualiser',
'select-website-first': "Sélectionnez d'abord un site web",
},
},
'ga-ES': {
label: {
'block-selector': 'Selector de bloque',
duration: 'Duración',
good: 'Bo',
'mask-level': 'Nivel de máscara',
'max-duration': 'Duración máxima',
'needs-improvement': 'Necesita mellora',
performance: 'Rendemento',
play: 'Reproducir',
poor: 'Deficiente',
'recorded-at': 'Rexistrado en',
replay: 'Reprodución',
'replay-enabled': 'Reprodución activada',
replays: 'Reproducións',
'retention-days': 'Días de retención',
'sample-rate': 'Taxa de mostraxe',
'sample-size': 'Tamaño da mostra',
'select-component': 'Seleccionar compoñente',
},
message: {
'empty-dashboard':
'O teu panel está baleiro. Fai clic en Editar para engadir o teu primeiro compoñente.',
'select-component-preview': 'Selecciona un compoñente para previsualizar',
'select-website-first': 'Selecciona primeiro un sitio web',
},
},
'he-IL': {
label: {
'block-selector': 'בוחר בלוק',
duration: 'משך',
good: 'טוב',
'mask-level': 'רמת מסיכה',
'max-duration': 'משך מקסימלי',
'needs-improvement': 'דרוש שיפור',
performance: 'ביצועים',
play: 'הפעל',
poor: 'גרוע',
'recorded-at': 'הוקלט ב',
replay: 'הקלטה חוזרת',
'replay-enabled': 'הקלטה חוזרת מופעלת',
replays: 'הקלטות חוזרות',
'retention-days': 'ימי שמירה',
'sample-rate': 'קצב דגימה',
'sample-size': 'גודל מדגם',
'select-component': 'בחר רכיב',
},
message: {
'empty-dashboard': 'לוח המחוונים שלך ריק. לחץ על עריכה כדי להוסיף את הרכיב הראשון שלך.',
'select-component-preview': 'בחר רכיב לתצוגה מקדימה',
'select-website-first': 'בחר תחילה אתר אינטרנט',
},
},
'hi-IN': {
label: {
'block-selector': 'ब्लॉक चयनकर्ता',
duration: 'अवधि',
good: 'अच्छा',
'mask-level': 'मास्क स्तर',
'max-duration': 'अधिकतम अवधि',
'needs-improvement': 'सुधार की आवश्यकता है',
performance: 'प्रदर्शन',
play: 'चलाएं',
poor: 'खराब',
'recorded-at': 'रिकॉर्ड किया गया',
replay: 'रीप्ले',
'replay-enabled': 'रीप्ले सक्षम',
replays: 'रीप्ले',
'retention-days': 'प्रतिधारण दिन',
'sample-rate': 'नमूना दर',
'sample-size': 'नमूना आकार',
'select-component': 'घटक चुनें',
},
message: {
'empty-dashboard':
'आपका डैशबोर्ड खाली है। अपना पहला घटक जोड़ने के लिए संपादित करें पर क्लिक करें।',
'select-component-preview': 'पूर्वावलोकन के लिए एक घटक चुनें',
'select-website-first': 'पहले एक वेबसाइट चुनें',
},
},
'hr-HR': {
label: {
'block-selector': 'Odabir bloka',
duration: 'Trajanje',
good: 'Dobro',
'mask-level': 'Razina maske',
'max-duration': 'Maksimalno trajanje',
'needs-improvement': 'Treba poboljšanje',
performance: 'Performanse',
play: 'Reproduciraj',
poor: 'Loše',
'recorded-at': 'Snimljeno u',
replay: 'Ponovna reprodukcija',
'replay-enabled': 'Ponovna reprodukcija omogućena',
replays: 'Ponovne reprodukcije',
'retention-days': 'Dani zadržavanja',
'sample-rate': 'Stopa uzorkovanja',
'sample-size': 'Veličina uzorka',
'select-component': 'Odaberite komponentu',
},
message: {
'empty-dashboard':
'Vaša nadzorna ploča je prazna. Kliknite Uredi da dodate prvu komponentu.',
'select-component-preview': 'Odaberite komponentu za pregled',
'select-website-first': 'Prvo odaberite web stranicu',
},
},
'hu-HU': {
label: {
'block-selector': 'Blokk kiválasztó',
duration: 'Időtartam',
good: 'Jó',
'mask-level': 'Maszkolási szint',
'max-duration': 'Maximális időtartam',
'needs-improvement': 'Fejlesztésre szorul',
performance: 'Teljesítmény',
play: 'Lejátszás',
poor: 'Gyenge',
'recorded-at': 'Rögzítve',
replay: 'Visszajátszás',
'replay-enabled': 'Visszajátszás engedélyezve',
replays: 'Visszajátszások',
'retention-days': 'Megőrzési napok',
'sample-rate': 'Mintavételi arány',
'sample-size': 'Mintaméret',
'select-component': 'Válasszon komponenst',
},
message: {
'empty-dashboard':
'Az irányítópult üres. Kattintson a Szerkesztés gombra az első komponens hozzáadásához.',
'select-component-preview': 'Válasszon egy komponenst az előnézethez',
'select-website-first': 'Először válasszon egy webhelyet',
},
},
'id-ID': {
label: {
'block-selector': 'Pemilih blok',
duration: 'Durasi',
good: 'Baik',
'mask-level': 'Tingkat masker',
'max-duration': 'Durasi maksimal',
'needs-improvement': 'Perlu perbaikan',
performance: 'Kinerja',
play: 'Putar',
poor: 'Buruk',
'recorded-at': 'Direkam pada',
replay: 'Pemutaran ulang',
'replay-enabled': 'Pemutaran ulang diaktifkan',
replays: 'Pemutaran ulang',
'retention-days': 'Hari penyimpanan',
'sample-rate': 'Laju sampel',
'sample-size': 'Ukuran sampel',
'select-component': 'Pilih komponen',
},
message: {
'empty-dashboard': 'Dasbor Anda kosong. Klik Edit untuk menambahkan komponen pertama Anda.',
'select-component-preview': 'Pilih komponen untuk pratinjau',
'select-website-first': 'Pilih situs web terlebih dahulu',
},
},
'it-IT': {
label: {
'block-selector': 'Selettore di blocco',
duration: 'Durata',
good: 'Buono',
'mask-level': 'Livello di maschera',
'max-duration': 'Durata massima',
'needs-improvement': 'Necessita miglioramento',
performance: 'Prestazioni',
play: 'Riproduci',
poor: 'Scarso',
'recorded-at': 'Registrato il',
replay: 'Replay',
'replay-enabled': 'Replay abilitato',
replays: 'Replay',
'retention-days': 'Giorni di conservazione',
'sample-rate': 'Frequenza di campionamento',
'sample-size': 'Dimensione del campione',
'select-component': 'Seleziona componente',
},
message: {
'empty-dashboard':
'La tua dashboard è vuota. Fai clic su Modifica per aggiungere il tuo primo componente.',
'select-component-preview': "Seleziona un componente per l'anteprima",
'select-website-first': 'Seleziona prima un sito web',
},
},
'ja-JP': {
label: {
'block-selector': 'ブロックセレクター',
duration: '継続時間',
good: '良好',
'mask-level': 'マスクレベル',
'max-duration': '最大継続時間',
'needs-improvement': '改善が必要',
performance: 'パフォーマンス',
play: '再生',
poor: '不良',
'recorded-at': '記録日時',
replay: 'リプレイ',
'replay-enabled': 'リプレイを有効化',
replays: 'リプレイ',
'retention-days': '保存期間',
'sample-rate': 'サンプリングレート',
'sample-size': 'サンプルサイズ',
'select-component': 'コンポーネントを選択',
},
message: {
'empty-dashboard':
'ダッシュボードは空です。編集をクリックして最初のコンポーネントを追加してください。',
'select-component-preview': 'プレビューするコンポーネントを選択してください',
'select-website-first': '最初にウェブサイトを選択してください',
},
},
'km-KH': {
label: {
'block-selector': 'ឧបករណ៍ជ្រើសរើសប្លុក',
duration: 'រយៈពេល',
good: 'ល្អ',
'mask-level': 'កម្រិតម៉ាស',
'max-duration': 'រយៈពេលអតិបរមា',
'needs-improvement': 'ត្រូវការកែប្រែ',
performance: 'ប្រសិទ្ធភាព',
play: 'លេង',
poor: 'ខ្សោយ',
'recorded-at': 'ថត​នៅ',
replay: 'ចាក់ឡើងវិញ',
'replay-enabled': 'បើកការចាក់ឡើងវិញ',
replays: 'ការចាក់ឡើងវិញ',
'retention-days': 'ថ្ងៃរក្សាទុក',
'sample-rate': 'អត្រាគំរូ',
'sample-size': 'ទំហំគំរូ',
'select-component': 'ជ្រើសរើសធាតុ',
},
message: {
'empty-dashboard':
'ផ្ទាំងគ្រប់គ្រងរបស់អ្នកទទេ។ ចុចកែសម្រួលដើម្បីបន្ថែមធាតុដំបូងរបស់អ្នក។',
'select-component-preview': 'ជ្រើសរើសធាតុមួយដើម្បីមើលជាមុន',
'select-website-first': 'ជ្រើសរើសគេហទំព័រជាមុន',
},
},
'ko-KR': {
label: {
'block-selector': '블록 선택기',
duration: '재생 시간',
good: '좋음',
'mask-level': '마스크 수준',
'max-duration': '최대 재생 시간',
'needs-improvement': '개선 필요',
performance: '성능',
play: '재생',
poor: '나쁨',
'recorded-at': '기록 시간',
replay: '다시보기',
'replay-enabled': '다시보기 활성화',
replays: '다시보기',
'retention-days': '보존 기간',
'sample-rate': '샘플링 비율',
'sample-size': '샘플 크기',
'select-component': '컴포넌트 선택',
},
message: {
'empty-dashboard':
'대시보드가 비어 있습니다. 편집을 클릭하여 첫 번째 구성 요소를 추가하세요.',
'select-component-preview': '미리 볼 컴포넌트를 선택하세요',
'select-website-first': '먼저 웹사이트를 선택하세요',
},
},
'lt-LT': {
label: {
'block-selector': 'Bloko pasirinkiklis',
duration: 'Trukmė',
good: 'Gerai',
'mask-level': 'Maskavimo lygis',
'max-duration': 'Maksimali trukmė',
'needs-improvement': 'Reikia tobulinti',
performance: 'Veikimas',
play: 'Leisti',
poor: 'Blogai',
'recorded-at': 'Įrašyta',
replay: 'Pakartojimas',
'replay-enabled': 'Pakartojimas įjungtas',
replays: 'Pakartojimai',
'retention-days': 'Saugojimo dienos',
'sample-rate': 'Imties dažnis',
'sample-size': 'Imties dydis',
'select-component': 'Pasirinkite komponentą',
},
message: {
'empty-dashboard':
'Jūsų prietaisų skydelis tuščias. Spustelėkite Redaguoti, kad pridėtumėte pirmąjį komponentą.',
'select-component-preview': 'Pasirinkite komponentą peržiūrai',
'select-website-first': 'Pirmiausia pasirinkite svetainę',
},
},
'mn-MN': {
label: {
'block-selector': 'Блок сонгогч',
duration: 'Хугацаа',
good: 'Сайн',
'mask-level': 'Маскийн түвшин',
'max-duration': 'Хамгийн их хугацаа',
'needs-improvement': 'Сайжруулалт шаардлагатай',
performance: 'Гүйцэтгэл',
play: 'Тоглуулах',
poor: 'Муу',
'recorded-at': 'Бичигдсэн огноо',
replay: 'Дахин тоглуулах',
'replay-enabled': 'Дахин тоглуулах идэвхжүүлсэн',
replays: 'Дахин тоглуулах',
'retention-days': 'Хадгалалтын өдрүүд',
'sample-rate': 'Дээжлэлтийн хурд',
'sample-size': 'Дээжний хэмжээ',
'select-component': 'Бүрэлдэхүүн хэсэг сонгох',
},
message: {
'empty-dashboard':
'Таны хяналтын самбар хоосон байна. Эхний бүрэлдэхүүн хэсгийг нэмэхийн тулд Засах дарна уу.',
'select-component-preview': 'Урьдчилан харахын тулд бүрэлдэхүүн хэсэг сонгоно уу',
'select-website-first': 'Эхлээд вэб сайт сонгоно уу',
},
},
'ms-MY': {
label: {
'block-selector': 'Pemilih blok',
duration: 'Tempoh',
good: 'Baik',
'mask-level': 'Tahap pelindung',
'max-duration': 'Tempoh maksimum',
'needs-improvement': 'Perlu penambahbaikan',
performance: 'Prestasi',
play: 'Main',
poor: 'Lemah',
'recorded-at': 'Direkodkan pada',
replay: 'Main semula',
'replay-enabled': 'Main semula diaktifkan',
replays: 'Main semula',
'retention-days': 'Hari penyimpanan',
'sample-rate': 'Kadar pensampelan',
'sample-size': 'Saiz sampel',
'select-component': 'Pilih komponen',
},
message: {
'empty-dashboard':
'Papan pemuka anda kosong. Klik Edit untuk menambah komponen pertama anda.',
'select-component-preview': 'Pilih komponen untuk pratonton',
'select-website-first': 'Pilih laman web dahulu',
},
},
'my-MM': {
label: {
'block-selector': 'ဘလောက် ရွေးချယ်မှု',
duration: 'ကြာချိန်',
good: 'ကောင်း',
'mask-level': 'နှုတ်ဖုံးအဆင့်',
'max-duration': 'အများဆုံး ကြာချိန်',
'needs-improvement': 'တိုးတက်မှု လိုအပ်',
performance: 'စွမ်းဆောင်ရည်',
play: 'ဖွင့်မည်',
poor: 'ညံ့',
'recorded-at': 'မှတ်တမ်းတင်ချိန်',
replay: 'ပြန်ဖွင့်ခြင်း',
'replay-enabled': 'ပြန်ဖွင့်ခြင်း ဖွင့်ထားသည်',
replays: 'ပြန်ဖွင့်ခြင်းများ',
'retention-days': 'သိမ်းဆည်းရက်',
'sample-rate': 'နမူနာနှုန်း',
'sample-size': 'နမူနာအရွယ်အစား',
'select-component': 'အစိတ်အပိုင်း ရွေးချယ်ပါ',
},
message: {
'empty-dashboard':
'သင်၏ ဒက်ရ်ဘုတ် ဗလာဖြစ်နေသည်။ ပထမဆုံး အစိတ်အပိုင်း ထည့်ရန် တည်းဖြတ်ကို နှိပ်ပါ။',
'select-component-preview': 'အစိတ်အပိုင်းတစ်ခု ရွေးချယ်၍ ကြိုကြည့်ပါ',
'select-website-first': 'ဦးစွာ ဝဘ်ဆိုက်တစ်ခု ရွေးချယ်ပါ',
},
},
'nb-NO': {
label: {
'block-selector': 'Blokkvelger',
duration: 'Varighet',
good: 'God',
'mask-level': 'Maskenivå',
'max-duration': 'Maksimal varighet',
'needs-improvement': 'Trenger forbedring',
performance: 'Ytelse',
play: 'Spill av',
poor: 'Dårlig',
'recorded-at': 'Registrert den',
replay: 'Avspilling',
'replay-enabled': 'Avspilling aktivert',
replays: 'Avspillinger',
'retention-days': 'Oppbevaringsdager',
'sample-rate': 'Samplingsfrekvens',
'sample-size': 'Utvalgsstørrelse',
'select-component': 'Velg komponent',
},
message: {
'empty-dashboard':
'Dashbordet ditt er tomt. Klikk Rediger for å legge til din første komponent.',
'select-component-preview': 'Velg en komponent for forhåndsvisning',
'select-website-first': 'Velg et nettsted først',
},
},
'nl-NL': {
label: {
'block-selector': 'Blokselectie',
duration: 'Duur',
good: 'Goed',
'mask-level': 'Maskeerniveau',
'max-duration': 'Maximale duur',
'needs-improvement': 'Verbetering nodig',
performance: 'Prestaties',
play: 'Afspelen',
poor: 'Slecht',
'recorded-at': 'Opgenomen op',
replay: 'Herhaling',
'replay-enabled': 'Herhaling ingeschakeld',
replays: 'Herhalingen',
'retention-days': 'Bewaardagen',
'sample-rate': 'Bemonsteringsfrequentie',
'sample-size': 'Steekproefgrootte',
'select-component': 'Component selecteren',
},
message: {
'empty-dashboard':
'Uw dashboard is leeg. Klik op Bewerken om uw eerste component toe te voegen.',
'select-component-preview': 'Selecteer een component voor een voorvertoning',
'select-website-first': 'Selecteer eerst een website',
},
},
'pl-PL': {
label: {
'block-selector': 'Selektor bloków',
duration: 'Czas trwania',
good: 'Dobrze',
'mask-level': 'Poziom maski',
'max-duration': 'Maksymalny czas trwania',
'needs-improvement': 'Wymaga poprawy',
performance: 'Wydajność',
play: 'Odtwórz',
poor: 'Słabo',
'recorded-at': 'Nagrano o',
replay: 'Odtwarzanie',
'replay-enabled': 'Odtwarzanie włączone',
replays: 'Odtwarzania',
'retention-days': 'Dni przechowywania',
'sample-rate': 'Częstotliwość próbkowania',
'sample-size': 'Rozmiar próbki',
'select-component': 'Wybierz komponent',
},
message: {
'empty-dashboard': 'Twój pulpit jest pusty. Kliknij Edytuj, aby dodać pierwszy komponent.',
'select-component-preview': 'Wybierz komponent do podglądu',
'select-website-first': 'Najpierw wybierz stronę internetową',
},
},
'pt-BR': {
label: {
'block-selector': 'Seletor de bloco',
duration: 'Duração',
good: 'Bom',
'mask-level': 'Nível de máscara',
'max-duration': 'Duração máxima',
'needs-improvement': 'Precisa melhorar',
performance: 'Desempenho',
play: 'Reproduzir',
poor: 'Ruim',
'recorded-at': 'Registrado em',
replay: 'Reprodução',
'replay-enabled': 'Reprodução habilitada',
replays: 'Reproduções',
'retention-days': 'Dias de retenção',
'sample-rate': 'Taxa de amostragem',
'sample-size': 'Tamanho da amostra',
'select-component': 'Selecionar componente',
},
message: {
'empty-dashboard':
'Seu painel está vazio. Clique em Editar para adicionar seu primeiro componente.',
'select-component-preview': 'Selecione um componente para visualizar',
'select-website-first': 'Selecione um site primeiro',
},
},
'pt-PT': {
label: {
'block-selector': 'Seletor de bloco',
duration: 'Duração',
good: 'Bom',
'mask-level': 'Nível de máscara',
'max-duration': 'Duração máxima',
'needs-improvement': 'Precisa de melhoria',
performance: 'Desempenho',
play: 'Reproduzir',
poor: 'Mau',
'recorded-at': 'Registado em',
replay: 'Reprodução',
'replay-enabled': 'Reprodução ativada',
replays: 'Reproduções',
'retention-days': 'Dias de retenção',
'sample-rate': 'Taxa de amostragem',
'sample-size': 'Tamanho da amostra',
'select-component': 'Selecionar componente',
},
message: {
'empty-dashboard':
'O seu painel está vazio. Clique em Editar para adicionar o seu primeiro componente.',
'select-component-preview': 'Selecione um componente para pré-visualizar',
'select-website-first': 'Selecione primeiro um site',
},
},
'ro-RO': {
label: {
'block-selector': 'Selector de bloc',
duration: 'Durată',
good: 'Bun',
'mask-level': 'Nivel mască',
'max-duration': 'Durată maximă',
'needs-improvement': 'Are nevoie de îmbunătățiri',
performance: 'Performanță',
play: 'Redă',
poor: 'Slab',
'recorded-at': 'Înregistrat la',
replay: 'Reluare',
'replay-enabled': 'Reluare activată',
replays: 'Reluări',
'retention-days': 'Zile de păstrare',
'sample-rate': 'Rată de eșantionare',
'sample-size': 'Dimensiunea eșantionului',
'select-component': 'Selectați componenta',
},
message: {
'empty-dashboard':
'Tabloul de bord este gol. Faceți clic pe Editare pentru a adăuga primul component.',
'select-component-preview': 'Selectați o componentă pentru previzualizare',
'select-website-first': 'Selectați mai întâi un site web',
},
},
'ru-RU': {
label: {
'block-selector': 'Выбор блока',
duration: 'Длительность',
good: 'Хорошо',
'mask-level': 'Уровень маскировки',
'max-duration': 'Максимальная длительность',
'needs-improvement': 'Требует улучшения',
performance: 'Производительность',
play: 'Воспроизвести',
poor: 'Плохо',
'recorded-at': 'Записано',
replay: 'Запись сессии',
'replay-enabled': 'Запись сессий включена',
replays: 'Записи сессий',
'retention-days': 'Дни хранения',
'sample-rate': 'Частота выборки',
'sample-size': 'Размер выборки',
'select-component': 'Выберите компонент',
},
message: {
'empty-dashboard':
'Ваша панель управления пуста. Нажмите Изменить, чтобы добавить первый компонент.',
'select-component-preview': 'Выберите компонент для предпросмотра',
'select-website-first': 'Сначала выберите сайт',
},
},
'si-LK': {
label: {
'block-selector': 'කොටස් තෝරනය',
duration: 'කාලය',
good: 'හොඳ',
'mask-level': 'මාස් මට්ටම',
'max-duration': 'උපරිම කාලය',
'needs-improvement': 'වැඩිදියුණු කිරීම අවශ්‍ය',
performance: 'කාර්යක්ෂමතාව',
play: 'ධාවනය කරන්න',
poor: 'දුර්වල',
'recorded-at': 'පටිගත කළේ',
replay: 'නැවත ධාවනය',
'replay-enabled': 'නැවත ධාවනය සක්‍රිය',
replays: 'නැවත ධාවනයන්',
'retention-days': 'රඳවා ගැනීමේ දින',
'sample-rate': 'සාම්පල් අනුපාතය',
'sample-size': 'සාම්පල් ප්‍රමාණය',
'select-component': 'කොටසක් තෝරන්න',
},
message: {
'empty-dashboard':
'ඔබේ ඩැෂ්බෝඩ් හිස් ය. ඔබේ පළමු කොටස එක් කිරීමට සංස්කරණය ක්ලික් කරන්න.',
'select-component-preview': 'පෙරදසුනක් සඳහා කොටසක් තෝරන්න',
'select-website-first': 'පළමුව වෙබ් අඩවියක් තෝරන්න',
},
},
'sk-SK': {
label: {
'block-selector': 'Výber bloku',
duration: 'Trvanie',
good: 'Dobré',
'mask-level': 'Úroveň masky',
'max-duration': 'Maximálne trvanie',
'needs-improvement': 'Vyžaduje zlepšenie',
performance: 'Výkon',
play: 'Prehrať',
poor: 'Zlé',
'recorded-at': 'Zaznamenané',
replay: 'Prehrávanie',
'replay-enabled': 'Prehrávanie povolené',
replays: 'Prehrávanie',
'retention-days': 'Dni uchovávania',
'sample-rate': 'Frekvencia vzorkovania',
'sample-size': 'Veľkosť vzorky',
'select-component': 'Vyberte komponent',
},
message: {
'empty-dashboard':
'Váš dashboard je prázdny. Kliknite na Upraviť a pridajte prvý komponent.',
'select-component-preview': 'Vyberte komponent na náhľad',
'select-website-first': 'Najprv vyberte webovú stránku',
},
},
'sl-SI': {
label: {
'block-selector': 'Izbirnik blokov',
duration: 'Trajanje',
good: 'Dobro',
'mask-level': 'Raven maske',
'max-duration': 'Največje trajanje',
'needs-improvement': 'Potrebuje izboljšave',
performance: 'Zmogljivost',
play: 'Predvajaj',
poor: 'Slabo',
'recorded-at': 'Zabeleženo ob',
replay: 'Predvajanje',
'replay-enabled': 'Predvajanje omogočeno',
replays: 'Predvajanja',
'retention-days': 'Dni hrambe',
'sample-rate': 'Hitrost vzorčenja',
'sample-size': 'Velikost vzorca',
'select-component': 'Izberite komponento',
},
message: {
'empty-dashboard':
'Vaša nadzorna plošča je prazna. Kliknite Uredi, da dodate svojo prvo komponento.',
'select-component-preview': 'Izberite komponento za predogled',
'select-website-first': 'Najprej izberite spletno mesto',
},
},
'sv-SE': {
label: {
'block-selector': 'Blockväljare',
duration: 'Varaktighet',
good: 'Bra',
'mask-level': 'Masknivå',
'max-duration': 'Maximal varaktighet',
'needs-improvement': 'Behöver förbättring',
performance: 'Prestanda',
play: 'Spela upp',
poor: 'Dålig',
'recorded-at': 'Registrerad den',
replay: 'Uppspelning',
'replay-enabled': 'Uppspelning aktiverad',
replays: 'Uppspelningar',
'retention-days': 'Lagringsdagar',
'sample-rate': 'Samplingshastighet',
'sample-size': 'Urvalsstorlek',
'select-component': 'Välj komponent',
},
message: {
'empty-dashboard':
'Din instrumentpanel är tom. Klicka på Redigera för att lägga till din första komponent.',
'select-component-preview': 'Välj en komponent för att förhandsgranska',
'select-website-first': 'Välj en webbplats först',
},
},
'ta-IN': {
label: {
'block-selector': 'தொகுதி தேர்வி',
duration: 'கால அளவு',
good: 'நல்லது',
'mask-level': 'முகமூடி நிலை',
'max-duration': 'அதிகபட்ச கால அளவு',
'needs-improvement': 'மேம்பாடு தேவை',
performance: 'செயல்திறன்',
play: 'இயக்கு',
poor: 'மோசம்',
'recorded-at': 'பதிவுசெய்த நேரம்',
replay: 'மறுபடியும் இயக்கு',
'replay-enabled': 'மறுபடியும் இயக்கு இயக்கப்பட்டது',
replays: 'மறுபடியும் இயக்குதல்கள்',
'retention-days': 'தக்கவைப்பு நாட்கள்',
'sample-rate': 'மாதிரி விகிதம்',
'sample-size': 'மாதிரி அளவு',
'select-component': 'ஒரு கூறு தேர்ந்தெடுக்கவும்',
},
message: {
'empty-dashboard':
'உங்கள் டாஷ்போர்டு காலியாக உள்ளது. உங்கள் முதல் கூறை சேர்க்க திருத்து கிளிக் செய்யுங்கள்.',
'select-component-preview': 'முன்னோட்டம் பார்க்க ஒரு கூறு தேர்ந்தெடுக்கவும்',
'select-website-first': 'முதலில் ஒரு வலைத்தளம் தேர்ந்தெடுக்கவும்',
},
},
'th-TH': {
label: {
'block-selector': 'ตัวเลือกบล็อก',
duration: 'ระยะเวลา',
good: 'ดี',
'mask-level': 'ระดับมาสก์',
'max-duration': 'ระยะเวลาสูงสุด',
'needs-improvement': 'ต้องปรับปรุง',
performance: 'ประสิทธิภาพ',
play: 'เล่น',
poor: 'แย่',
'recorded-at': 'บันทึกเมื่อ',
replay: 'เล่นซ้ำ',
'replay-enabled': 'เปิดใช้งานการเล่นซ้ำ',
replays: 'การเล่นซ้ำ',
'retention-days': 'วันที่เก็บข้อมูล',
'sample-rate': 'อัตราการสุ่มตัวอย่าง',
'sample-size': 'ขนาดตัวอย่าง',
'select-component': 'เลือกส่วนประกอบ',
},
message: {
'empty-dashboard': 'แดชบอร์ดของคุณว่างเปล่า คลิกแก้ไขเพื่อเพิ่มส่วนประกอบแรก',
'select-component-preview': 'เลือกส่วนประกอบเพื่อดูตัวอย่าง',
'select-website-first': 'เลือกเว็บไซต์ก่อน',
},
},
'tr-TR': {
label: {
'block-selector': 'Blok seçici',
duration: 'Süre',
good: 'İyi',
'mask-level': 'Maske seviyesi',
'max-duration': 'Maksimum süre',
'needs-improvement': 'İyileştirme gerekiyor',
performance: 'Performans',
play: 'Oynat',
poor: 'Kötü',
'recorded-at': 'Kaydedildi',
replay: 'Tekrar oynatma',
'replay-enabled': 'Tekrar oynatma etkin',
replays: 'Tekrar oynatmalar',
'retention-days': 'Saklama günleri',
'sample-rate': 'Örnekleme hızı',
'sample-size': 'Örneklem boyutu',
'select-component': 'Bileşen seçin',
},
message: {
'empty-dashboard':
"Gösterge paneliniz boş. İlk bileşeninizi eklemek için Düzenle'ye tıklayın.",
'select-component-preview': 'Önizleme için bir bileşen seçin',
'select-website-first': 'Önce bir web sitesi seçin',
},
},
'uk-UA': {
label: {
'block-selector': 'Вибір блоку',
duration: 'Тривалість',
good: 'Добре',
'mask-level': 'Рівень маскування',
'max-duration': 'Максимальна тривалість',
'needs-improvement': 'Потребує покращення',
performance: 'Продуктивність',
play: 'Відтворити',
poor: 'Погано',
'recorded-at': 'Записано о',
replay: 'Відтворення',
'replay-enabled': 'Відтворення увімкнено',
replays: 'Відтворення',
'retention-days': 'Дні зберігання',
'sample-rate': 'Частота вибірки',
'sample-size': 'Розмір вибірки',
'select-component': 'Виберіть компонент',
},
message: {
'empty-dashboard':
'Ваша панель інструментів порожня. Натисніть Редагувати, щоб додати перший компонент.',
'select-component-preview': 'Виберіть компонент для попереднього перегляду',
'select-website-first': 'Спочатку виберіть веб-сайт',
},
},
'ur-PK': {
label: {
'block-selector': 'بلاک منتخب کنندہ',
duration: 'مدت',
good: 'اچھا',
'mask-level': 'ماسک کی سطح',
'max-duration': 'زیادہ سے زیادہ مدت',
'needs-improvement': 'بہتری کی ضرورت ہے',
performance: 'کارکردگی',
play: 'چلائیں',
poor: 'خراب',
'recorded-at': 'ریکارڈ کیا گیا',
replay: 'دوبارہ چلائیں',
'replay-enabled': 'دوبارہ چلانا فعال',
replays: 'دوبارہ چلانے',
'retention-days': 'برقراری کے دن',
'sample-rate': 'نمونہ کی شرح',
'sample-size': 'نمونے کا حجم',
'select-component': 'اجزاء منتخب کریں',
},
message: {
'empty-dashboard':
'آپ کا ڈیش بورڈ خالی ہے۔ اپنا پہلا جزو شامل کرنے کے لیے ترمیم پر کلک کریں۔',
'select-component-preview': 'پیش نظارہ کے لیے ایک جزو منتخب کریں',
'select-website-first': 'پہلے ایک ویب سائٹ منتخب کریں',
},
},
'uz-UZ': {
label: {
'block-selector': 'Blok tanlash',
duration: 'Davomiylik',
good: 'Yaxshi',
'mask-level': 'Niqob darajasi',
'max-duration': 'Maksimal davomiylik',
'needs-improvement': 'Yaxshilash kerak',
performance: 'Ishlash',
play: 'Ijro etish',
poor: 'Yomon',
'recorded-at': 'Yozib olingan',
replay: 'Qayta ijro',
'replay-enabled': 'Qayta ijro yoqilgan',
replays: 'Qayta ijrolar',
'retention-days': 'Saqlash kunlari',
'sample-rate': 'Namuna olish tezligi',
'sample-size': 'Namuna hajmi',
'select-component': 'Komponent tanlash',
},
message: {
'empty-dashboard':
"Sizning boshqaruv panelingiz bo'sh. Birinchi komponentni qo'shish uchun Tahrirlash tugmasini bosing.",
'select-component-preview': "Ko'rib chiqish uchun komponent tanlang",
'select-website-first': 'Avval veb-sayt tanlang',
},
},
'vi-VN': {
label: {
'block-selector': 'Bộ chọn khối',
duration: 'Thời lượng',
good: 'Tốt',
'mask-level': 'Mức che',
'max-duration': 'Thời lượng tối đa',
'needs-improvement': 'Cần cải thiện',
performance: 'Hiệu suất',
play: 'Phát',
poor: 'Kém',
'recorded-at': 'Được ghi vào',
replay: 'Phát lại',
'replay-enabled': 'Phát lại được bật',
replays: 'Phát lại',
'retention-days': 'Ngày lưu trữ',
'sample-rate': 'Tỷ lệ mẫu',
'sample-size': 'Kích thước mẫu',
'select-component': 'Chọn thành phần',
},
message: {
'empty-dashboard':
'Bảng điều khiển của bạn đang trống. Nhấp Chỉnh sửa để thêm thành phần đầu tiên.',
'select-component-preview': 'Chọn một thành phần để xem trước',
'select-website-first': 'Chọn một trang web trước',
},
},
'zh-CN': {
label: {
'block-selector': '块选择器',
duration: '持续时间',
good: '良好',
'mask-level': '遮罩级别',
'max-duration': '最大持续时间',
'needs-improvement': '需要改进',
performance: '性能',
play: '播放',
poor: '较差',
'recorded-at': '录制于',
replay: '回放',
'replay-enabled': '回放已启用',
replays: '回放',
'retention-days': '保留天数',
'sample-rate': '采样率',
'sample-size': '样本量',
'select-component': '选择组件',
},
message: {
'empty-dashboard': '您的仪表板为空。点击编辑以添加您的第一个组件。',
'select-component-preview': '选择一个组件进行预览',
'select-website-first': '请先选择一个网站',
},
},
'zh-TW': {
label: {
'block-selector': '區塊選擇器',
duration: '持續時間',
good: '良好',
'mask-level': '遮罩層級',
'max-duration': '最大持續時間',
'needs-improvement': '需要改善',
performance: '效能',
play: '播放',
poor: '較差',
'recorded-at': '錄製於',
replay: '回放',
'replay-enabled': '回放已啟用',
replays: '回放',
'retention-days': '保留天數',
'sample-rate': '取樣率',
'sample-size': '樣本量',
'select-component': '選擇元件',
},
message: {
'empty-dashboard': '您的儀表板為空。點擊編輯以新增您的第一個元件。',
'select-component-preview': '選擇一個元件進行預覽',
'select-website-first': '請先選擇一個網站',
},
},
};
function insertAlphabetically(obj, newEntries) {
const merged = { ...obj, ...newEntries };
return Object.fromEntries(Object.entries(merged).sort(([a], [b]) => a.localeCompare(b)));
}
const files = readdirSync(messagesDir).filter(
f => f.endsWith('.json') && f !== 'en-US.json',
);
let updated = 0;
for (const fname of files) {
const locale = fname.replace('.json', '');
const filePath = join(messagesDir, fname);
const data = JSON.parse(readFileSync(filePath, 'utf8'));
const localeTranslations = translations[locale] || {};
// Merge universal + locale-specific label entries
const newLabelEntries = {
...universal.label,
...(localeTranslations.label || {}),
};
// Merge message entries
const newMessageEntries = localeTranslations.message || {};
// Only add keys that are actually missing
const missingLabels = Object.fromEntries(
Object.entries(newLabelEntries).filter(([k]) => !(k in (data.label || {}))),
);
const missingMessages = Object.fromEntries(
Object.entries(newMessageEntries).filter(([k]) => !(k in (data.message || {}))),
);
if (Object.keys(missingLabels).length === 0 && Object.keys(missingMessages).length === 0) {
continue;
}
if (Object.keys(missingLabels).length > 0) {
data.label = insertAlphabetically(data.label || {}, missingLabels);
}
if (Object.keys(missingMessages).length > 0) {
data.message = insertAlphabetically(data.message || {}, missingMessages);
}
writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', 'utf8');
console.log(`✓ ${fname}: added ${Object.keys(missingLabels).length} labels, ${Object.keys(missingMessages).length} messages`);
updated++;
}
console.log(`\nDone. Updated ${updated} files.`);