From 9bcfac5d8a72b9fa9138cca08ef1a9c55069cbb0 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Fri, 13 Feb 2026 22:33:25 +0100 Subject: [PATCH] feat: add i18n support for 14 languages Add translations for de, es, es-419, fr, hi, id, it, nl, pl, pt, pt-BR, sr, sv, zh-Hans-CN to match upstream Indiekit's supported locales. Also add missing localesDirectory getter. Co-Authored-By: Claude Opus 4.6 --- index.js | 9 ++++ locales/de.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/es-419.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/es.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/fr.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/hi.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/id.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/it.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/nl.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/pl.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/pt-BR.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/pt.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/sr.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/sv.json | 104 ++++++++++++++++++++++++++++++++++++++++ locales/zh-Hans-CN.json | 104 ++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 16 files changed, 1466 insertions(+), 1 deletion(-) create mode 100644 locales/de.json create mode 100644 locales/es-419.json create mode 100644 locales/es.json create mode 100644 locales/fr.json create mode 100644 locales/hi.json create mode 100644 locales/id.json create mode 100644 locales/it.json create mode 100644 locales/nl.json create mode 100644 locales/pl.json create mode 100644 locales/pt-BR.json create mode 100644 locales/pt.json create mode 100644 locales/sr.json create mode 100644 locales/sv.json create mode 100644 locales/zh-Hans-CN.json diff --git a/index.js b/index.js index 9637d7b..88aefd4 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ import path from "node:path"; +import { fileURLToPath } from "node:url"; import express from "express"; @@ -29,6 +30,14 @@ export default class MicrosubEndpoint { this.mountPath = this.options.mountPath; } + /** + * Locales directory path + * @returns {string} Path to locales directory + */ + get localesDirectory() { + return path.join(path.dirname(fileURLToPath(import.meta.url)), "locales"); + } + /** * Navigation items for Indiekit admin * @returns {object} Navigation item configuration diff --git a/locales/de.json b/locales/de.json new file mode 100644 index 0000000..b1f909c --- /dev/null +++ b/locales/de.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Leser", + "empty": "Keine Elemente zum Anzeigen", + "markAllRead": "Alle als gelesen markieren", + "showRead": "Gelesene anzeigen ({{count}})", + "hideRead": "Gelesene Elemente ausblenden", + "allRead": "Alles aufgeholt!", + "newer": "Neuer", + "older": "Älter" + }, + "channels": { + "title": "Kanäle", + "name": "Kanalname", + "new": "Neuer Kanal", + "create": "Kanal erstellen", + "delete": "Kanal löschen", + "settings": "Kanaleinstellungen", + "empty": "Noch keine Kanäle. Erstellen Sie einen, um zu beginnen.", + "notifications": "Benachrichtigungen" + }, + "timeline": { + "title": "Zeitleiste", + "empty": "Keine Elemente in diesem Kanal", + "markRead": "Als gelesen markieren", + "markUnread": "Als ungelesen markieren", + "remove": "Entfernen" + }, + "feeds": { + "title": "Feeds", + "follow": "Folgen", + "subscribe": "Einen Feed abonnieren", + "unfollow": "Entfolgen", + "empty": "Keine Feeds in diesem Kanal abonniert", + "url": "Feed-URL", + "urlPlaceholder": "https://beispiel.de/feed.xml", + "edit": "Feed bearbeiten", + "rediscover": "Feed neu entdecken", + "refresh": "Jetzt aktualisieren", + "status": { + "active": "Aktiv", + "error": "Fehler", + "stale": "Veraltet" + } + }, + "item": { + "reply": "Antworten", + "like": "Gefällt mir", + "repost": "Teilen", + "bookmark": "Lesezeichen", + "viewOriginal": "Original anzeigen" + }, + "compose": { + "title": "Verfassen", + "content": "Was beschäftigt Sie?", + "comment": "Kommentar hinzufügen (optional)", + "commentHint": "Ihr Kommentar wird bei der Syndizierung mit einbezogen", + "syndicateTo": "Syndizieren an", + "syndicateHint": "Wählen Sie aus, wo dies quergepostet werden soll", + "submit": "Veröffentlichen", + "cancel": "Abbrechen", + "replyTo": "Antworten an", + "likeOf": "Gefällt mir", + "repostOf": "Teilen", + "bookmarkOf": "Lesezeichen setzen" + }, + "settings": { + "title": "{{channel}}-Einstellungen", + "excludeTypes": "Interaktionstypen ausschließen", + "excludeTypesHelp": "Wählen Sie Beitragstypen aus, die in diesem Kanal ausgeblendet werden sollen", + "excludeRegex": "Ausschlussmuster", + "excludeRegexHelp": "Regulärer Ausdruck zum Herausfiltern übereinstimmender Inhalte", + "save": "Einstellungen speichern", + "dangerZone": "Gefahrenzone", + "deleteWarning": "Das Löschen dieses Kanals entfernt dauerhaft alle Feeds und Elemente. Diese Aktion kann nicht rückgängig gemacht werden.", + "deleteConfirm": "Sind Sie sicher, dass Sie diesen Kanal und alle seine Inhalte löschen möchten?", + "delete": "Kanal löschen", + "types": { + "like": "Gefällt mir", + "repost": "Geteilte Beiträge", + "bookmark": "Lesezeichen", + "reply": "Antworten", + "checkin": "Check-ins" + } + }, + "search": { + "title": "Suchen", + "placeholder": "URL oder Suchbegriff eingeben", + "submit": "Suchen", + "noResults": "Keine Ergebnisse gefunden" + }, + "preview": { + "title": "Vorschau", + "subscribe": "Diesen Feed abonnieren" + }, + "error": { + "channelNotFound": "Kanal nicht gefunden", + "feedNotFound": "Feed nicht gefunden", + "invalidUrl": "Ungültige URL", + "invalidAction": "Ungültige Aktion" + } + } +} diff --git a/locales/es-419.json b/locales/es-419.json new file mode 100644 index 0000000..262ccd6 --- /dev/null +++ b/locales/es-419.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Lector", + "empty": "No hay elementos para mostrar", + "markAllRead": "Marcar todo como leído", + "showRead": "Mostrar leídos ({{count}})", + "hideRead": "Ocultar elementos leídos", + "allRead": "¡Todo al día!", + "newer": "Más reciente", + "older": "Más antiguo" + }, + "channels": { + "title": "Canales", + "name": "Nombre del canal", + "new": "Nuevo canal", + "create": "Crear canal", + "delete": "Eliminar canal", + "settings": "Configuración del canal", + "empty": "Todavía no hay canales. Creá uno para empezar.", + "notifications": "Notificaciones" + }, + "timeline": { + "title": "Línea de tiempo", + "empty": "No hay elementos en este canal", + "markRead": "Marcar como leído", + "markUnread": "Marcar como no leído", + "remove": "Eliminar" + }, + "feeds": { + "title": "Feeds", + "follow": "Seguir", + "subscribe": "Suscribirse a un feed", + "unfollow": "Dejar de seguir", + "empty": "No se sigue ningún feed en este canal", + "url": "URL del feed", + "urlPlaceholder": "https://ejemplo.com/feed.xml", + "edit": "Editar feed", + "rediscover": "Redescubrir feed", + "refresh": "Actualizar ahora", + "status": { + "active": "Activo", + "error": "Error", + "stale": "Obsoleto" + } + }, + "item": { + "reply": "Responder", + "like": "Me gusta", + "repost": "Repostear", + "bookmark": "Marcador", + "viewOriginal": "Ver original" + }, + "compose": { + "title": "Redactar", + "content": "¿Qué estás pensando?", + "comment": "Agregar un comentario (opcional)", + "commentHint": "Tu comentario se incluirá cuando esto se sindique", + "syndicateTo": "Sindicar a", + "syndicateHint": "Seleccioná dónde publicar esto", + "submit": "Publicar", + "cancel": "Cancelar", + "replyTo": "Respondiendo a", + "likeOf": "Me gusta", + "repostOf": "Reposteando", + "bookmarkOf": "Marcando" + }, + "settings": { + "title": "Configuración de {{channel}}", + "excludeTypes": "Excluir tipos de interacción", + "excludeTypesHelp": "Seleccioná los tipos de publicaciones que querés ocultar de este canal", + "excludeRegex": "Patrón de exclusión", + "excludeRegexHelp": "Expresión regular para filtrar contenido coincidente", + "save": "Guardar configuración", + "dangerZone": "Zona de peligro", + "deleteWarning": "Eliminar este canal eliminará permanentemente todos los feeds y elementos. Esta acción no se puede deshacer.", + "deleteConfirm": "¿Estás seguro de que querés eliminar este canal y todo su contenido?", + "delete": "Eliminar canal", + "types": { + "like": "Me gusta", + "repost": "Reposteos", + "bookmark": "Marcadores", + "reply": "Respuestas", + "checkin": "Registros" + } + }, + "search": { + "title": "Buscar", + "placeholder": "Ingresá URL o término de búsqueda", + "submit": "Buscar", + "noResults": "No se encontraron resultados" + }, + "preview": { + "title": "Vista previa", + "subscribe": "Suscribirse a este feed" + }, + "error": { + "channelNotFound": "Canal no encontrado", + "feedNotFound": "Feed no encontrado", + "invalidUrl": "URL no válida", + "invalidAction": "Acción no válida" + } + } +} diff --git a/locales/es.json b/locales/es.json new file mode 100644 index 0000000..a9d926f --- /dev/null +++ b/locales/es.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Lector", + "empty": "No hay elementos para mostrar", + "markAllRead": "Marcar todo como leído", + "showRead": "Mostrar leídos ({{count}})", + "hideRead": "Ocultar elementos leídos", + "allRead": "¡Todo al día!", + "newer": "Más reciente", + "older": "Más antiguo" + }, + "channels": { + "title": "Canales", + "name": "Nombre del canal", + "new": "Nuevo canal", + "create": "Crear canal", + "delete": "Eliminar canal", + "settings": "Configuración del canal", + "empty": "Aún no hay canales. Crea uno para empezar.", + "notifications": "Notificaciones" + }, + "timeline": { + "title": "Cronología", + "empty": "No hay elementos en este canal", + "markRead": "Marcar como leído", + "markUnread": "Marcar como no leído", + "remove": "Eliminar" + }, + "feeds": { + "title": "Fuentes", + "follow": "Seguir", + "subscribe": "Suscribirse a una fuente", + "unfollow": "Dejar de seguir", + "empty": "No se sigue ninguna fuente en este canal", + "url": "URL de la fuente", + "urlPlaceholder": "https://ejemplo.com/feed.xml", + "edit": "Editar fuente", + "rediscover": "Redescubrir fuente", + "refresh": "Actualizar ahora", + "status": { + "active": "Activa", + "error": "Error", + "stale": "Obsoleta" + } + }, + "item": { + "reply": "Responder", + "like": "Me gusta", + "repost": "Republicar", + "bookmark": "Marcador", + "viewOriginal": "Ver original" + }, + "compose": { + "title": "Redactar", + "content": "¿Qué estás pensando?", + "comment": "Añadir un comentario (opcional)", + "commentHint": "Tu comentario se incluirá cuando esto se sindique", + "syndicateTo": "Sindicar a", + "syndicateHint": "Selecciona dónde publicar esto", + "submit": "Publicar", + "cancel": "Cancelar", + "replyTo": "Respondiendo a", + "likeOf": "Me gusta", + "repostOf": "Republicando", + "bookmarkOf": "Marcando" + }, + "settings": { + "title": "Configuración de {{channel}}", + "excludeTypes": "Excluir tipos de interacción", + "excludeTypesHelp": "Selecciona los tipos de publicaciones que deseas ocultar de este canal", + "excludeRegex": "Patrón de exclusión", + "excludeRegexHelp": "Expresión regular para filtrar contenido coincidente", + "save": "Guardar configuración", + "dangerZone": "Zona de peligro", + "deleteWarning": "Eliminar este canal eliminará permanentemente todas las fuentes y elementos. Esta acción no se puede deshacer.", + "deleteConfirm": "¿Estás seguro de que deseas eliminar este canal y todo su contenido?", + "delete": "Eliminar canal", + "types": { + "like": "Me gusta", + "repost": "Republicaciones", + "bookmark": "Marcadores", + "reply": "Respuestas", + "checkin": "Registros" + } + }, + "search": { + "title": "Buscar", + "placeholder": "Introduce URL o término de búsqueda", + "submit": "Buscar", + "noResults": "No se encontraron resultados" + }, + "preview": { + "title": "Vista previa", + "subscribe": "Suscribirse a esta fuente" + }, + "error": { + "channelNotFound": "Canal no encontrado", + "feedNotFound": "Fuente no encontrada", + "invalidUrl": "URL no válida", + "invalidAction": "Acción no válida" + } + } +} diff --git a/locales/fr.json b/locales/fr.json new file mode 100644 index 0000000..e6cb6f4 --- /dev/null +++ b/locales/fr.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Lecteur", + "empty": "Aucun élément à afficher", + "markAllRead": "Tout marquer comme lu", + "showRead": "Afficher les lus ({{count}})", + "hideRead": "Masquer les éléments lus", + "allRead": "Tout est à jour !", + "newer": "Plus récent", + "older": "Plus ancien" + }, + "channels": { + "title": "Chaînes", + "name": "Nom de la chaîne", + "new": "Nouvelle chaîne", + "create": "Créer une chaîne", + "delete": "Supprimer la chaîne", + "settings": "Paramètres de la chaîne", + "empty": "Aucune chaîne pour le moment. Créez-en une pour commencer.", + "notifications": "Notifications" + }, + "timeline": { + "title": "Fil d'actualité", + "empty": "Aucun élément dans cette chaîne", + "markRead": "Marquer comme lu", + "markUnread": "Marquer comme non lu", + "remove": "Retirer" + }, + "feeds": { + "title": "Flux", + "follow": "Suivre", + "subscribe": "S'abonner à un flux", + "unfollow": "Ne plus suivre", + "empty": "Aucun flux suivi dans cette chaîne", + "url": "URL du flux", + "urlPlaceholder": "https://exemple.com/feed.xml", + "edit": "Modifier le flux", + "rediscover": "Redécouvrir le flux", + "refresh": "Actualiser maintenant", + "status": { + "active": "Actif", + "error": "Erreur", + "stale": "Périmé" + } + }, + "item": { + "reply": "Répondre", + "like": "J'aime", + "repost": "Repartager", + "bookmark": "Marque-page", + "viewOriginal": "Voir l'original" + }, + "compose": { + "title": "Composer", + "content": "Qu'avez-vous en tête ?", + "comment": "Ajouter un commentaire (facultatif)", + "commentHint": "Votre commentaire sera inclus lors de la syndication", + "syndicateTo": "Syndiquer vers", + "syndicateHint": "Sélectionnez où publier ceci", + "submit": "Publier", + "cancel": "Annuler", + "replyTo": "En réponse à", + "likeOf": "J'aime", + "repostOf": "Repartage", + "bookmarkOf": "Mise en marque-page" + }, + "settings": { + "title": "Paramètres de {{channel}}", + "excludeTypes": "Exclure les types d'interaction", + "excludeTypesHelp": "Sélectionnez les types de publications à masquer de cette chaîne", + "excludeRegex": "Modèle d'exclusion", + "excludeRegexHelp": "Expression régulière pour filtrer le contenu correspondant", + "save": "Enregistrer les paramètres", + "dangerZone": "Zone dangereuse", + "deleteWarning": "La suppression de cette chaîne supprimera définitivement tous les flux et éléments. Cette action ne peut pas être annulée.", + "deleteConfirm": "Êtes-vous sûr de vouloir supprimer cette chaîne et tout son contenu ?", + "delete": "Supprimer la chaîne", + "types": { + "like": "J'aime", + "repost": "Repartages", + "bookmark": "Marque-pages", + "reply": "Réponses", + "checkin": "Enregistrements" + } + }, + "search": { + "title": "Rechercher", + "placeholder": "Entrez une URL ou un terme de recherche", + "submit": "Rechercher", + "noResults": "Aucun résultat trouvé" + }, + "preview": { + "title": "Aperçu", + "subscribe": "S'abonner à ce flux" + }, + "error": { + "channelNotFound": "Chaîne introuvable", + "feedNotFound": "Flux introuvable", + "invalidUrl": "URL invalide", + "invalidAction": "Action invalide" + } + } +} diff --git a/locales/hi.json b/locales/hi.json new file mode 100644 index 0000000..a5846f5 --- /dev/null +++ b/locales/hi.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "रीडर", + "empty": "प्रदर्शित करने के लिए कोई आइटम नहीं", + "markAllRead": "सभी को पढ़ा हुआ चिह्नित करें", + "showRead": "पढ़े हुए दिखाएं ({{count}})", + "hideRead": "पढ़े हुए आइटम छिपाएं", + "allRead": "सब पकड़ लिया!", + "newer": "नया", + "older": "पुराना" + }, + "channels": { + "title": "चैनल", + "name": "चैनल का नाम", + "new": "नया चैनल", + "create": "चैनल बनाएं", + "delete": "चैनल हटाएं", + "settings": "चैनल सेटिंग्स", + "empty": "अभी तक कोई चैनल नहीं। शुरू करने के लिए एक बनाएं।", + "notifications": "सूचनाएं" + }, + "timeline": { + "title": "टाइमलाइन", + "empty": "इस चैनल में कोई आइटम नहीं", + "markRead": "पढ़ा हुआ चिह्नित करें", + "markUnread": "अपठित चिह्नित करें", + "remove": "हटाएं" + }, + "feeds": { + "title": "फीड", + "follow": "फॉलो करें", + "subscribe": "फीड की सदस्यता लें", + "unfollow": "अनफॉलो करें", + "empty": "इस चैनल में कोई फीड फॉलो नहीं किया गया", + "url": "फीड URL", + "urlPlaceholder": "https://example.com/feed.xml", + "edit": "फीड संपादित करें", + "rediscover": "फीड को फिर से खोजें", + "refresh": "अभी रिफ्रेश करें", + "status": { + "active": "सक्रिय", + "error": "त्रुटि", + "stale": "पुराना" + } + }, + "item": { + "reply": "जवाब दें", + "like": "पसंद करें", + "repost": "रीपोस्ट", + "bookmark": "बुकमार्क", + "viewOriginal": "मूल देखें" + }, + "compose": { + "title": "लिखें", + "content": "आपके मन में क्या है?", + "comment": "एक टिप्पणी जोड़ें (वैकल्पिक)", + "commentHint": "जब यह सिंडिकेट किया जाएगा तो आपकी टिप्पणी शामिल की जाएगी", + "syndicateTo": "इसमें सिंडिकेट करें", + "syndicateHint": "चुनें कि इसे कहां क्रॉस-पोस्ट करना है", + "submit": "पोस्ट करें", + "cancel": "रद्द करें", + "replyTo": "इसका जवाब दे रहे हैं", + "likeOf": "पसंद कर रहे हैं", + "repostOf": "रीपोस्ट कर रहे हैं", + "bookmarkOf": "बुकमार्क कर रहे हैं" + }, + "settings": { + "title": "{{channel}} सेटिंग्स", + "excludeTypes": "इंटरैक्शन प्रकार बाहर करें", + "excludeTypesHelp": "इस चैनल से छिपाने के लिए पोस्ट के प्रकार चुनें", + "excludeRegex": "बहिष्करण पैटर्न", + "excludeRegexHelp": "मिलान सामग्री को फ़िल्टर करने के लिए रेगुलर एक्सप्रेशन", + "save": "सेटिंग्स सहेजें", + "dangerZone": "खतरनाक क्षेत्र", + "deleteWarning": "इस चैनल को हटाने से सभी फीड और आइटम स्थायी रूप से हटा दिए जाएंगे। इस क्रिया को पूर्ववत नहीं किया जा सकता।", + "deleteConfirm": "क्या आप वाकई इस चैनल और इसकी सभी सामग्री को हटाना चाहते हैं?", + "delete": "चैनल हटाएं", + "types": { + "like": "पसंद", + "repost": "रीपोस्ट", + "bookmark": "बुकमार्क", + "reply": "जवाब", + "checkin": "चेक-इन" + } + }, + "search": { + "title": "खोजें", + "placeholder": "URL या खोज शब्द दर्ज करें", + "submit": "खोजें", + "noResults": "कोई परिणाम नहीं मिला" + }, + "preview": { + "title": "पूर्वावलोकन", + "subscribe": "इस फीड की सदस्यता लें" + }, + "error": { + "channelNotFound": "चैनल नहीं मिला", + "feedNotFound": "फीड नहीं मिला", + "invalidUrl": "अमान्य URL", + "invalidAction": "अमान्य क्रिया" + } + } +} diff --git a/locales/id.json b/locales/id.json new file mode 100644 index 0000000..0645bbd --- /dev/null +++ b/locales/id.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Pembaca", + "empty": "Tidak ada item untuk ditampilkan", + "markAllRead": "Tandai semua sudah dibaca", + "showRead": "Tampilkan yang sudah dibaca ({{count}})", + "hideRead": "Sembunyikan item yang sudah dibaca", + "allRead": "Semua sudah terbaca!", + "newer": "Lebih baru", + "older": "Lebih lama" + }, + "channels": { + "title": "Kanal", + "name": "Nama kanal", + "new": "Kanal baru", + "create": "Buat kanal", + "delete": "Hapus kanal", + "settings": "Pengaturan kanal", + "empty": "Belum ada kanal. Buat satu untuk memulai.", + "notifications": "Notifikasi" + }, + "timeline": { + "title": "Lini masa", + "empty": "Tidak ada item di kanal ini", + "markRead": "Tandai sudah dibaca", + "markUnread": "Tandai belum dibaca", + "remove": "Hapus" + }, + "feeds": { + "title": "Umpan", + "follow": "Ikuti", + "subscribe": "Berlangganan umpan", + "unfollow": "Berhenti mengikuti", + "empty": "Tidak ada umpan yang diikuti di kanal ini", + "url": "URL umpan", + "urlPlaceholder": "https://contoh.com/feed.xml", + "edit": "Edit umpan", + "rediscover": "Temukan ulang umpan", + "refresh": "Segarkan sekarang", + "status": { + "active": "Aktif", + "error": "Kesalahan", + "stale": "Basi" + } + }, + "item": { + "reply": "Balas", + "like": "Suka", + "repost": "Pos ulang", + "bookmark": "Tandai halaman", + "viewOriginal": "Lihat asli" + }, + "compose": { + "title": "Tulis", + "content": "Apa yang Anda pikirkan?", + "comment": "Tambahkan komentar (opsional)", + "commentHint": "Komentar Anda akan disertakan saat ini disindikasikan", + "syndicateTo": "Sindikasikan ke", + "syndicateHint": "Pilih di mana akan memposting silang ini", + "submit": "Kirim", + "cancel": "Batal", + "replyTo": "Membalas ke", + "likeOf": "Menyukai", + "repostOf": "Memposting ulang", + "bookmarkOf": "Menandai halaman" + }, + "settings": { + "title": "Pengaturan {{channel}}", + "excludeTypes": "Kecualikan jenis interaksi", + "excludeTypesHelp": "Pilih jenis kiriman untuk disembunyikan dari kanal ini", + "excludeRegex": "Pola pengecualian", + "excludeRegexHelp": "Ekspresi reguler untuk menyaring konten yang cocok", + "save": "Simpan pengaturan", + "dangerZone": "Zona bahaya", + "deleteWarning": "Menghapus kanal ini akan menghapus semua umpan dan item secara permanen. Tindakan ini tidak dapat dibatalkan.", + "deleteConfirm": "Apakah Anda yakin ingin menghapus kanal ini dan semua kontennya?", + "delete": "Hapus kanal", + "types": { + "like": "Suka", + "repost": "Pos ulang", + "bookmark": "Tandai halaman", + "reply": "Balasan", + "checkin": "Check-in" + } + }, + "search": { + "title": "Cari", + "placeholder": "Masukkan URL atau istilah pencarian", + "submit": "Cari", + "noResults": "Tidak ada hasil yang ditemukan" + }, + "preview": { + "title": "Pratinjau", + "subscribe": "Berlangganan umpan ini" + }, + "error": { + "channelNotFound": "Kanal tidak ditemukan", + "feedNotFound": "Umpan tidak ditemukan", + "invalidUrl": "URL tidak valid", + "invalidAction": "Tindakan tidak valid" + } + } +} diff --git a/locales/it.json b/locales/it.json new file mode 100644 index 0000000..f23ca1f --- /dev/null +++ b/locales/it.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Lettore", + "empty": "Nessun elemento da visualizzare", + "markAllRead": "Segna tutto come letto", + "showRead": "Mostra letti ({{count}})", + "hideRead": "Nascondi elementi letti", + "allRead": "Tutto aggiornato!", + "newer": "Più recente", + "older": "Più vecchio" + }, + "channels": { + "title": "Canali", + "name": "Nome del canale", + "new": "Nuovo canale", + "create": "Crea canale", + "delete": "Elimina canale", + "settings": "Impostazioni del canale", + "empty": "Nessun canale ancora. Creane uno per iniziare.", + "notifications": "Notifiche" + }, + "timeline": { + "title": "Timeline", + "empty": "Nessun elemento in questo canale", + "markRead": "Segna come letto", + "markUnread": "Segna come non letto", + "remove": "Rimuovi" + }, + "feeds": { + "title": "Feed", + "follow": "Segui", + "subscribe": "Iscriviti a un feed", + "unfollow": "Smetti di seguire", + "empty": "Nessun feed seguito in questo canale", + "url": "URL del feed", + "urlPlaceholder": "https://esempio.com/feed.xml", + "edit": "Modifica feed", + "rediscover": "Riscopri feed", + "refresh": "Aggiorna ora", + "status": { + "active": "Attivo", + "error": "Errore", + "stale": "Obsoleto" + } + }, + "item": { + "reply": "Rispondi", + "like": "Mi piace", + "repost": "Ricondividi", + "bookmark": "Segnalibro", + "viewOriginal": "Visualizza originale" + }, + "compose": { + "title": "Scrivi", + "content": "A cosa stai pensando?", + "comment": "Aggiungi un commento (facoltativo)", + "commentHint": "Il tuo commento sarà incluso quando questo viene sindacato", + "syndicateTo": "Sindaca a", + "syndicateHint": "Seleziona dove pubblicare questo", + "submit": "Pubblica", + "cancel": "Annulla", + "replyTo": "In risposta a", + "likeOf": "Mi piace", + "repostOf": "Ricondivisione", + "bookmarkOf": "Segnalibro" + }, + "settings": { + "title": "Impostazioni di {{channel}}", + "excludeTypes": "Escludi tipi di interazione", + "excludeTypesHelp": "Seleziona i tipi di post da nascondere da questo canale", + "excludeRegex": "Pattern di esclusione", + "excludeRegexHelp": "Espressione regolare per filtrare i contenuti corrispondenti", + "save": "Salva impostazioni", + "dangerZone": "Zona pericolosa", + "deleteWarning": "L'eliminazione di questo canale rimuoverà permanentemente tutti i feed e gli elementi. Questa azione non può essere annullata.", + "deleteConfirm": "Sei sicuro di voler eliminare questo canale e tutti i suoi contenuti?", + "delete": "Elimina canale", + "types": { + "like": "Mi piace", + "repost": "Ricondivisioni", + "bookmark": "Segnalibri", + "reply": "Risposte", + "checkin": "Check-in" + } + }, + "search": { + "title": "Cerca", + "placeholder": "Inserisci URL o termine di ricerca", + "submit": "Cerca", + "noResults": "Nessun risultato trovato" + }, + "preview": { + "title": "Anteprima", + "subscribe": "Iscriviti a questo feed" + }, + "error": { + "channelNotFound": "Canale non trovato", + "feedNotFound": "Feed non trovato", + "invalidUrl": "URL non valido", + "invalidAction": "Azione non valida" + } + } +} diff --git a/locales/nl.json b/locales/nl.json new file mode 100644 index 0000000..eb7d25d --- /dev/null +++ b/locales/nl.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Lezer", + "empty": "Geen items om weer te geven", + "markAllRead": "Alles als gelezen markeren", + "showRead": "Toon gelezen ({{count}})", + "hideRead": "Verberg gelezen items", + "allRead": "Alles bijgewerkt!", + "newer": "Nieuwer", + "older": "Ouder" + }, + "channels": { + "title": "Kanalen", + "name": "Kanaalnaam", + "new": "Nieuw kanaal", + "create": "Kanaal aanmaken", + "delete": "Kanaal verwijderen", + "settings": "Kanaalinstellingen", + "empty": "Nog geen kanalen. Maak er een om te beginnen.", + "notifications": "Meldingen" + }, + "timeline": { + "title": "Tijdlijn", + "empty": "Geen items in dit kanaal", + "markRead": "Als gelezen markeren", + "markUnread": "Als ongelezen markeren", + "remove": "Verwijderen" + }, + "feeds": { + "title": "Feeds", + "follow": "Volgen", + "subscribe": "Abonneren op een feed", + "unfollow": "Ontvolgen", + "empty": "Geen feeds gevolgd in dit kanaal", + "url": "Feed-URL", + "urlPlaceholder": "https://voorbeeld.nl/feed.xml", + "edit": "Feed bewerken", + "rediscover": "Feed opnieuw ontdekken", + "refresh": "Nu vernieuwen", + "status": { + "active": "Actief", + "error": "Fout", + "stale": "Verouderd" + } + }, + "item": { + "reply": "Reageren", + "like": "Vind ik leuk", + "repost": "Opnieuw plaatsen", + "bookmark": "Bladwijzer", + "viewOriginal": "Origineel bekijken" + }, + "compose": { + "title": "Opstellen", + "content": "Wat houdt je bezig?", + "comment": "Voeg een opmerking toe (optioneel)", + "commentHint": "Je opmerking wordt meegenomen wanneer dit wordt gesyndikeerd", + "syndicateTo": "Syndiceren naar", + "syndicateHint": "Selecteer waar dit moet worden geplaatst", + "submit": "Plaatsen", + "cancel": "Annuleren", + "replyTo": "Reageren op", + "likeOf": "Vind ik leuk", + "repostOf": "Opnieuw plaatsen", + "bookmarkOf": "Bladwijzer maken" + }, + "settings": { + "title": "{{channel}}-instellingen", + "excludeTypes": "Interactietypes uitsluiten", + "excludeTypesHelp": "Selecteer berichttypen om te verbergen uit dit kanaal", + "excludeRegex": "Uitsluitingspatroon", + "excludeRegexHelp": "Reguliere expressie om overeenkomende inhoud te filteren", + "save": "Instellingen opslaan", + "dangerZone": "Gevarenzone", + "deleteWarning": "Het verwijderen van dit kanaal verwijdert permanent alle feeds en items. Deze actie kan niet ongedaan worden gemaakt.", + "deleteConfirm": "Weet je zeker dat je dit kanaal en al zijn inhoud wilt verwijderen?", + "delete": "Kanaal verwijderen", + "types": { + "like": "Vind ik leuks", + "repost": "Opnieuw geplaatste berichten", + "bookmark": "Bladwijzers", + "reply": "Reacties", + "checkin": "Check-ins" + } + }, + "search": { + "title": "Zoeken", + "placeholder": "Voer URL of zoekterm in", + "submit": "Zoeken", + "noResults": "Geen resultaten gevonden" + }, + "preview": { + "title": "Voorbeeld", + "subscribe": "Abonneren op deze feed" + }, + "error": { + "channelNotFound": "Kanaal niet gevonden", + "feedNotFound": "Feed niet gevonden", + "invalidUrl": "Ongeldige URL", + "invalidAction": "Ongeldige actie" + } + } +} diff --git a/locales/pl.json b/locales/pl.json new file mode 100644 index 0000000..7dfc409 --- /dev/null +++ b/locales/pl.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Czytnik", + "empty": "Brak elementów do wyświetlenia", + "markAllRead": "Oznacz wszystkie jako przeczytane", + "showRead": "Pokaż przeczytane ({{count}})", + "hideRead": "Ukryj przeczytane elementy", + "allRead": "Wszystko przeczytane!", + "newer": "Nowsze", + "older": "Starsze" + }, + "channels": { + "title": "Kanały", + "name": "Nazwa kanału", + "new": "Nowy kanał", + "create": "Utwórz kanał", + "delete": "Usuń kanał", + "settings": "Ustawienia kanału", + "empty": "Nie ma jeszcze kanałów. Utwórz jeden, aby rozpocząć.", + "notifications": "Powiadomienia" + }, + "timeline": { + "title": "Oś czasu", + "empty": "Brak elementów w tym kanale", + "markRead": "Oznacz jako przeczytane", + "markUnread": "Oznacz jako nieprzeczytane", + "remove": "Usuń" + }, + "feeds": { + "title": "Kanały RSS", + "follow": "Obserwuj", + "subscribe": "Subskrybuj kanał", + "unfollow": "Przestań obserwować", + "empty": "Brak obserwowanych kanałów w tym kanale", + "url": "URL kanału", + "urlPlaceholder": "https://przyklad.pl/feed.xml", + "edit": "Edytuj kanał", + "rediscover": "Odkryj kanał ponownie", + "refresh": "Odśwież teraz", + "status": { + "active": "Aktywny", + "error": "Błąd", + "stale": "Nieaktualny" + } + }, + "item": { + "reply": "Odpowiedz", + "like": "Polub", + "repost": "Udostępnij", + "bookmark": "Dodaj do zakładek", + "viewOriginal": "Zobacz oryginał" + }, + "compose": { + "title": "Napisz", + "content": "Co Cię nurtuje?", + "comment": "Dodaj komentarz (opcjonalnie)", + "commentHint": "Twój komentarz zostanie uwzględniony podczas syndykacji", + "syndicateTo": "Syndykuj do", + "syndicateHint": "Wybierz, gdzie opublikować ten post", + "submit": "Opublikuj", + "cancel": "Anuluj", + "replyTo": "Odpowiadasz na", + "likeOf": "Lubisz", + "repostOf": "Udostępniasz", + "bookmarkOf": "Dodajesz do zakładek" + }, + "settings": { + "title": "Ustawienia {{channel}}", + "excludeTypes": "Wyklucz typy interakcji", + "excludeTypesHelp": "Wybierz typy postów do ukrycia w tym kanale", + "excludeRegex": "Wzorzec wykluczania", + "excludeRegexHelp": "Wyrażenie regularne do filtrowania pasującej treści", + "save": "Zapisz ustawienia", + "dangerZone": "Strefa niebezpieczna", + "deleteWarning": "Usunięcie tego kanału trwale usunie wszystkie kanały RSS i elementy. Tej czynności nie można cofnąć.", + "deleteConfirm": "Czy na pewno chcesz usunąć ten kanał i całą jego zawartość?", + "delete": "Usuń kanał", + "types": { + "like": "Polubienia", + "repost": "Udostępnienia", + "bookmark": "Zakładki", + "reply": "Odpowiedzi", + "checkin": "Zameldowania" + } + }, + "search": { + "title": "Szukaj", + "placeholder": "Wprowadź URL lub wyszukiwaną frazę", + "submit": "Szukaj", + "noResults": "Nie znaleziono wyników" + }, + "preview": { + "title": "Podgląd", + "subscribe": "Subskrybuj ten kanał" + }, + "error": { + "channelNotFound": "Nie znaleziono kanału", + "feedNotFound": "Nie znaleziono kanału RSS", + "invalidUrl": "Nieprawidłowy URL", + "invalidAction": "Nieprawidłowa akcja" + } + } +} diff --git a/locales/pt-BR.json b/locales/pt-BR.json new file mode 100644 index 0000000..26d6253 --- /dev/null +++ b/locales/pt-BR.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Leitor", + "empty": "Nenhum item para exibir", + "markAllRead": "Marcar tudo como lido", + "showRead": "Mostrar lidos ({{count}})", + "hideRead": "Ocultar itens lidos", + "allRead": "Tudo em dia!", + "newer": "Mais recente", + "older": "Mais antigo" + }, + "channels": { + "title": "Canais", + "name": "Nome do canal", + "new": "Novo canal", + "create": "Criar canal", + "delete": "Excluir canal", + "settings": "Configurações do canal", + "empty": "Ainda não há canais. Crie um para começar.", + "notifications": "Notificações" + }, + "timeline": { + "title": "Linha do tempo", + "empty": "Nenhum item neste canal", + "markRead": "Marcar como lido", + "markUnread": "Marcar como não lido", + "remove": "Remover" + }, + "feeds": { + "title": "Feeds", + "follow": "Seguir", + "subscribe": "Assinar um feed", + "unfollow": "Deixar de seguir", + "empty": "Nenhum feed seguido neste canal", + "url": "URL do feed", + "urlPlaceholder": "https://exemplo.com/feed.xml", + "edit": "Editar feed", + "rediscover": "Redescobrir feed", + "refresh": "Atualizar agora", + "status": { + "active": "Ativo", + "error": "Erro", + "stale": "Desatualizado" + } + }, + "item": { + "reply": "Responder", + "like": "Curtir", + "repost": "Compartilhar novamente", + "bookmark": "Favoritar", + "viewOriginal": "Ver original" + }, + "compose": { + "title": "Escrever", + "content": "O que você está pensando?", + "comment": "Adicionar um comentário (opcional)", + "commentHint": "Seu comentário será incluído quando isto for sindicado", + "syndicateTo": "Sindicar para", + "syndicateHint": "Selecione onde publicar isto", + "submit": "Publicar", + "cancel": "Cancelar", + "replyTo": "Respondendo a", + "likeOf": "Curtindo", + "repostOf": "Compartilhando novamente", + "bookmarkOf": "Favoritando" + }, + "settings": { + "title": "Configurações de {{channel}}", + "excludeTypes": "Excluir tipos de interação", + "excludeTypesHelp": "Selecione os tipos de posts a ocultar deste canal", + "excludeRegex": "Padrão de exclusão", + "excludeRegexHelp": "Expressão regular para filtrar conteúdo correspondente", + "save": "Salvar configurações", + "dangerZone": "Zona de perigo", + "deleteWarning": "Excluir este canal removerá permanentemente todos os feeds e itens. Esta ação não pode ser desfeita.", + "deleteConfirm": "Você tem certeza de que deseja excluir este canal e todo o seu conteúdo?", + "delete": "Excluir canal", + "types": { + "like": "Curtidas", + "repost": "Compartilhamentos", + "bookmark": "Favoritos", + "reply": "Respostas", + "checkin": "Check-ins" + } + }, + "search": { + "title": "Pesquisar", + "placeholder": "Digite URL ou termo de pesquisa", + "submit": "Pesquisar", + "noResults": "Nenhum resultado encontrado" + }, + "preview": { + "title": "Visualização", + "subscribe": "Assinar este feed" + }, + "error": { + "channelNotFound": "Canal não encontrado", + "feedNotFound": "Feed não encontrado", + "invalidUrl": "URL inválida", + "invalidAction": "Ação inválida" + } + } +} diff --git a/locales/pt.json b/locales/pt.json new file mode 100644 index 0000000..e544cee --- /dev/null +++ b/locales/pt.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Leitor", + "empty": "Nenhum item para exibir", + "markAllRead": "Marcar tudo como lido", + "showRead": "Mostrar lidos ({{count}})", + "hideRead": "Ocultar itens lidos", + "allRead": "Tudo em dia!", + "newer": "Mais recente", + "older": "Mais antigo" + }, + "channels": { + "title": "Canais", + "name": "Nome do canal", + "new": "Novo canal", + "create": "Criar canal", + "delete": "Eliminar canal", + "settings": "Definições do canal", + "empty": "Ainda não há canais. Crie um para começar.", + "notifications": "Notificações" + }, + "timeline": { + "title": "Cronologia", + "empty": "Nenhum item neste canal", + "markRead": "Marcar como lido", + "markUnread": "Marcar como não lido", + "remove": "Remover" + }, + "feeds": { + "title": "Feeds", + "follow": "Seguir", + "subscribe": "Subscrever um feed", + "unfollow": "Deixar de seguir", + "empty": "Nenhum feed seguido neste canal", + "url": "URL do feed", + "urlPlaceholder": "https://exemplo.com/feed.xml", + "edit": "Editar feed", + "rediscover": "Redescobrir feed", + "refresh": "Actualizar agora", + "status": { + "active": "Activo", + "error": "Erro", + "stale": "Desactualizado" + } + }, + "item": { + "reply": "Responder", + "like": "Gosto", + "repost": "Partilhar novamente", + "bookmark": "Marcador", + "viewOriginal": "Ver original" + }, + "compose": { + "title": "Escrever", + "content": "O que está a pensar?", + "comment": "Adicionar um comentário (opcional)", + "commentHint": "O seu comentário será incluído quando isto for sindicado", + "syndicateTo": "Sindicar para", + "syndicateHint": "Seleccione onde publicar isto", + "submit": "Publicar", + "cancel": "Cancelar", + "replyTo": "A responder a", + "likeOf": "A gostar", + "repostOf": "A partilhar novamente", + "bookmarkOf": "A adicionar marcador" + }, + "settings": { + "title": "Definições de {{channel}}", + "excludeTypes": "Excluir tipos de interacção", + "excludeTypesHelp": "Seleccione os tipos de publicações a ocultar deste canal", + "excludeRegex": "Padrão de exclusão", + "excludeRegexHelp": "Expressão regular para filtrar conteúdo correspondente", + "save": "Guardar definições", + "dangerZone": "Zona de perigo", + "deleteWarning": "Eliminar este canal removerá permanentemente todos os feeds e itens. Esta acção não pode ser desfeita.", + "deleteConfirm": "Tem a certeza de que deseja eliminar este canal e todo o seu conteúdo?", + "delete": "Eliminar canal", + "types": { + "like": "Gostos", + "repost": "Partilhas", + "bookmark": "Marcadores", + "reply": "Respostas", + "checkin": "Check-ins" + } + }, + "search": { + "title": "Pesquisar", + "placeholder": "Introduza URL ou termo de pesquisa", + "submit": "Pesquisar", + "noResults": "Nenhum resultado encontrado" + }, + "preview": { + "title": "Pré-visualização", + "subscribe": "Subscrever este feed" + }, + "error": { + "channelNotFound": "Canal não encontrado", + "feedNotFound": "Feed não encontrado", + "invalidUrl": "URL inválido", + "invalidAction": "Acção inválida" + } + } +} diff --git a/locales/sr.json b/locales/sr.json new file mode 100644 index 0000000..354fbde --- /dev/null +++ b/locales/sr.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Читач", + "empty": "Нема ставки за приказ", + "markAllRead": "Означи све као прочитано", + "showRead": "Прикажи прочитано ({{count}})", + "hideRead": "Сакриј прочитане ставке", + "allRead": "Све ажурирано!", + "newer": "Новије", + "older": "Старије" + }, + "channels": { + "title": "Канали", + "name": "Назив канала", + "new": "Нови канал", + "create": "Направи канал", + "delete": "Обриши канал", + "settings": "Подешавања канала", + "empty": "Још нема канала. Направите један да започнете.", + "notifications": "Обавештења" + }, + "timeline": { + "title": "Временска линија", + "empty": "Нема ставки у овом каналу", + "markRead": "Означи као прочитано", + "markUnread": "Означи као непрочитано", + "remove": "Уклони" + }, + "feeds": { + "title": "Довози", + "follow": "Прати", + "subscribe": "Претплати се на довод", + "unfollow": "Престани да пратиш", + "empty": "Нема праћених довода у овом каналу", + "url": "URL довода", + "urlPlaceholder": "https://primer.rs/feed.xml", + "edit": "Уреди довод", + "rediscover": "Поново открij довод", + "refresh": "Освежи сада", + "status": { + "active": "Активан", + "error": "Грешка", + "stale": "Застарео" + } + }, + "item": { + "reply": "Одговори", + "like": "Свиђа ми се", + "repost": "Подели поново", + "bookmark": "Обележивач", + "viewOriginal": "Прикажи оригинал" + }, + "compose": { + "title": "Напиши", + "content": "Шта вам је на уму?", + "comment": "Додај коментар (опционо)", + "commentHint": "Ваш коментар ће бити укључен када се ово синдицира", + "syndicateTo": "Синдицирај на", + "syndicateHint": "Изаберите где објавити ово", + "submit": "Објави", + "cancel": "Откажи", + "replyTo": "Одговарате на", + "likeOf": "Свиђа вам се", + "repostOf": "Делите поново", + "bookmarkOf": "Обележавате" + }, + "settings": { + "title": "Подешавања {{channel}}", + "excludeTypes": "Искључи типове интеракција", + "excludeTypesHelp": "Изаберите типове објава за сакривање из овог канала", + "excludeRegex": "Образац искључивања", + "excludeRegexHelp": "Регуларни израз за филтрирање одговарајућег садржаја", + "save": "Сачувај подешавања", + "dangerZone": "Опасна зона", + "deleteWarning": "Брисање овог канала ће трајно уклонити све доводе и ставке. Ова радња се не може опозвати.", + "deleteConfirm": "Да ли сте сигурни да желите да обришете овај канал и сав његов садржај?", + "delete": "Обриши канал", + "types": { + "like": "Свиђања", + "repost": "Поновна дељења", + "bookmark": "Обележивачи", + "reply": "Одговори", + "checkin": "Пријаве" + } + }, + "search": { + "title": "Претрага", + "placeholder": "Унесите URL или појам за претрагу", + "submit": "Претражи", + "noResults": "Нема пронађених резултата" + }, + "preview": { + "title": "Преглед", + "subscribe": "Претплати се на овај довод" + }, + "error": { + "channelNotFound": "Канал није пронађен", + "feedNotFound": "Довод није пронађен", + "invalidUrl": "Неважећи URL", + "invalidAction": "Неважећа радња" + } + } +} diff --git a/locales/sv.json b/locales/sv.json new file mode 100644 index 0000000..b430117 --- /dev/null +++ b/locales/sv.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "Läsare", + "empty": "Inga objekt att visa", + "markAllRead": "Markera allt som läst", + "showRead": "Visa lästa ({{count}})", + "hideRead": "Dölj lästa objekt", + "allRead": "Allt är uppdaterat!", + "newer": "Nyare", + "older": "Äldre" + }, + "channels": { + "title": "Kanaler", + "name": "Kanalnamn", + "new": "Ny kanal", + "create": "Skapa kanal", + "delete": "Ta bort kanal", + "settings": "Kanalinställningar", + "empty": "Inga kanaler än. Skapa en för att komma igång.", + "notifications": "Notifieringar" + }, + "timeline": { + "title": "Tidslinje", + "empty": "Inga objekt i denna kanal", + "markRead": "Markera som läst", + "markUnread": "Markera som oläst", + "remove": "Ta bort" + }, + "feeds": { + "title": "Flöden", + "follow": "Följ", + "subscribe": "Prenumerera på ett flöde", + "unfollow": "Sluta följa", + "empty": "Inga flöden följda i denna kanal", + "url": "Flödes-URL", + "urlPlaceholder": "https://exempel.se/feed.xml", + "edit": "Redigera flöde", + "rediscover": "Återupptäck flöde", + "refresh": "Uppdatera nu", + "status": { + "active": "Aktiv", + "error": "Fel", + "stale": "Föråldrad" + } + }, + "item": { + "reply": "Svara", + "like": "Gilla", + "repost": "Dela om", + "bookmark": "Bokmärke", + "viewOriginal": "Visa original" + }, + "compose": { + "title": "Skriv", + "content": "Vad tänker du på?", + "comment": "Lägg till en kommentar (valfritt)", + "commentHint": "Din kommentar kommer att inkluderas när detta syndikeras", + "syndicateTo": "Syndikera till", + "syndicateHint": "Välj var detta ska korspostas", + "submit": "Publicera", + "cancel": "Avbryt", + "replyTo": "Svarar på", + "likeOf": "Gillar", + "repostOf": "Delar om", + "bookmarkOf": "Bokmärker" + }, + "settings": { + "title": "{{channel}}-inställningar", + "excludeTypes": "Uteslut interaktionstyper", + "excludeTypesHelp": "Välj typer av inlägg att dölja från denna kanal", + "excludeRegex": "Uteslutningsmönster", + "excludeRegexHelp": "Reguljärt uttryck för att filtrera matchande innehåll", + "save": "Spara inställningar", + "dangerZone": "Farozonen", + "deleteWarning": "Att ta bort denna kanal kommer permanent ta bort alla flöden och objekt. Denna åtgärd kan inte ångras.", + "deleteConfirm": "Är du säker på att du vill ta bort denna kanal och allt dess innehåll?", + "delete": "Ta bort kanal", + "types": { + "like": "Gillningar", + "repost": "Omdelningar", + "bookmark": "Bokmärken", + "reply": "Svar", + "checkin": "Incheckningar" + } + }, + "search": { + "title": "Sök", + "placeholder": "Ange URL eller sökterm", + "submit": "Sök", + "noResults": "Inga resultat hittades" + }, + "preview": { + "title": "Förhandsvisning", + "subscribe": "Prenumerera på detta flöde" + }, + "error": { + "channelNotFound": "Kanal hittades inte", + "feedNotFound": "Flöde hittades inte", + "invalidUrl": "Ogiltig URL", + "invalidAction": "Ogiltig åtgärd" + } + } +} diff --git a/locales/zh-Hans-CN.json b/locales/zh-Hans-CN.json new file mode 100644 index 0000000..8538aef --- /dev/null +++ b/locales/zh-Hans-CN.json @@ -0,0 +1,104 @@ +{ + "microsub": { + "reader": { + "title": "阅读器", + "empty": "没有可显示的项目", + "markAllRead": "全部标记为已读", + "showRead": "显示已读 ({{count}})", + "hideRead": "隐藏已读项目", + "allRead": "全部已读!", + "newer": "较新", + "older": "较旧" + }, + "channels": { + "title": "频道", + "name": "频道名称", + "new": "新频道", + "create": "创建频道", + "delete": "删除频道", + "settings": "频道设置", + "empty": "还没有频道。创建一个开始吧。", + "notifications": "通知" + }, + "timeline": { + "title": "时间线", + "empty": "此频道中没有项目", + "markRead": "标记为已读", + "markUnread": "标记为未读", + "remove": "删除" + }, + "feeds": { + "title": "订阅源", + "follow": "关注", + "subscribe": "订阅订阅源", + "unfollow": "取消关注", + "empty": "此频道中没有关注的订阅源", + "url": "订阅源 URL", + "urlPlaceholder": "https://example.com/feed.xml", + "edit": "编辑订阅源", + "rediscover": "重新发现订阅源", + "refresh": "立即刷新", + "status": { + "active": "活跃", + "error": "错误", + "stale": "过期" + } + }, + "item": { + "reply": "回复", + "like": "点赞", + "repost": "转发", + "bookmark": "书签", + "viewOriginal": "查看原文" + }, + "compose": { + "title": "撰写", + "content": "在想什么?", + "comment": "添加评论(可选)", + "commentHint": "当此内容被聚合时,您的评论将被包含在内", + "syndicateTo": "聚合到", + "syndicateHint": "选择要交叉发布到哪里", + "submit": "发布", + "cancel": "取消", + "replyTo": "回复", + "likeOf": "点赞", + "repostOf": "转发", + "bookmarkOf": "添加书签" + }, + "settings": { + "title": "{{channel}} 设置", + "excludeTypes": "排除互动类型", + "excludeTypesHelp": "选择要从此频道隐藏的帖子类型", + "excludeRegex": "排除模式", + "excludeRegexHelp": "用于过滤匹配内容的正则表达式", + "save": "保存设置", + "dangerZone": "危险区域", + "deleteWarning": "删除此频道将永久删除所有订阅源和项目。此操作无法撤销。", + "deleteConfirm": "您确定要删除此频道及其所有内容吗?", + "delete": "删除频道", + "types": { + "like": "点赞", + "repost": "转发", + "bookmark": "书签", + "reply": "回复", + "checkin": "签到" + } + }, + "search": { + "title": "搜索", + "placeholder": "输入 URL 或搜索词", + "submit": "搜索", + "noResults": "未找到结果" + }, + "preview": { + "title": "预览", + "subscribe": "订阅此订阅源" + }, + "error": { + "channelNotFound": "未找到频道", + "feedNotFound": "未找到订阅源", + "invalidUrl": "无效的 URL", + "invalidAction": "无效的操作" + } + } +} diff --git a/package.json b/package.json index 72fd383..b58f69c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rmdes/indiekit-endpoint-microsub", - "version": "1.0.28", + "version": "1.0.29", "description": "Microsub endpoint for Indiekit. Enables subscribing to feeds and reading content using the Microsub protocol.", "keywords": [ "indiekit",