diff --git a/package-lock.json b/package-lock.json index b0e848b..1e4e817 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "embla-carousel-react": "^8.5.1", "flexsearch": "^0.7.43", "i18next": "^24.2.0", + "i18next-browser-languagedetector": "^8.0.4", "lru-cache": "^11.0.2", "lucide-react": "^0.469.0", "nostr-tools": "^2.10.4", @@ -6264,6 +6265,14 @@ } } }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.4.tgz", + "integrity": "sha512-f3frU3pIxD50/Tz20zx9TD9HobKYg47fmAETb117GKGPrhwcSSPJDoCposXlVycVebQ9GQohC3Efbpq7/nnJ5w==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, "node_modules/idb": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", diff --git a/package.json b/package.json index fb9904e..7a67c90 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "embla-carousel-react": "^8.5.1", "flexsearch": "^0.7.43", "i18next": "^24.2.0", + "i18next-browser-languagedetector": "^8.0.4", "lru-cache": "^11.0.2", "lucide-react": "^0.469.0", "nostr-tools": "^2.10.4", diff --git a/src/components/NoteCard/MutedNoteCard.tsx b/src/components/NoteCard/MutedNoteCard.tsx index 53b7307..633648c 100644 --- a/src/components/NoteCard/MutedNoteCard.tsx +++ b/src/components/NoteCard/MutedNoteCard.tsx @@ -44,7 +44,7 @@ export default function MutedNoteCard({
-
{t('This user is muted')}
+
{t('This user has been muted')}
{ + const supported = supportedLanguages.find((supported) => lng.startsWith(supported)) + return supported || 'en' + } } }) i18n.services.formatter?.add('date', (timestamp, lng) => { if (lng?.startsWith('zh')) { - return dayjs(timestamp).format('YYYY/MM/DD') + return dayjs(timestamp).format('YYYY年MM月DD日') } if (lng?.startsWith('pl')) { - return dayjs(timestamp).format('DD/MM/YYYY/') + return dayjs(timestamp).format('DD.MM.YYYY') + } + if (lng?.startsWith('ja')) { + return dayjs(timestamp).format('YYYY年MM月DD日') + } + if (lng?.startsWith('de')) { + return dayjs(timestamp).format('DD.MM.YYYY') + } + if (lng?.startsWith('ru')) { + return dayjs(timestamp).format('DD.MM.YYYY') + } + if (lng?.startsWith('es')) { + return dayjs(timestamp).format('DD/MM/YYYY') + } + if (lng?.startsWith('fr')) { + return dayjs(timestamp).format('DD/MM/YYYY') + } + if (lng?.startsWith('pt')) { + return dayjs(timestamp).format('DD/MM/YYYY') + } + if (lng?.startsWith('ar')) { + return dayjs(timestamp).format('DD/MM/YYYY') } return dayjs(timestamp).format('MMM D, YYYY') }) diff --git a/src/i18n/locales/ar.ts b/src/i18n/locales/ar.ts new file mode 100644 index 0000000..b722155 --- /dev/null +++ b/src/i18n/locales/ar.ts @@ -0,0 +1,207 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'مرحباً! 🥳', + About: 'حول', + 'New Note': 'ملاحظة جديدة', + Post: 'نشر', + Home: 'الرئيسية', + 'Relay settings': 'إعدادات الريلاي', + Settings: 'الإعدادات', + SidebarRelays: 'الريلايات', + Refresh: 'تحديث', + Profile: 'الملف الشخصي', + Logout: 'تسجيل الخروج', + Following: 'المتابعون', + followings: 'المتابعين', + reposted: 'أُعيد نشره', + 'just now': 'الآن', + 'n minutes ago': 'منذ {{n}} دقيقة', + 'n m': '{{n}} دقيقة', + 'n hours ago': 'منذ {{n}} ساعة', + 'n h': '{{n}} ساعة', + 'n days ago': 'منذ {{n}} يوم', + 'n d': '{{n}} يوم', + date: '{{timestamp, date}}', + Follow: 'متابعة', + Unfollow: 'إلغاء المتابعة', + 'Follow failed': 'فشل المتابعة', + 'Unfollow failed': 'فشل إلغاء المتابعة', + 'show new notes': 'إظهار الملاحظات الجديدة', + 'loading...': 'جار التحميل...', + 'no more notes': 'لا توجد ملاحظات إضافية', + 'reply to': 'الرد على', + reply: 'رد', + Reply: 'رد', + 'load more older replies': 'تحميل المزيد من الردود القديمة', + 'Write something...': 'اكتب شيئاً...', + Cancel: 'إلغاء', + Mentions: 'المنشنات', + 'Failed to post': 'فشل النشر', + 'Post successful': 'تم النشر بنجاح', + 'Your post has been published': 'تم نشر مشاركتك', + Repost: 'إعادة النشر', + Quote: 'اقتباس', + 'Copy event ID': 'نسخ معرف الحدث', + 'Copy user ID': 'نسخ معرف المستخدم', + 'View raw event': 'عرض الحدث الخام', + Like: 'أعجبني', + 'switch to light theme': 'التبديل إلى الوضع الفاتح', + 'switch to dark theme': 'التبديل إلى الوضع الداكن', + 'switch to system theme': 'التبديل إلى وضع النظام', + Note: 'ملاحظة', + note: 'ملاحظة', + "username's following": 'متابعي {{username}}', + "username's used relays": 'الريلايات المستخدمة لـ {{username}}', + "username's muted": '{{username}} تم كتمه', + Login: 'تسجيل الدخول', + 'Follows you': 'يتابعك', + 'Relay Settings': 'إعدادات الريلاي', + 'Relay set name': 'اسم مجموعة الريلاي', + 'Add a new relay set': 'إضافة مجموعة ريلاي جديدة', + Add: 'إضافة', + 'n relays': '{{n}} ريلايات', + Rename: 'إعادة تسمية', + 'Copy share link': 'نسخ رابط المشاركة', + Delete: 'حذف', + 'Relay already exists': 'الريلاي موجود بالفعل', + 'invalid relay URL': 'عنوان URL للريلاي غير صالح', + 'Add a new relay': 'إضافة ريلاي جديدة', + back: 'عودة', + 'Lost in the void': 'ضائع في الفراغ', + 'Carry me home': 'أعدني إلى المنزل', + 'no replies': 'لا توجد ردود', + 'Reply to': 'الرد على', + Search: 'بحث', + 'The relays you are connected to do not support search': 'الريلايات المتصلة لا تدعم البحث', + 'supports search': 'يدعم البحث', + 'Show more...': 'عرض المزيد...', + 'All users': 'جميع المستخدمين', + 'Display replies': 'عرض الردود', + Notes: 'الملاحظات', + Replies: 'الردود', + Notifications: 'الإشعارات', + 'no more notifications': 'لا توجد إشعارات إضافية', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'استخدام تسجيل الدخول بالمفتاح الخاص غير آمن. يُنصح باستخدام إضافة المتصفح مثل alby أو nostr-keyx أو nos2x.', + 'Login with Browser Extension': 'تسجيل الدخول باستخدام إضافة المتصفح', + 'Login with Bunker': 'تسجيل الدخول باستخدام Bunker', + 'Login with Private Key': 'تسجيل الدخول باستخدام المفتاح الخاص', + 'reload notes': 'إعادة تحميل الملاحظات', + 'Logged in Accounts': 'الحسابات المسجلة', + 'Add an Account': 'إضافة حساب', + 'More options': 'المزيد من الخيارات', + 'Add client tag': 'إضافة وسم العميل', + 'Show others this was sent via Jumble': 'عرض أن هذه الرسالة أُرسلت عبر Jumble', + 'Are you sure you want to logout?': 'هل أنت متأكد أنك تريد تسجيل الخروج؟', + 'relay sets': 'مجموعات الريلاي', + edit: 'تعديل', + Languages: 'اللغات', + Theme: 'المظهر', + System: 'النظام', + Light: 'فاتح', + Dark: 'داكن', + Temporary: 'مؤقت', + 'Choose a relay set': 'اختر مجموعة ريلاي', + 'Switch account': 'تبديل الحساب', + Pictures: 'الصور', + 'Picture note': 'ملاحظة الصورة', + 'A special note for picture-first clients like Olas': + 'ملاحظة خاصة للعملاء المعتمدين على الصور مثل Olas', + 'Picture note requires images': 'ملاحظة الصورة تتطلب صور', + Relays: 'الريلايات', + image: 'صورة', + 'Normal Note': 'ملاحظة عادية', + 'Picture Note': 'ملاحظة الصورة', + 'R & W': 'قراءة وكتابة', + Read: 'قراءة', + Write: 'كتابة', + 'Push to relays': 'إرسال إلى الريلايات', + 'Push Successful': 'تم الإرسال بنجاح', + 'Successfully pushed relay sets to relays': 'تم إرسال مجموعات الريلاي إلى الريلايات بنجاح', + 'Pull from relays': 'استلام من الريلايات', + 'Select the relay sets you want to pull': 'اختر مجموعات الريلاي التي تريد استلامها', + 'No relay sets found': 'لم يتم العثور على مجموعات ريلاي', + 'Pull n relay sets': 'سحب {{n}} مجموعات ريلاي', + Pull: 'سحب', + 'Select all': 'اختر الكل', + 'Relay Sets': 'مجموعات الريلاي', + 'Read & Write Relays': 'ريلايات القراءة والكتابة', + 'read relays description': + 'تُستخدم ريلايات القراءة لاسترجاع الأحداث المتعلقة بك. ينشر المستخدمون الآخرون الأحداث التي ترغب في مشاهدتها إلى هذه الريلايات.', + 'write relays description': + 'تُستخدم ريلايات الكتابة لنشر أحداثك. يسترجع المستخدمون الآخرون أحداثك من هذه الريلايات.', + 'read & write relays notice': 'يُفضل أن يكون عدد خوادم القراءة والكتابة بين 2 و4.', + "Don't have an account yet?": 'لا تملك حساباً بعد؟', + 'or simply generate a private key': 'أو ببساطة أنشئ مفتاحاً خاصاً', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'هذا مفتاح خاص. لا تشاركه مع أي أحد. احفظه بأمان، فلن تتمكن من استرجاعه إذا فقدته.', + Edit: 'تعديل', + Save: 'حفظ', + 'Display Name': 'اسم العرض', + Bio: 'السيرة الذاتية', + 'Nostr Address (NIP-05)': 'عنوان Nostr (NIP-05)', + 'Invalid NIP-05 address': 'عنوان NIP-05 غير صالح', + 'Copy private key': 'نسخ المفتاح الخاص', + 'Enter the password to decrypt your ncryptsec': 'أدخل كلمة المرور لفك تشفير ncryptsec', + Back: 'رجوع', + 'optional: encrypt nsec': 'اختياري: تشفير nsec', + password: 'كلمة المرور', + 'Sign up': 'تسجيل', + 'Save to': 'حفظ إلى', + 'Enter a name for the new relay set': 'أدخل اسماً لمجموعة ريلاي جديدة', + 'Save to a new relay set': 'حفظ في مجموعة ريلاي جديدة', + Mute: 'كتم', + Muted: 'تم كتمه', + Unmute: 'إلغاء الكتم', + 'Mute user': 'كتم المستخدم', + 'Unmute user': 'إلغاء كتم المستخدم', + 'Append n relays': 'إضافة {{n}} ريلايات', + Append: 'إضافة', + 'Select relays to append': 'اختر الريلايات للإضافة', + 'calculating...': 'جار الحساب...', + 'Calculate optimal read relays': 'حساب أفضل ريلايات للقراءة', + 'Login to set': 'تسجيل الدخول للوصول إلى المجموعة', + 'Please login to view following feed': 'يرجى تسجيل الدخول لعرض خلاصات المتابعة', + 'Send only to r': 'إرسال فقط إلى {{r}}', + 'Send only to these relays': 'إرسال فقط إلى هذه الريلايات', + Explore: 'استكشاف', + 'Search relays': 'البحث في الريلايات', + relayInfoBadgeAuth: 'مصادقة', + relayInfoBadgeSearch: 'بحث', + relayInfoBadgePayment: 'دفع', + Operator: 'المشغل', + Contact: 'اتصال', + Software: 'البرنامج', + Version: 'الإصدار', + 'Random Relays': 'ريلايات عشوائية', + randomRelaysRefresh: 'تحديث', + 'Explore more': 'استكشاف المزيد', + 'Payment page': 'صفحة الدفع', + 'Supported NIPs': 'NIPs المدعومة', + 'Open in a': 'فتح في {{a}}', + 'Cannot handle event of kind k': 'لا يمكن معالجة الحدث من النوع {{k}}', + 'Sorry! The note cannot be found 😔': 'عذراً! لا يمكن العثور على الملاحظة 😔', + 'This user has been muted': 'تم كتم هذا المستخدم', + Wallet: 'المحفظة', + Sats: 'Sats', + sats: 'sats', + 'Zap to': 'إرسال Zap إلى', + 'Zap n sats': 'Zap {{n}} sats', + zapComment: 'تعليق', + 'Default zap amount': 'الكمية الافتراضية لـ Zap', + 'Default zap comment': 'التعليق الافتراضي لـ Zap', + 'Lightning Address (or LNURL)': 'عنوان Lightning (أو LNURL)', + 'Quick zap': 'Zap سريع', + 'If enabled, you can zap with a single click': 'إذا تم التفعيل، يمكنك إرسال Zap بنقرة واحدة', + All: 'الكل', + Reactions: 'التفاعلات', + Zaps: 'Zaps', + 'Enjoying Jumble?': 'هل تستمتع بـ Jumble؟', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'تبرعك يساعد في صيانة Jumble وتحسينه! 😊', + 'Earlier notifications': 'الإشعارات السابقة', + 'Temporarily display this note': 'عرض هذه الملاحظة مؤقتاً' + // ...existing code... + } +} diff --git a/src/i18n/locales/de.ts b/src/i18n/locales/de.ts new file mode 100644 index 0000000..074a5c8 --- /dev/null +++ b/src/i18n/locales/de.ts @@ -0,0 +1,211 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'Willkommen! 🥳', + About: 'Über', + 'New Note': 'Neue Notiz', + Post: 'Beitrag', + Home: 'Startseite', + 'Relay settings': 'Relay-Einstellungen', + Settings: 'Einstellungen', + SidebarRelays: 'Relays', + Refresh: 'Aktualisieren', + Profile: 'Profil', + Logout: 'Abmelden', + Following: 'Folgende', + followings: 'Folgekonten', + reposted: 'erneut gepostet', + 'just now': 'gerade eben', + 'n minutes ago': 'vor {{n}} Minuten', + 'n m': 'vor {{n}}m', + 'n hours ago': 'vor {{n}} Stunden', + 'n h': 'vor {{n}}h', + 'n days ago': 'vor {{n}} Tagen', + 'n d': 'vor {{n}}d', + date: '{{timestamp, date}}', + Follow: 'Folgen', + Unfollow: 'Nicht mehr folgen', + 'Follow failed': 'Folgen fehlgeschlagen', + 'Unfollow failed': 'Nicht mehr folgen fehlgeschlagen', + 'show new notes': 'zeige neue Notizen', + 'loading...': 'lädt...', + 'no more notes': 'keine weiteren Notizen', + 'reply to': 'antworten an', + reply: 'antworten', + Reply: 'Antwort', + 'load more older replies': 'ältere Antworten laden', + 'Write something...': 'Schreibe etwas...', + Cancel: 'Abbrechen', + Mentions: '@', + 'Failed to post': 'Posten fehlgeschlagen', + 'Post successful': 'Beitrag erfolgreich', + 'Your post has been published': 'Dein Beitrag wurde veröffentlicht', + Repost: 'Erneut posten', + Quote: 'Zitat', + 'Copy event ID': 'Ereignis-ID kopieren', + 'Copy user ID': 'Benutzer-ID kopieren', + 'View raw event': 'Rohdaten anzeigen', + Like: 'Gefällt mir', + 'switch to light theme': 'Wechsel zum hellen Design', + 'switch to dark theme': 'Wechsel zum dunklen Design', + 'switch to system theme': 'Zum Systemthema wechseln', + Note: 'Notiz', + note: 'notiz', + "username's following": '{{username}}s Folgen', + "username's used relays": '{{username}}s verwendete Relays', + "username's muted": '{{username}}s stummgeschaltet', + Login: 'Anmelden', + 'Follows you': 'Folgt dir', + 'Relay Settings': 'Relay-Einstellungen', + 'Relay set name': 'Relay-Set Name', + 'Add a new relay set': 'Neues Relay-Set hinzufügen', + Add: 'Hinzufügen', + 'n relays': '{{n}} Relays', + Rename: 'Umbenennen', + 'Copy share link': 'Freigabelink kopieren', + Delete: 'Löschen', + 'Relay already exists': 'Relay existiert bereits', + 'invalid relay URL': 'Ungültige Relay-URL', + 'Add a new relay': 'Neues Relay hinzufügen', + back: 'Zurück', + 'Lost in the void': 'Verloren im Nichts', + 'Carry me home': 'Bring mich nach Hause', + 'no replies': 'keine Antworten', + 'Reply to': 'Antwort an', + Search: 'Suchen', + 'The relays you are connected to do not support search': + 'Die verbundenen Relays unterstützen keine Suche', + 'supports search': 'unterstützt Suche', + 'Show more...': 'Mehr anzeigen...', + 'All users': 'Alle Benutzer', + 'Display replies': 'Antworten anzeigen', + Notes: 'Notizen', + Replies: 'Antworten', + Notifications: 'Benachr.', // shortened from 'Benachrichtigungen' + 'no more notifications': 'keine weiteren Benachrichtigungen', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'Die Anmeldung mit privatem Schlüssel ist unsicher. Es wird empfohlen, eine Browsererweiterung wie alby, nostr-keyx oder nos2x zu verwenden.', + 'Login with Browser Extension': 'Mit Browser-Erweiterung anmelden', + 'Login with Bunker': 'Mit Bunker anmelden', + 'Login with Private Key': 'Mit privatem Schlüssel anmelden', + 'reload notes': 'Notizen neu laden', + 'Logged in Accounts': 'Angemeldete Konten', + 'Add an Account': 'Konto hinzufügen', + 'More options': 'Mehr Optionen', + 'Add client tag': 'Client-Tag hinzufügen', + 'Show others this was sent via Jumble': 'Anderen zeigen, dass dies über Jumble gesendet wurde', + 'Are you sure you want to logout?': 'Bist du sicher, dass du dich abmelden möchtest?', + 'relay sets': 'Relay-Sets', + edit: 'bearbeiten', + Languages: 'Sprachen', + Theme: 'Design', + System: 'System', + Light: 'Hell', + Dark: 'Dunkel', + Temporary: 'Temporär', + 'Choose a relay set': 'Wähle ein Relay-Set', + 'Switch account': 'Konto wechseln', + Pictures: 'Bilder', + 'Picture note': 'Bildnotiz', + 'A special note for picture-first clients like Olas': + 'Eine spezielle Notiz für bildfokussierte Clients wie Olas', + 'Picture note requires images': 'Bildnotiz erfordert Bilder', + Relays: 'Relays', + image: 'Bild', + 'Normal Note': 'Normale Notiz', + 'Picture Note': 'Bildnotiz', + 'R & W': 'R & W', + Read: 'Lesen', + Write: 'Schreiben', + 'Push to relays': 'An Relays senden', + 'Push Successful': 'Senden erfolgreich', + 'Successfully pushed relay sets to relays': 'Relay-Sets erfolgreich an Relays gesendet', + 'Pull from relays': 'Von Relays abrufen', + 'Select the relay sets you want to pull': 'Wähle die Relay-Sets, die du abrufen möchtest', + 'No relay sets found': 'Keine Relay-Sets gefunden', + 'Pull n relay sets': 'Hole {{n}} Relay-Sets', + Pull: 'Abrufen', + 'Select all': 'Alle auswählen', + 'Relay Sets': 'Relay-Sets', + 'Read & Write Relays': 'Lese- & Schreib-Relays', + 'read relays description': + 'Leserelays werden verwendet, um Ereignisse über dich abzurufen. Andere Benutzer senden die Ereignisse, die du sehen sollst, an deine Leserelays.', + 'write relays description': + 'Schreibrelays werden verwendet, um deine Ereignisse zu veröffentlichen. Andere Benutzer rufen deine Ereignisse von deinen Schreibrelays ab.', + 'read & write relays notice': + 'Die Anzahl der Lese- und Schreibserver sollte idealerweise zwischen 2 und 4 liegen.', + "Don't have an account yet?": 'Noch keinen Account?', + 'or simply generate a private key': 'oder erstelle einfach einen privaten Schlüssel', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Dies ist ein privater Schlüssel. Teile ihn mit niemandem. Bewahre ihn sicher auf. Du kannst ihn nicht wiederherstellen, falls du ihn verlierst.', + Edit: 'Bearbeiten', + Save: 'Speichern', + 'Display Name': 'Anzeigename', + Bio: 'Biografie', + 'Nostr Address (NIP-05)': 'Nostr-Adresse (NIP-05)', + 'Invalid NIP-05 address': 'Ungültige NIP-05 Adresse', + 'Copy private key': 'Privaten Schlüssel kopieren', + 'Enter the password to decrypt your ncryptsec': + 'Gib das Passwort ein, um deinen ncryptsec zu entschlüsseln', + Back: 'Zurück', + 'optional: encrypt nsec': 'optional: nsec verschlüsseln', + password: 'Passwort', + 'Sign up': 'Registrieren', + 'Save to': 'Speichern in', + 'Enter a name for the new relay set': 'Gib einen Namen für das neue Relay-Set ein', + 'Save to a new relay set': 'In ein neues Relay-Set speichern', + Mute: 'Stummschalten', + Muted: 'Stummgeschaltet', + Unmute: 'Stummschaltung aufheben', + 'Mute user': 'Benutzer stummschalten', + 'Unmute user': 'Benutzer-Stummschaltung aufheben', + 'Append n relays': 'Füge {{n}} Relays hinzu', + Append: 'Hinzufügen', + 'Select relays to append': 'Wähle die hinzuzufügenden Relays', + 'calculating...': 'berechne...', + 'Calculate optimal read relays': 'Optimale Leserelays berechnen', + 'Login to set': 'Anmelden zum Set', + 'Please login to view following feed': + 'Bitte melde dich an, um den Feed der Folgenden zu sehen', + 'Send only to r': 'Nur an {{r}} senden', + 'Send only to these relays': 'Nur an diese Relays senden', + Explore: 'Entdecken', + 'Search relays': 'Relays suchen', + relayInfoBadgeAuth: 'Auth', + relayInfoBadgeSearch: 'Suche', + relayInfoBadgePayment: 'Zahlung', + Operator: 'Betreiber', + Contact: 'Kontakt', + Software: 'Software', + Version: 'Version', + 'Random Relays': 'Zufällige Relays', + randomRelaysRefresh: 'Aktualisieren', + 'Explore more': 'Mehr entdecken', + 'Payment page': 'Zahlungsseite', + 'Supported NIPs': 'Unterstützte NIPs', + 'Open in a': 'Öffnen in {{a}}', + 'Cannot handle event of kind k': 'Ereignis des Typs {{k}} kann nicht verarbeitet werden', + 'Sorry! The note cannot be found 😔': 'Entschuldigung! Die Notiz wurde nicht gefunden 😔', + 'This user has been muted': 'Dieser Benutzer wurde stummgeschaltet', + Wallet: 'Wallet', + Sats: 'Sats', + sats: 'sats', + 'Zap to': 'Zap an', + 'Zap n sats': 'Zap {{n}} sats', + zapComment: 'Kommentar', + 'Default zap amount': 'Standard-Zap-Betrag', + 'Default zap comment': 'Standard-Zap-Kommentar', + 'Lightning Address (or LNURL)': 'Lightning-Adresse (oder LNURL)', + 'Quick zap': 'Schneller Zap', + 'If enabled, you can zap with a single click': + 'Ist aktiviert, kannst du mit einem Klick zappen', + All: 'Alle', + Reactions: 'Reaktionen', + Zaps: 'Zaps', + 'Enjoying Jumble?': 'Gefällt dir Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'Deine Spende hilft mir, Jumble zu pflegen und zu verbessern! 😊', + 'Earlier notifications': 'Frühere Benachrichtigungen', + 'Temporarily display this note': 'Notiz vorübergehend anzeigen' + } +} diff --git a/src/i18n/en.ts b/src/i18n/locales/en.ts similarity index 98% rename from src/i18n/en.ts rename to src/i18n/locales/en.ts index d1e1abb..c2756c3 100644 --- a/src/i18n/en.ts +++ b/src/i18n/locales/en.ts @@ -79,7 +79,7 @@ export default { 'All users': 'All users', 'Display replies': 'Display replies', Notes: 'Notes', - 'Notes & Replies': 'Notes & Replies', + Replies: 'Replies', Notifications: 'Notifications', 'no more notifications': 'no more notifications', 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': @@ -201,6 +201,7 @@ export default { 'Enjoying Jumble?': 'Enjoying Jumble?', 'Your donation helps me maintain Jumble and make it better! 😊': 'Your donation helps me maintain Jumble and make it better! 😊', - 'Earlier notifications': 'Earlier notifications' + 'Earlier notifications': 'Earlier notifications', + 'Temporarily display this note': 'Temporarily display this note' } } diff --git a/src/i18n/locales/es.ts b/src/i18n/locales/es.ts new file mode 100644 index 0000000..2a98805 --- /dev/null +++ b/src/i18n/locales/es.ts @@ -0,0 +1,211 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': '¡Bienvenido! 🥳', + About: 'Acerca de', + 'New Note': 'Nueva nota', + Post: 'Publicar', + Home: 'Inicio', + 'Relay settings': 'Configuración de relés', + Settings: 'Ajustes', + SidebarRelays: 'Relés', + Refresh: 'Actualizar', + Profile: 'Perfil', + Logout: 'Cerrar sesión', + Following: 'Siguiendo', + followings: 'siguiendo', + reposted: 'retransmitido', + 'just now': 'justo ahora', + 'n minutes ago': 'hace {{n}} minutos', + 'n m': '{{n}}m', + 'n hours ago': 'hace {{n}} horas', + 'n h': '{{n}}h', + 'n days ago': 'hace {{n}} días', + 'n d': '{{n}}d', + date: '{{timestamp, date}}', // ...existing code... + Follow: 'Seguir', + Unfollow: 'Dejar de seguir', + 'Follow failed': 'Error al seguir', + 'Unfollow failed': 'Error al dejar de seguir', + 'show new notes': 'mostrar nuevas notas', + 'loading...': 'cargando...', + 'no more notes': 'no hay más notas', + 'reply to': 'responder a', + reply: 'responder', + Reply: 'Responder', + 'load more older replies': 'cargar más respuestas antiguas', + 'Write something...': 'Escribe algo...', + Cancel: 'Cancelar', + Mentions: 'Menciones', + 'Failed to post': 'Error al publicar', + 'Post successful': 'Publicación exitosa', + 'Your post has been published': 'Tu publicación ha sido publicada', + Repost: 'Reenviar', + Quote: 'Citar', + 'Copy event ID': 'Copiar ID del evento', + 'Copy user ID': 'Copiar ID del usuario', + 'View raw event': 'Ver evento sin procesar', + Like: 'Me gusta', + 'switch to light theme': 'cambiar a tema claro', + 'switch to dark theme': 'cambiar a tema oscuro', + 'switch to system theme': 'cambiar al tema del sistema', + Note: 'Nota', + note: 'nota', + "username's following": 'Siguiendo de {{username}}', + "username's used relays": 'Relés usados por {{username}}', + "username's muted": 'Silenciados de {{username}}', + Login: 'Iniciar sesión', + 'Follows you': 'Te sigue', + 'Relay Settings': 'Configuración de relés', + 'Relay set name': 'Nombre del conjunto de relés', + 'Add a new relay set': 'Agregar un nuevo conjunto de relés', + Add: 'Agregar', + 'n relays': '{{n}} relés', + Rename: 'Renombrar', + 'Copy share link': 'Copiar enlace para compartir', + Delete: 'Eliminar', + 'Relay already exists': 'El relé ya existe', + 'invalid relay URL': 'URL del relé inválida', + 'Add a new relay': 'Agregar un nuevo relé', + back: 'atrás', + 'Lost in the void': 'Perdido en el vacío', + 'Carry me home': 'Llévame a casa', + 'no replies': 'sin respuestas', + 'Reply to': 'Responder a', + Search: 'Buscar', + 'The relays you are connected to do not support search': + 'Los relés a los que estás conectado no soportan la búsqueda', + 'supports search': 'soporta la búsqueda', + 'Show more...': 'Mostrar más...', + 'All users': 'Todos los usuarios', + 'Display replies': 'Mostrar respuestas', + Notes: 'Notas', + Replies: 'Respuestas', + Notifications: 'Notificaciones', + 'no more notifications': 'no hay más notificaciones', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'Iniciar sesión con clave privada no es seguro. Se recomienda usar una extensión del navegador para iniciar sesión, como alby, nostr-keyx o nos2x.', + 'Login with Browser Extension': 'Iniciar sesión con extensión de navegador', + 'Login with Bunker': 'Iniciar sesión con Bunker', + 'Login with Private Key': 'Iniciar sesión con clave privada', + 'reload notes': 'recargar notas', + 'Logged in Accounts': 'Cuentas conectadas', + 'Add an Account': 'Agregar una cuenta', + 'More options': 'Más opciones', + 'Add client tag': 'Agregar etiqueta de cliente', + 'Show others this was sent via Jumble': 'Mostrar a otros que esto se envió vía Jumble', + 'Are you sure you want to logout?': '¿Estás seguro de que deseas cerrar sesión?', + 'relay sets': 'conjuntos de relés', + edit: 'editar', + Languages: 'Idiomas', + Theme: 'Tema', + System: 'Sistema', + Light: 'Claro', + Dark: 'Oscuro', + Temporary: 'Temporal', + 'Choose a relay set': 'Selecciona un conjunto de relés', + 'Switch account': 'Cambiar de cuenta', + Pictures: 'Imágenes', + 'Picture note': 'Nota con imagen', + 'A special note for picture-first clients like Olas': + 'Una nota especial para clientes que priorizan imagen, como Olas', + 'Picture note requires images': 'La nota con imagen requiere imágenes', + Relays: 'Relés', + image: 'imagen', + 'Normal Note': 'Nota normal', + 'Picture Note': 'Nota con imagen', + 'R & W': 'L y E', + Read: 'Leer', + Write: 'Escribir', + 'Push to relays': 'Enviar a relés', + 'Push Successful': 'Envío exitoso', + 'Successfully pushed relay sets to relays': 'Conjuntos de relés enviados con éxito a relés', + 'Pull from relays': 'Recibir de relés', + 'Select the relay sets you want to pull': + 'Selecciona los conjuntos de relés que deseas recibir', + 'No relay sets found': 'No se encontraron conjuntos de relés', + 'Pull n relay sets': 'Recibir {{n}} conjuntos de relés', + Pull: 'Recibir', + 'Select all': 'Seleccionar todo', + 'Relay Sets': 'Conjuntos de relés', + 'Read & Write Relays': 'Relés de lectura y escritura', + 'read relays description': + 'Los relés de lectura se usan para consultar eventos sobre ti. Otros usuarios publican eventos que deseas ver en tus relés de lectura.', + 'write relays description': + 'Los relés de escritura se usan para publicar tus eventos. Otros usuarios consultan tus eventos desde tus relés de escritura.', + 'read & write relays notice': + 'El número de servidores de lectura y escritura debería mantenerse idealmente entre 2 y 4.', + "Don't have an account yet?": '¿Aún no tienes una cuenta?', + 'or simply generate a private key': 'o simplemente genera una clave privada', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Esta es una clave privada. No la compartas con nadie. Guárdala de forma segura, ya que no podrás recuperarla si la pierdes.', + Edit: 'Editar', + Save: 'Guardar', + 'Display Name': 'Nombre para mostrar', + Bio: 'Biografía', + 'Nostr Address (NIP-05)': 'Dirección Nostr (NIP-05)', + 'Invalid NIP-05 address': 'Dirección NIP-05 inválida', + 'Copy private key': 'Copiar clave privada', + 'Enter the password to decrypt your ncryptsec': + 'Introduce la contraseña para descifrar tu ncryptsec', + Back: 'Volver', + 'optional: encrypt nsec': 'opcional: cifrar nsec', + password: 'contraseña', + 'Sign up': 'Regístrate', + 'Save to': 'Guardar en', + 'Enter a name for the new relay set': 'Introduce un nombre para el nuevo conjunto de relés', + 'Save to a new relay set': 'Guardar en un nuevo conjunto de relés', + Mute: 'Silenciar', + Muted: 'Silenciado', + Unmute: 'Activar sonido', + 'Mute user': 'Silenciar usuario', + 'Unmute user': 'Activar sonido del usuario', + 'Append n relays': 'Agregar {{n}} relés', + Append: 'Agregar', + 'Select relays to append': 'Selecciona relés para agregar', + 'calculating...': 'calculando...', + 'Calculate optimal read relays': 'Calcular relés de lectura óptimos', + 'Login to set': 'Inicia sesión para ajustar', + 'Please login to view following feed': 'Por favor inicia sesión para ver el feed de seguidos', + 'Send only to r': 'Enviar únicamente a {{r}}', + 'Send only to these relays': 'Enviar únicamente a estos relés', + Explore: 'Explorar', + 'Search relays': 'Buscar relés', + relayInfoBadgeAuth: 'Autenticación', + relayInfoBadgeSearch: 'Búsqueda', + relayInfoBadgePayment: 'Pago', + Operator: 'Operador', + Contact: 'Contacto', + Software: 'Software', + Version: 'Versión', + 'Random Relays': 'Relés aleatorios', + randomRelaysRefresh: 'Actualizar', + 'Explore more': 'Explorar más', + 'Payment page': 'Página de pago', + 'Supported NIPs': 'NIPs soportados', + 'Open in a': 'Abrir en {{a}}', + 'Cannot handle event of kind k': 'No se puede manejar el evento de tipo {{k}}', + 'Sorry! The note cannot be found 😔': '¡Lo siento! No se pudo encontrar la nota 😔', + 'This user has been muted': 'Este usuario ha sido silenciado', + Wallet: 'Billetera', + Sats: 'Satoshis', + sats: 'satoshis', + 'Zap to': 'Enviar zap a', + 'Zap n sats': 'Enviar {{n}} satoshis', + zapComment: 'Comentario', + 'Default zap amount': 'Cantidad de zap predeterminada', + 'Default zap comment': 'Comentario predeterminado de zap', + 'Lightning Address (or LNURL)': 'Dirección Lightning (o LNURL)', + 'Quick zap': 'Zap rápido', + 'If enabled, you can zap with a single click': + 'Si está habilitado, puedes enviar zap con un solo clic', + All: 'Todo', + Reactions: 'Reacciones', + Zaps: 'Zaps', + 'Enjoying Jumble?': '¿Te gusta Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + '¡Tu donación me ayuda a mantener y mejorar Jumble! 😊', + 'Earlier notifications': 'Notificaciones anteriores', + 'Temporarily display this note': 'Mostrar esta nota temporalmente' + } +} diff --git a/src/i18n/locales/fr.ts b/src/i18n/locales/fr.ts new file mode 100644 index 0000000..0bce6c4 --- /dev/null +++ b/src/i18n/locales/fr.ts @@ -0,0 +1,209 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'Bienvenue ! 🥳', + About: 'À propos', + 'New Note': 'Nouvelle note', + Post: 'Publier', + Home: 'Accueil', + 'Relay settings': 'Paramètres du relais', + Settings: 'Paramètres', + SidebarRelays: 'Relais', + Refresh: 'Rafraîchir', + Profile: 'Profil', + Logout: 'Déconnexion', + Following: 'Abonnements', + followings: 'abonnements', + reposted: 'republié', + 'just now': "à l'instant", + 'n minutes ago': 'il y a {{n}} minutes', + 'n m': '{{n}}m', + 'n hours ago': 'il y a {{n}} heures', + 'n h': '{{n}}h', + 'n days ago': 'il y a {{n}} jours', + 'n d': '{{n}}j', + date: '{{timestamp, date}}', + Follow: 'Suivre', + Unfollow: 'Ne plus suivre', + 'Follow failed': 'Échec du suivi', + 'Unfollow failed': "Échec de l'arrêt du suivi", + 'show new notes': 'afficher les nouvelles notes', + 'loading...': 'chargement...', + 'no more notes': 'plus de notes', + 'reply to': 'répondre à', + reply: 'répondre', + Reply: 'Répondre', + 'load more older replies': 'charger plus de réponses anciennes', + 'Write something...': 'Écrire quelque chose...', + Cancel: 'Annuler', + Mentions: 'Mentions', + 'Failed to post': 'Publication échouée', + 'Post successful': 'Publication réussie', + 'Your post has been published': 'Votre publication a été publiée', + Repost: 'Reposter', + Quote: 'Citer', + 'Copy event ID': "Copier l'ID de l'événement", + 'Copy user ID': "Copier l'ID de l'utilisateur", + 'View raw event': "Voir l'événement brut", + Like: 'Aimer', + 'switch to light theme': 'passer au thème clair', + 'switch to dark theme': 'passer au thème sombre', + 'switch to system theme': 'passer au thème système', + Note: 'Note', + note: 'note', + "username's following": 'les abonnements de {{username}}', + "username's used relays": 'les relais utilisés par {{username}}', + "username's muted": '{{username}} en sourdine', + Login: 'Connexion', + 'Follows you': 'Vous suit', + 'Relay Settings': 'Paramètres des relais', + 'Relay set name': 'Nom du groupe de relais', + 'Add a new relay set': 'Ajouter un nouveau groupe de relais', + Add: 'Ajouter', + 'n relays': '{{n}} relais', + Rename: 'Renommer', + 'Copy share link': 'Copier le lien de partage', + Delete: 'Supprimer', + 'Relay already exists': 'Le relais existe déjà', + 'invalid relay URL': 'URL de relais invalide', + 'Add a new relay': 'Ajouter un nouveau relais', + back: 'retour', + 'Lost in the void': 'Perdu dans le vide', + 'Carry me home': 'Ramène-moi à la maison', + 'no replies': 'aucune réponse', + 'Reply to': 'Répondre à', + Search: 'Recherche', + 'The relays you are connected to do not support search': + 'Les relais auxquels vous êtes connecté ne prennent pas en charge la recherche', + 'supports search': 'prend en charge la recherche', + 'Show more...': 'Afficher plus...', + 'All users': 'Tous les utilisateurs', + 'Display replies': 'Afficher les réponses', + Notes: 'Notes', + Replies: 'Réponses', + Notifications: 'Notifications', + 'no more notifications': 'plus de notifications', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + "La connexion par clé privée n'est pas sécurisée. Il est recommandé d'utiliser une extension de navigateur pour se connecter, comme alby, nostr-keyx ou nos2x.", + 'Login with Browser Extension': 'Connexion avec une extension de navigateur', + 'Login with Bunker': 'Connexion avec Bunker', + 'Login with Private Key': 'Connexion avec clé privée', + 'reload notes': 'recharger les notes', + 'Logged in Accounts': 'Comptes connectés', + 'Add an Account': 'Ajouter un compte', + 'More options': "Plus d'options", + 'Add client tag': 'Ajouter une étiquette client', + 'Show others this was sent via Jumble': 'Montrer aux autres que cela a été envoyé via Jumble', + 'Are you sure you want to logout?': 'Êtes-vous sûr de vouloir vous déconnecter ?', + 'relay sets': 'groupes de relais', + edit: 'modifier', + Languages: 'Langues', + Theme: 'Thème', + System: 'Système', + Light: 'Clair', + Dark: 'Sombre', + Temporary: 'Temporaire', + 'Choose a relay set': 'Choisissez un groupe de relais', + 'Switch account': 'Changer de compte', + Pictures: 'Images', + 'Picture note': 'Note image', + 'A special note for picture-first clients like Olas': + "Une note spéciale pour les clients axés sur l'image comme Olas", + 'Picture note requires images': 'La note image nécessite des images', + Relays: 'Relais', + image: 'image', + 'Normal Note': 'Note normale', + 'Picture Note': 'Note image', + 'R & W': 'R & W', + Read: 'Lire', + Write: 'Écrire', + 'Push to relays': 'Envoyer aux relais', + 'Push Successful': 'Envoi réussi', + 'Successfully pushed relay sets to relays': 'Groupes de relais envoyés avec succès aux relais', + 'Pull from relays': 'Récupérer depuis les relais', + 'Select the relay sets you want to pull': 'Sélectionnez les groupes de relais à récupérer', + 'No relay sets found': 'Aucun groupe de relais trouvé', + 'Pull n relay sets': 'Récupérer {{n}} groupes de relais', + Pull: 'Récupérer', + 'Select all': 'Tout sélectionner', + 'Relay Sets': 'Groupes de relais', + 'Read & Write Relays': 'Relais lecture & écriture', + 'read relays description': + "Les relais de lecture permettent de consulter vos événements. D'autres utilisateurs y publieront les événements à afficher sur vos relais de lecture.", + 'write relays description': + "Les relais d'écriture servent à publier vos événements. D'autres utilisateurs rechercheront vos événements via ces relais.", + 'read & write relays notice': + "Il est recommandé de maintenir entre 2 et 4 serveurs de lecture et d'écriture.", + "Don't have an account yet?": "Vous n'avez pas encore de compte ?", + 'or simply generate a private key': 'ou générez simplement une clé privée', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Ceci est une clé privée. Ne la divulguez à personne. Gardez-la en sécurité. Vous ne pourrez pas la récupérer en cas de perte.', + Edit: 'Modifier', + Save: 'Enregistrer', + 'Display Name': "Nom d'affichage", + Bio: 'Biographie', + 'Nostr Address (NIP-05)': 'Adresse Nostr (NIP-05)', + 'Invalid NIP-05 address': 'Adresse NIP-05 invalide', + 'Copy private key': 'Copier la clé privée', + 'Enter the password to decrypt your ncryptsec': + 'Entrez le mot de passe pour décrypter votre ncryptsec', + Back: 'Retour', + 'optional: encrypt nsec': 'facultatif : chiffrer nsec', + password: 'mot de passe', + 'Sign up': "S'inscrire", + 'Save to': 'Enregistrer dans', + 'Enter a name for the new relay set': 'Entrez un nom pour le nouveau groupe de relais', + 'Save to a new relay set': 'Enregistrer dans un nouveau groupe de relais', + Mute: 'Couper le son', + Muted: 'En sourdine', + Unmute: 'Activer le son', + 'Mute user': "Mettre l'utilisateur en sourdine", + 'Unmute user': "Désactiver la sourdine de l'utilisateur", + 'Append n relays': 'Ajouter {{n}} relais', + Append: 'Ajouter', + 'Select relays to append': 'Sélectionnez les relais à ajouter', + 'calculating...': 'calcul en cours...', + 'Calculate optimal read relays': 'Calculer les relais de lecture optimaux', + 'Login to set': 'Connectez-vous pour définir', + 'Please login to view following feed': 'Veuillez vous connecter pour voir le fil d’abonnements', + 'Send only to r': 'Envoyer uniquement à {{r}}', + 'Send only to these relays': 'Envoyer uniquement à ces relais', + Explore: 'Explorer', + 'Search relays': 'Rechercher des relais', + relayInfoBadgeAuth: 'Auth', + relayInfoBadgeSearch: 'Recherche', + relayInfoBadgePayment: 'Paiement', + Operator: 'Opérateur', + Contact: 'Contact', + Software: 'Logiciel', + Version: 'Version', + 'Random Relays': 'Relais aléatoires', + randomRelaysRefresh: 'Rafraîchir', + 'Explore more': 'Explorer davantage', + 'Payment page': 'Page de paiement', + 'Supported NIPs': 'NIPs supportés', + 'Open in a': 'Ouvrir dans {{a}}', + 'Cannot handle event of kind k': "Impossible de traiter l'événement de type {{k}}", + 'Sorry! The note cannot be found 😔': 'Désolé ! La note est introuvable 😔', + 'This user has been muted': 'Cet utilisateur a été mis en sourdine', + Wallet: 'Portefeuille', + Sats: 'Sats', + sats: 'sats', + 'Zap to': 'Zap vers', + 'Zap n sats': 'Zap {{n}} sats', + zapComment: 'Commentaire', + 'Default zap amount': 'Montant de zap par défaut', + 'Default zap comment': 'Commentaire de zap par défaut', + 'Lightning Address (or LNURL)': 'Adresse Lightning (ou LNURL)', + 'Quick zap': 'Zap rapide', + 'If enabled, you can zap with a single click': 'Si activé, vous pouvez zapper en un clic', + All: 'Tous', + Reactions: 'Réactions', + Zaps: 'Zaps', + 'Enjoying Jumble?': 'Vous appréciez Jumble ?', + 'Your donation helps me maintain Jumble and make it better! 😊': + "Votre don m'aide à maintenir Jumble et à l'améliorer ! 😊", + 'Earlier notifications': 'Notifications antérieures', + 'Temporarily display this note': 'Afficher temporairement cette note' + } +} diff --git a/src/i18n/locales/ja.ts b/src/i18n/locales/ja.ts new file mode 100644 index 0000000..4b5d3b5 --- /dev/null +++ b/src/i18n/locales/ja.ts @@ -0,0 +1,208 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'ようこそ! 🥳', + About: '情報', + 'New Note': '新規ノート', + Post: '投稿', + Home: 'ホーム', + 'Relay settings': 'リレイ設定', + Settings: '設定', + SidebarRelays: 'リレイ', + Refresh: '更新', + Profile: 'プロフィール', + Logout: 'ログアウト', + Following: 'フォロー中', + followings: 'フォロー', + reposted: 'リポスト済み', + 'just now': 'たった今', + 'n minutes ago': '{{n}}分前', + 'n m': '{{n}}分', + 'n hours ago': '{{n}}時間前', + 'n h': '{{n}}時', + 'n days ago': '{{n}}日前', + 'n d': '{{n}}日', + date: '{{timestamp, date}}', + Follow: 'フォローする', + Unfollow: 'フォロー解除', + 'Follow failed': 'フォローに失敗しました', + 'Unfollow failed': 'フォロー解除に失敗しました', + 'show new notes': '新しいノートを表示', + 'loading...': '読み込み中...', + 'no more notes': 'これ以上ノートはありません', + 'reply to': '返信先', + reply: '返信', + Reply: '返信', + 'load more older replies': 'さらに古い返信を読み込む', + 'Write something...': '何か書いて...', + Cancel: 'キャンセル', + Mentions: '@', + 'Failed to post': '投稿に失敗しました', + 'Post successful': '投稿に成功しました', + 'Your post has been published': '投稿が公開されました', + Repost: 'リポスト', + Quote: '引用', + 'Copy event ID': 'イベントIDをコピー', + 'Copy user ID': 'ユーザーIDをコピー', + 'View raw event': '生データを表示', + Like: 'いいね', + 'switch to light theme': 'ライトテーマに切替', + 'switch to dark theme': 'ダークテーマに切替', + 'switch to system theme': 'システムテーマに切替', + Note: 'ノート', + note: 'ノート', + "username's following": '{{username}} のフォロー', + "username's used relays": '{{username}} の使用リレイ', + "username's muted": '{{username}} はミュート済み', + Login: 'ログイン', + 'Follows you': 'あなたをフォローしています', + 'Relay Settings': 'リレイ設定', + 'Relay set name': 'リレイセット名', + 'Add a new relay set': '新しいリレイセットを追加', + Add: '追加', + 'n relays': '{{n}} 個のリレイ', + Rename: '名前変更', + 'Copy share link': '共有リンクをコピー', + Delete: '削除', + 'Relay already exists': 'リレイは既に存在します', + 'invalid relay URL': '無効なリレイURL', + 'Add a new relay': '新しいリレイを追加', + back: '戻る', + 'Lost in the void': '虚無の中へ', + 'Carry me home': '家まで送って', + 'no replies': '返信がありません', + 'Reply to': '返信先', + Search: '検索', + 'The relays you are connected to do not support search': + '接続しているリレイは検索をサポートしていません', + 'supports search': '検索対応', + 'Show more...': 'さらに表示...', + 'All users': '全ユーザー', + 'Display replies': '返信を表示', + Notes: 'ノート', + Replies: '返信', + Notifications: '通知', + 'no more notifications': 'これ以上通知はありません', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + '秘密鍵によるログインは安全ではありません。alby、nostr-keyx、nos2xなどのブラウザ拡張の利用を推奨します。', + 'Login with Browser Extension': 'ブラウザ拡張でログイン', + 'Login with Bunker': 'Bunkerでログイン', + 'Login with Private Key': '秘密鍵でログイン', + 'reload notes': 'ノートを再読み込み', + 'Logged in Accounts': 'ログイン中のアカウント', + 'Add an Account': 'アカウントを追加', + 'More options': 'その他のオプション', + 'Add client tag': 'クライアントタグを追加', + 'Show others this was sent via Jumble': 'これがJumble経由で送信されたことを表示', + 'Are you sure you want to logout?': '本当にログアウトしますか?', + 'relay sets': 'リレイセット', + edit: '編集', + Languages: '言語', + Theme: 'テーマ', + System: 'システム', + Light: 'ライト', + Dark: 'ダーク', + Temporary: '一時的', + 'Choose a relay set': 'リレイセットを選択', + 'Switch account': 'アカウント切替', + Pictures: '画像', + 'Picture note': '画像ノート', + 'A special note for picture-first clients like Olas': + 'Olas のような画像優先クライアント向けの特別なノート', + 'Picture note requires images': '画像ノートには画像が必要です', + Relays: 'リレイ', + image: '画像', + 'Normal Note': '通常ノート', + 'Picture Note': '画像ノート', + 'R & W': '読&書', + Read: '読む', + Write: '書く', + 'Push to relays': 'リレイへプッシュ', + 'Push Successful': 'プッシュ成功', + 'Successfully pushed relay sets to relays': 'リレイセットをリレイへ正常にプッシュしました', + 'Pull from relays': 'リレイからプル', + 'Select the relay sets you want to pull': 'プルするリレイセットを選択', + 'No relay sets found': 'リレイセットが見つかりません', + 'Pull n relay sets': '{{n}} 個のリレイセットをプル', + Pull: 'プル', + 'Select all': 'すべて選択', + 'Relay Sets': 'リレイセット', + 'Read & Write Relays': '読み&書きリレイ', + 'read relays description': + '読みリレイはあなたに関するイベントを取得するために使用されます。他のユーザーはあなたが見るべきイベントをこのリレイに公開します。', + 'write relays description': + '書きリレイはあなたのイベントを公開するために使用されます。他のユーザーはこのリレイからあなたのイベントを取得します。', + 'read & write relays notice': + '読みリレイと書きリレイは、理想的にはそれぞれ2〜4個に保つべきです。', + "Don't have an account yet?": 'まだアカウントをお持ちでないですか?', + 'or simply generate a private key': 'または単に秘密鍵を生成してください', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'これは秘密鍵です。誰にも共有せず、安全な場所に保管してください。紛失すると復旧できません。', + Edit: '編集', + Save: '保存', + 'Display Name': '表示名', + Bio: '自己紹介', + 'Nostr Address (NIP-05)': 'Nostrアドレス (NIP-05)', + 'Invalid NIP-05 address': '無効なNIP-05アドレス', + 'Copy private key': '秘密鍵をコピー', + 'Enter the password to decrypt your ncryptsec': 'ncryptsecを復号化するためパスワードを入力', + Back: '戻る', + 'optional: encrypt nsec': '任意:nsecを暗号化', + password: 'パスワード', + 'Sign up': 'サインアップ', + 'Save to': '保存先', + 'Enter a name for the new relay set': '新しいリレイセットの名前を入力', + 'Save to a new relay set': '新しいリレイセットに保存', + Mute: 'ミュート', + Muted: 'ミュート済み', + Unmute: 'ミュート解除', + 'Mute user': 'ユーザーをミュート', + 'Unmute user': 'ユーザーのミュート解除', + 'Append n relays': '{{n}} 個のリレイを追加', + Append: '追加', + 'Select relays to append': '追加するリレイを選択', + 'calculating...': '計算中...', + 'Calculate optimal read relays': '最適な読みリレイを計算', + 'Login to set': 'セットにログイン', + 'Please login to view following feed': 'フォロー中のフィードを表示するにはログインしてください', + 'Send only to r': '{{r}} にのみ送信', + 'Send only to these relays': 'これらのリレイにのみ送信', + Explore: '探索', + 'Search relays': 'リレイを検索', + relayInfoBadgeAuth: '認証', + relayInfoBadgeSearch: '検索', + relayInfoBadgePayment: '支払い', + Operator: '運営者', + Contact: '連絡先', + Software: 'ソフトウェア', + Version: 'バージョン', + 'Random Relays': 'ランダムリレイ', + randomRelaysRefresh: '更新', + 'Explore more': 'もっと探索', + 'Payment page': '支払いページ', + 'Supported NIPs': '対応NIP', + 'Open in a': '{{a}}で開く', + 'Cannot handle event of kind k': '種類{{k}}のイベントは処理できません', + 'Sorry! The note cannot be found 😔': '申し訳ありません!ノートが見つかりません 😔', + 'This user has been muted': 'このユーザーはミュートされています', + Wallet: 'ウォレット', + Sats: 'サッツ', + sats: 'サッツ', + 'Zap to': 'Zap送信', + 'Zap n sats': '{{n}} サッツをZap', + zapComment: 'コメント', + 'Default zap amount': 'デフォルトのZap金額', + 'Default zap comment': 'デフォルトのZapコメント', + 'Lightning Address (or LNURL)': 'Lightningアドレス(またはLNURL)', + 'Quick zap': 'クイックZap', + 'If enabled, you can zap with a single click': '有効の場合、ワンクリックでZapできます', + All: 'すべて', + Reactions: '反応', + Zaps: 'Zap', + 'Enjoying Jumble?': 'Jumbleをお楽しみですか?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'あなたの寄付はJumbleの維持と改善に役立ちます! 😊', + 'Earlier notifications': '以前の通知', + 'Temporarily display this note': 'このノートを一時的に表示' + } +} diff --git a/src/i18n/pl.ts b/src/i18n/locales/pl.ts similarity index 88% rename from src/i18n/pl.ts rename to src/i18n/locales/pl.ts index eb5cb70..9e0be8f 100644 --- a/src/i18n/pl.ts +++ b/src/i18n/locales/pl.ts @@ -50,9 +50,9 @@ export default { 'switch to system theme': 'Przełącz na motyw systemu (automatyczny)', Note: 'Cały wpis', note: 'note', - "username's following": "{{username}} obserwuje:", - "username's used relays": "{{username}} użył transmiterów", - "username's muted": "Zablokowani przez {{username}} ", + "username's following": '{{username}} obserwuje:', + "username's used relays": '{{username}} użył transmiterów', + "username's muted": 'Zablokowani przez {{username}} ', Login: 'Logowanie', 'Follows you': 'Obserwujący', 'Relay Settings': 'Ustawienia transmiterów', @@ -79,7 +79,7 @@ export default { 'All users': 'Wszyscy użytkownicy', 'Display replies': 'Wyświetl komentarze', Notes: 'Wpisy', - 'Notes & Replies': 'Wpisy & Komentarze', + Replies: 'Komentarze', Notifications: 'Powiadomienia', 'no more notifications': 'Koniec powiadomień', 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': @@ -131,9 +131,8 @@ export default { 'Transmitery odczytu służą do wyszukiwania zdarzeń dotyczących użytkownika. Inni użytkownicy będą publikować wpisy, które chcą, abyś zobaczył, w transmiterach odczytu.', 'write relays description': 'Transmitery zapisu służą do publikowania wydarzeń. Inni użytkownicy będą wyszukiwać zdarzenia z transmiterów zapisu.', - 'read & write relays notice': - 'Liczba serwerów odczytu i zapisu powinna wynosić od 2 do 4.', - "Don't have an account yet?": "Nie masz jeszcze konta?", + 'read & write relays notice': 'Liczba serwerów odczytu i zapisu powinna wynosić od 2 do 4.', + "Don't have an account yet?": 'Nie masz jeszcze konta?', 'or simply generate a private key': 'lub wygeneruj klucz prywatny nowego konta', 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': 'Jest to klucz prywatny. Nie należy go nikomu udostępniać. Przechowuj go w bezpiecznym miejscu. W przypadku jego utraty nie będzie można go odzyskać.', @@ -166,7 +165,7 @@ export default { 'Please login to view following feed': 'Zaloguj się, aby wyświetlić poniższy wpis', 'Send only to r': 'Wyślij tylko do {{r}}', 'Send only to these relays': 'Wyślij tylko do tych transmiterów', - Explore: 'Transmitery', + Explore: 'Transmitery', 'Search relays': 'Wyszukaj transmiter', relayInfoBadgeAuth: '✔️', relayInfoBadgeSearch: 'Wyszukaj', @@ -194,13 +193,17 @@ export default { 'Default zap comment': 'Standardowy komentarz do zapa', 'Lightning Address (or LNURL)': 'Lightning Adres (lub LNURL)', 'Quick zap': 'Szybki zap', - 'If enabled, you can zap with a single click': 'Jeśli ta opcja jest włączona, można wysyłać zapa jednym kliknięciem', + 'If enabled, you can zap with a single click': + 'Jeśli ta opcja jest włączona, można wysyłać zapa jednym kliknięciem', All: 'Wszystkie', Reactions: 'Odzewy', Zaps: 'Zapy', - 'Enjoying Jumble?': 'Podoba ci się Jumble?', - 'Your donation helps me maintain Jumble and make it better! 😊': - 'Twoja darowizna pomoże mi utrzymać i ulepszać Jumble! 😊', - 'Earlier notifications': 'Wcześniejsze powiadomienia' + 'Enjoying Jumble?': 'Podoba ci się Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'Twoja darowizna pomoże mi utrzymać i ulepszać Jumble! 😊', + 'Earlier notifications': 'Wcześniejsze powiadomienia', + + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Temporarily display this note': 'Tymczas wyświetl ten wpis' } } diff --git a/src/i18n/locales/pt.ts b/src/i18n/locales/pt.ts new file mode 100644 index 0000000..08a0cad --- /dev/null +++ b/src/i18n/locales/pt.ts @@ -0,0 +1,209 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'Bem-vindo! 🥳', + About: 'Sobre', + 'New Note': 'Nova Nota', + Post: 'Postar', + Home: 'Início', + 'Relay settings': 'Configurações de Relé', + Settings: 'Configurações', + SidebarRelays: 'Relés', + Refresh: 'Atualizar', + Profile: 'Perfil', + Logout: 'Sair', + Following: 'Seguindo', + followings: 'seguidos', + reposted: 'repostado', + 'just now': 'agora mesmo', + 'n minutes ago': '{{n}} minutos atrás', + 'n m': '{{n}}m', + 'n hours ago': '{{n}} horas atrás', + 'n h': '{{n}}h', + 'n days ago': '{{n}} dias atrás', + 'n d': '{{n}}d', + date: '{{timestamp, date}}', + Follow: 'Seguir', + Unfollow: 'Deixar de Seguir', + 'Follow failed': 'Falha ao Seguir', + 'Unfollow failed': 'Falha ao Deixar de Seguir', + 'show new notes': 'mostrar novas notas', + 'loading...': 'carregando...', + 'no more notes': 'não há mais notas', + 'reply to': 'responder a', + reply: 'responder', + Reply: 'Responder', + 'load more older replies': 'carregar mais respostas antigas', + 'Write something...': 'Escreva algo...', + Cancel: 'Cancelar', + Mentions: 'Menções', + 'Failed to post': 'Falha ao postar', + 'Post successful': 'Postagem bem-sucedida', + 'Your post has been published': 'Sua postagem foi publicada', + Repost: 'Repostar', + Quote: 'Citar', + 'Copy event ID': 'Copiar ID do evento', + 'Copy user ID': 'Copiar ID do usuário', + 'View raw event': 'Ver evento bruto', + Like: 'Curtir', + 'switch to light theme': 'alternar para tema claro', + 'switch to dark theme': 'alternar para tema escuro', + 'switch to system theme': 'alternar para tema do sistema', + Note: 'Nota', + note: 'nota', + "username's following": 'seguindo de {{username}}', + "username's used relays": 'relés usados por {{username}}', + "username's muted": '{{username}} silenciado', + Login: 'Entrar', + 'Follows you': 'Segue você', + 'Relay Settings': 'Configurações de Relé', + 'Relay set name': 'Nome do conjunto de relé', + 'Add a new relay set': 'Adicionar um novo conjunto de relé', + Add: 'Adicionar', + 'n relays': '{{n}} relés', + Rename: 'Renomear', + 'Copy share link': 'Copiar link de compartilhamento', + Delete: 'Excluir', + 'Relay already exists': 'Relé já existe', + 'invalid relay URL': 'URL de relé inválida', + 'Add a new relay': 'Adicionar um novo relé', + back: 'voltar', + 'Lost in the void': 'Perdido no vazio', + 'Carry me home': 'Me leve para casa', + 'no replies': 'sem respostas', + 'Reply to': 'Responder a', + Search: 'Pesquisar', + 'The relays you are connected to do not support search': + 'Os relés aos quais você está conectado não suportam pesquisa', + 'supports search': 'suporta pesquisa', + 'Show more...': 'Mostrar mais...', + 'All users': 'Todos os usuários', + 'Display replies': 'Exibir respostas', + Notes: 'Notas', + Replies: 'Respostas', + Notifications: 'Notificações', + 'no more notifications': 'não há mais notificações', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'Usar login com chave privada é inseguro. Recomenda-se utilizar uma extensão do navegador, como alby, nostr-keyx ou nos2x.', + 'Login with Browser Extension': 'Entrar com Extensão do Navegador', + 'Login with Bunker': 'Entrar com Bunker', + 'Login with Private Key': 'Entrar com Chave Privada', + 'reload notes': 'recarregar notas', + 'Logged in Accounts': 'Contas Conectadas', + 'Add an Account': 'Adicionar uma Conta', + 'More options': 'Mais opções', + 'Add client tag': 'Adicionar tag de cliente', + 'Show others this was sent via Jumble': 'Mostrar aos outros que isso foi enviado via Jumble', + 'Are you sure you want to logout?': 'Tem certeza de que deseja sair?', + 'relay sets': 'conjuntos de relé', + edit: 'editar', + Languages: 'Idiomas', + Theme: 'Tema', + System: 'Sistema', + Light: 'Claro', + Dark: 'Escuro', + Temporary: 'Temporário', + 'Choose a relay set': 'Escolha um conjunto de relé', + 'Switch account': 'Trocar de Conta', + Pictures: 'Imagens', + 'Picture note': 'Nota de Imagem', + 'A special note for picture-first clients like Olas': + 'Uma nota especial para clientes que priorizam imagens, como Olas', + 'Picture note requires images': 'Nota de imagem requer imagens', + Relays: 'Relés', + image: 'imagem', + 'Normal Note': 'Nota Normal', + 'Picture Note': 'Nota de Imagem', + 'R & W': 'Leitura & Escrita', + Read: 'Ler', + Write: 'Escrever', + 'Push to relays': 'Enviar para relés', + 'Push Successful': 'Envio Bem-sucedido', + 'Successfully pushed relay sets to relays': 'Conjuntos de relé enviados com sucesso', + 'Pull from relays': 'Receber de relés', + 'Select the relay sets you want to pull': 'Selecione os conjuntos de relé que deseja receber', + 'No relay sets found': 'Nenhum conjunto de relé encontrado', + 'Pull n relay sets': 'Receber {{n}} conjuntos de relé', + Pull: 'Receber', + 'Select all': 'Selecionar todos', + 'Relay Sets': 'Conjuntos de relé', + 'Read & Write Relays': 'Relés de Leitura & Escrita', + 'read relays description': + 'Relés de leitura são usados para buscar eventos sobre você. Outros usuários publicarão os eventos que deseja ver nesses relés.', + 'write relays description': + 'Relés de escrita são usados para publicar seus eventos. Outros usuários buscarão seus eventos nesses relés.', + 'read & write relays notice': + 'O número de servidores de leitura e escrita deve ser mantido entre 2 e 4, idealmente.', + "Don't have an account yet?": 'Não tem uma conta ainda?', + 'or simply generate a private key': 'ou simplesmente gere uma chave privada', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Esta é uma chave privada. Não a compartilhe com ninguém. Mantenha-a segura, pois não poderá recuperá-la se perdê-la.', + Edit: 'Editar', + Save: 'Salvar', + 'Display Name': 'Nome de Exibição', + Bio: 'Biografia', + 'Nostr Address (NIP-05)': 'Endereço Nostr (NIP-05)', + 'Invalid NIP-05 address': 'Endereço NIP-05 inválido', + 'Copy private key': 'Copiar chave privada', + 'Enter the password to decrypt your ncryptsec': + 'Digite a senha para descriptografar seu ncryptsec', + Back: 'Voltar', + 'optional: encrypt nsec': 'opcional: criptografar nsec', + password: 'senha', + 'Sign up': 'Registrar-se', + 'Save to': 'Salvar em', + 'Enter a name for the new relay set': 'Digite um nome para o novo conjunto de relé', + 'Save to a new relay set': 'Salvar em um novo conjunto de relé', + Mute: 'Silenciar', + Muted: 'Silenciado', + Unmute: 'Ativar som', + 'Mute user': 'Silenciar usuário', + 'Unmute user': 'Ativar som do usuário', + 'Append n relays': 'Adicionar {{n}} relés', + Append: 'Adicionar', + 'Select relays to append': 'Selecione os relés para adicionar', + 'calculating...': 'calculando...', + 'Calculate optimal read relays': 'Calcular relés de leitura ideais', + 'Login to set': 'Entrar no conjunto', + 'Please login to view following feed': 'Por favor, faça login para ver o feed de seguidores', + 'Send only to r': 'Enviar apenas para {{r}}', + 'Send only to these relays': 'Enviar apenas para estes relés', + Explore: 'Explorar', + 'Search relays': 'Pesquisar relés', + relayInfoBadgeAuth: 'Auth', + relayInfoBadgeSearch: 'Pesquisar', + relayInfoBadgePayment: 'Pagamento', + Operator: 'Operador', + Contact: 'Contato', + Software: 'Software', + Version: 'Versão', + 'Random Relays': 'Relés Aleatórios', + randomRelaysRefresh: 'Atualizar', + 'Explore more': 'Explorar mais', + 'Payment page': 'Página de Pagamento', + 'Supported NIPs': 'NIPs Suportados', + 'Open in a': 'Abrir em {{a}}', + 'Cannot handle event of kind k': 'Não é possível lidar com o evento do tipo {{k}}', + 'Sorry! The note cannot be found 😔': 'Desculpe! A nota não pode ser encontrada 😔', + 'This user has been muted': 'Este usuário foi silenciado', + Wallet: 'Carteira', + Sats: 'Sats', + sats: 'sats', + 'Zap to': 'Zap para', + 'Zap n sats': 'Zap {{n}} sats', + zapComment: 'Comentário', + 'Default zap amount': 'Valor padrão do zap', + 'Default zap comment': 'Comentário padrão do zap', + 'Lightning Address (or LNURL)': 'Endereço Lightning (ou LNURL)', + 'Quick zap': 'Zap Rápido', + 'If enabled, you can zap with a single click': 'Se ativado, você pode enviar zap com um clique', + All: 'Tudo', + Reactions: 'Reações', + Zaps: 'Zaps', + 'Enjoying Jumble?': 'Gostando do Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'Sua doação me ajuda a manter o Jumble e torná-lo melhor! 😊', + 'Earlier notifications': 'Notificações anteriores', + 'Temporarily display this note': 'Exibir esta nota temporariamente' + } +} diff --git a/src/i18n/locales/ru.ts b/src/i18n/locales/ru.ts new file mode 100644 index 0000000..92b9071 --- /dev/null +++ b/src/i18n/locales/ru.ts @@ -0,0 +1,211 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'Добро пожаловать! 🥳', + About: 'О нас', + 'New Note': 'Новая заметка', + Post: 'Опубликовать', + Home: 'Главная', + 'Relay settings': 'Настройки ретрансляции', + Settings: 'Настройки', + SidebarRelays: 'Ретрансляторы', + Refresh: 'Обновить', + Profile: 'Профиль', + Logout: 'Выйти', + Following: 'Подписки', + followings: 'подписки', + reposted: 'репостнул', + 'just now': 'только что', + 'n minutes ago': '{{n}} минут назад', + 'n m': '{{n}}м', + 'n hours ago': '{{n}} часов назад', + 'n h': '{{n}}ч', + 'n days ago': '{{n}} дней назад', + 'n d': '{{n}}д', + date: '{{timestamp, date}}', + Follow: 'Подписаться', + Unfollow: 'Отписаться', + 'Follow failed': 'Ошибка подписки', + 'Unfollow failed': 'Ошибка отписки', + 'show new notes': 'показать новые заметки', + 'loading...': 'загрузка...', + 'no more notes': 'больше нет заметок', + 'reply to': 'ответить', + reply: 'ответить', + Reply: 'Ответить', + 'load more older replies': 'загрузить больше старых ответов', + 'Write something...': 'Напишите что-нибудь...', + Cancel: 'Отмена', + Mentions: 'Упоминания', + 'Failed to post': 'Ошибка публикации', + 'Post successful': 'Успешно опубликовано', + 'Your post has been published': 'Ваш пост опубликован', + Repost: 'Репост', + Quote: 'Цитировать', + 'Copy event ID': 'Копировать ID события', + 'Copy user ID': 'Копировать ID пользователя', + 'View raw event': 'Посмотреть исходное событие', + Like: 'Нравится', + 'switch to light theme': 'переключить на светлую тему', + 'switch to dark theme': 'переключить на тёмную тему', + 'switch to system theme': 'переключить на системную тему', + Note: 'Заметка', + note: 'заметка', + "username's following": 'Подписки пользователя {{username}}', + "username's used relays": 'Ретрансляторы пользователя {{username}}', + "username's muted": '{{username}} заблокирован', + Login: 'Войти', + 'Follows you': 'Подписан на вас', + 'Relay Settings': 'Настройки ретрансляторов', + 'Relay set name': 'Имя набора ретрансляторов', + 'Add a new relay set': 'Добавить новый набор ретрансляторов', + Add: 'Добавить', + 'n relays': '{{n}} ретрансляторов', + Rename: 'Переименовать', + 'Copy share link': 'Скопировать ссылку для обмена', + Delete: 'Удалить', + 'Relay already exists': 'Ретранслятор уже существует', + 'invalid relay URL': 'неверный URL ретранслятора', + 'Add a new relay': 'Добавить новый ретранслятор', + back: 'назад', + 'Lost in the void': 'Потерялся в пустоте', + 'Carry me home': 'Отведи меня домой', + 'no replies': 'нет ответов', + 'Reply to': 'Ответить', + Search: 'Поиск', + 'The relays you are connected to do not support search': + 'Подключённые ретрансляторы не поддерживают поиск', + 'supports search': 'поддерживает поиск', + 'Show more...': 'Показать больше...', + 'All users': 'Все пользователи', + 'Display replies': 'Показать ответы', + Notes: 'Заметки', + Replies: 'Ответы', + Notifications: 'Уведомления', + 'no more notifications': 'нет новых уведомлений', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'Вход с использованием приватного ключа небезопасен. Рекомендуется использовать расширение браузера для входа, например alby, nostr-keyx или nos2x.', + 'Login with Browser Extension': 'Войти через расширение браузера', + 'Login with Bunker': 'Войти через Bunker', + 'Login with Private Key': 'Войти с приватным ключом', + 'reload notes': 'перезагрузить заметки', + 'Logged in Accounts': 'Вошедшие аккаунты', + 'Add an Account': 'Добавить аккаунт', + 'More options': 'Больше опций', + 'Add client tag': 'Добавить тег клиента', + 'Show others this was sent via Jumble': + 'Показать другим, что сообщение отправлено через Jumble', + 'Are you sure you want to logout?': 'Вы уверены, что хотите выйти?', + 'relay sets': 'наборы ретрансляторов', + edit: 'редактировать', + Languages: 'Языки', + Theme: 'Тема', + System: 'Система', + Light: 'Светлая', + Dark: 'Тёмная', + Temporary: 'Временная', + 'Choose a relay set': 'Выберите набор ретрансляторов', + 'Switch account': 'Сменить аккаунт', + Pictures: 'Изображения', + 'Picture note': 'Заметка с изображением', + 'A special note for picture-first clients like Olas': + 'Особенная заметка для клиентов с приоритетом изображений, таких как Olas', + 'Picture note requires images': 'Заметка с изображением требует наличия изображений', + Relays: 'Ретрансляторы', + image: 'изображение', + 'Normal Note': 'Обычная заметка', + 'Picture Note': 'Заметка с изображением', + 'R & W': 'Чтение & Запись', + Read: 'Читать', + Write: 'Писать', + 'Push to relays': 'Отправить на ретрансляторы', + 'Push Successful': 'Отправка успешна', + 'Successfully pushed relay sets to relays': 'Наборы ретрансляторов успешно отправлены', + 'Pull from relays': 'Получить с ретрансляторов', + 'Select the relay sets you want to pull': 'Выберите наборы ретрансляторов для получения', + 'No relay sets found': 'Наборы ретрансляторов не найдены', + 'Pull n relay sets': 'Получить {{n}} наборов ретрансляторов', + Pull: 'Получить', + 'Select all': 'Выбрать все', + 'Relay Sets': 'Наборы ретрансляторов', + 'Read & Write Relays': 'Ретрансляторы для чтения и записи', + 'read relays description': + 'Ретрансляторы для чтения используются для получения событий о вас. Другие пользователи публикуют события, которые вы должны увидеть, через ваши ретрансляторы для чтения.', + 'write relays description': + 'Ретрансляторы для записи используются для публикации ваших событий. Другие пользователи получают ваши события через ретрансляторы для записи.', + 'read & write relays notice': + 'Количество серверов для чтения и записи должно быть оптимально от 2 до 4.', + "Don't have an account yet?": 'Ещё нет аккаунта?', + 'or simply generate a private key': 'или просто сгенерируйте приватный ключ', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Это приватный ключ. Не делитесь им с другими. Храните его в надёжном месте – восстановить его будет невозможно.', + Edit: 'Редактировать', + Save: 'Сохранить', + 'Display Name': 'Отображаемое имя', + Bio: 'О себе', + 'Nostr Address (NIP-05)': 'Адрес Nostr (NIP-05)', + 'Invalid NIP-05 address': 'Неверный адрес NIP-05', + 'Copy private key': 'Скопировать приватный ключ', + 'Enter the password to decrypt your ncryptsec': + 'Введите пароль для расшифровки вашего ncryptsec', + Back: 'Назад', + 'optional: encrypt nsec': 'необязательно: зашифровать nsec', + password: 'пароль', + 'Sign up': 'Зарегистрироваться', + 'Save to': 'Сохранить в', + 'Enter a name for the new relay set': 'Введите имя нового набора ретрансляторов', + 'Save to a new relay set': 'Сохранить в новый набор ретрансляторов', + Mute: 'Заглушить', + Muted: 'Заглушено', + Unmute: 'Отменить заглушку', + 'Mute user': 'Заглушить пользователя', + 'Unmute user': 'Снять заглушку с пользователя', + 'Append n relays': 'Добавить {{n}} ретрансляторов', + Append: 'Добавить', + 'Select relays to append': 'Выберите ретрансляторы для добавления', + 'calculating...': 'вычисление...', + 'Calculate optimal read relays': 'Рассчитать оптимальные ретрансляторы для чтения', + 'Login to set': 'Войти в набор', + 'Please login to view following feed': 'Войдите, чтобы увидеть ленту подписок', + 'Send only to r': 'Отправить только на {{r}}', + 'Send only to these relays': 'Отправить только на эти ретрансляторы', + Explore: 'Обзор', + 'Search relays': 'Поиск ретрансляторов', + relayInfoBadgeAuth: 'Авторизация', + relayInfoBadgeSearch: 'Поиск', + relayInfoBadgePayment: 'Платежи', + Operator: 'Оператор', + Contact: 'Контакты', + Software: 'Программное обеспечение', + Version: 'Версия', + 'Random Relays': 'Случайные ретрансляторы', + randomRelaysRefresh: 'Обновить', + 'Explore more': 'Исследовать больше', + 'Payment page': 'Страница оплаты', + 'Supported NIPs': 'Поддерживаемые NIP', + 'Open in a': 'Открыть в {{a}}', + 'Cannot handle event of kind k': 'Невозможно обработать событие типа {{k}}', + 'Sorry! The note cannot be found 😔': 'Извините! Заметка не найдена 😔', + 'This user has been muted': 'Этот пользователь заглушен', + Wallet: 'Кошелёк', + Sats: 'Сатс', + sats: 'сатс', + 'Zap to': 'Зап отправить', + 'Zap n sats': 'Зап {{n}} сатс', + zapComment: 'Комментарий', + 'Default zap amount': 'Стандартная сумма для зап', + 'Default zap comment': 'Стандартный комментарий для зап', + 'Lightning Address (or LNURL)': 'Lightning-адрес (или LNURL)', + 'Quick zap': 'Быстрый зап', + 'If enabled, you can zap with a single click': + 'Если включено, можно отправить зап одним кликом', + All: 'Все', + Reactions: 'Реакции', + Zaps: 'Запы', + 'Enjoying Jumble?': 'Нравится Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'Ваше пожертвование помогает поддерживать и улучшать Jumble! 😊', + 'Earlier notifications': 'Ранние уведомления', + 'Temporarily display this note': 'Временно отобразить эту заметку' + } +} diff --git a/src/i18n/zh.ts b/src/i18n/locales/zh.ts similarity index 98% rename from src/i18n/zh.ts rename to src/i18n/locales/zh.ts index 1d8c9a1..80b98af 100644 --- a/src/i18n/zh.ts +++ b/src/i18n/locales/zh.ts @@ -78,7 +78,7 @@ export default { 'All users': '所有用户', 'Display replies': '显示回复', Notes: '笔记', - 'Notes & Replies': '笔记 & 回复', + Replies: '回复', Notifications: '通知', 'no more notifications': '到底了', 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': @@ -202,6 +202,7 @@ export default { 'Enjoying Jumble?': '喜欢 Jumble 吗?', 'Your donation helps me maintain Jumble and make it better! 😊': '您的捐赠帮助我维护 Jumble 并使其更好!😊', - 'Earlier notifications': '更早的通知' + 'Earlier notifications': '更早的通知', + 'Temporarily display this note': '临时显示此笔记' } } diff --git a/src/pages/secondary/SettingsPage/index.tsx b/src/pages/secondary/SettingsPage/index.tsx index 631bdbe..bd1fa19 100644 --- a/src/pages/secondary/SettingsPage/index.tsx +++ b/src/pages/secondary/SettingsPage/index.tsx @@ -1,6 +1,7 @@ import AboutInfoDialog from '@/components/AboutInfoDialog' import Donation from '@/components/Donation' import { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/select' +import { LocalizedLanguageNames } from '@/i18n' import SecondaryPageLayout from '@/layouts/SecondaryPageLayout' import { toRelaySettings, toWallet } from '@/lib/link' import { cn } from '@/lib/utils' @@ -49,10 +50,11 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => { - English - 简体中文 - Polski - + {Object.entries(LocalizedLanguageNames).map(([key, value]) => ( + + {value} + + ))} diff --git a/src/types.ts b/src/types.ts index 9e277c1..e22b1de 100644 --- a/src/types.ts +++ b/src/types.ts @@ -95,7 +95,7 @@ export type TAccountPointer = Pick export type TFeedType = 'following' | 'relays' | 'temporary' -export type TLanguage = 'en' | 'zh' +export type TLanguage = 'en' | 'zh' | 'pl' export type TImageInfo = { url: string; blurHash?: string; dim?: { width: number; height: number } }