From e99adbc1fa09abe31459ef984e6947019a7a2901 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Fri, 13 Feb 2026 22:33:01 +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. Co-Authored-By: Claude Opus 4.6 --- locales/de.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/es-419.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/es.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/fr.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/hi.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/id.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/it.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/nl.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/pl.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/pt-BR.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/pt.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/sr.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/sv.json | 133 ++++++++++++++++++++++++++++++++++++++++ locales/zh-Hans-CN.json | 133 ++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 15 files changed, 1863 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/locales/de.json b/locales/de.json new file mode 100644 index 0000000..4455c6c --- /dev/null +++ b/locales/de.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Verwalten Sie Ihre Blogroll-Quellen und Blogs", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "edit": "Bearbeiten", + "sync": "Synchronisieren", + "refresh": "Aktualisieren", + "cancel": "Abbrechen", + "never": "Nie", + + "stats": { + "title": "Übersicht", + "sources": "Quellen", + "blogs": "Blogs", + "items": "Einträge", + "errors": "Fehler", + "lastSync": "Letzte Synchronisation" + }, + + "actions": { + "title": "Aktionen", + "syncNow": "Jetzt synchronisieren", + "clearResync": "Löschen & Neu synchronisieren", + "clearConfirm": "Dadurch werden alle zwischengespeicherten Einträge gelöscht und alles neu abgerufen. Fortfahren?" + }, + + "errors": { + "title": "Blogs mit Fehlern", + "seeAll": "Alle %{count} Blogs mit Fehlern anzeigen" + }, + + "sources": { + "title": "OPML-Synchronisation", + "manage": "OPML-Synchronisation", + "add": "OPML-Quelle hinzufügen", + "new": "Neue OPML-Quelle", + "edit": "OPML-Quelle bearbeiten", + "create": "Erstellen", + "save": "Speichern", + "empty": "Keine OPML-Quellen konfiguriert. Verwenden Sie diese Funktion, um Blogs aus FreshRSS oder anderen Feed-Readern zu importieren.", + "recent": "OPML-Quellen", + "interval": "Alle %{minutes} Min.", + "lastSync": "Zuletzt synchronisiert", + "deleteConfirm": "Diese OPML-Quelle löschen? Importierte Blogs bleiben erhalten.", + "created": "OPML-Quelle erfolgreich erstellt.", + "created_synced": "OPML-Quelle erfolgreich erstellt und synchronisiert.", + "created_sync_failed": "OPML-Quelle erstellt, aber Synchronisation fehlgeschlagen: %{error}", + "updated": "OPML-Quelle erfolgreich aktualisiert.", + "deleted": "OPML-Quelle erfolgreich gelöscht.", + "synced": "Erfolgreich synchronisiert. Hinzugefügt: %{added}, Aktualisiert: %{updated}", + "form": { + "name": "Name", + "type": "Import-Typ", + "typeHint": "URL synchronisiert regelmäßig, Datei ist ein einmaliger Import", + "url": "OPML-URL", + "urlHint": "URL zu Ihrer OPML-Datei (z.B. FreshRSS-Export-URL)", + "opmlContent": "OPML-Inhalt", + "opmlContentHint": "Fügen Sie hier den vollständigen OPML-XML-Inhalt ein", + "syncInterval": "Synchronisationsintervall", + "enabled": "Automatische Synchronisation aktivieren" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Blogs verwalten", + "add": "Blog hinzufügen", + "new": "Neuer Blog", + "edit": "Blog bearbeiten", + "create": "Blog hinzufügen", + "save": "Blog speichern", + "empty": "Noch keine Blogs. Fügen Sie einen hinzu oder importieren Sie aus einer OPML-Quelle.", + "recent": "Aktuelle Blogs", + "pinned": "Angeheftet", + "hidden": "Versteckt", + "noItems": "Noch keine Einträge abgerufen.", + "recentItems": "Aktuelle Einträge", + "allCategories": "Alle Kategorien", + "allStatuses": "Alle Status", + "statusActive": "Aktiv", + "statusError": "Fehler", + "statusPending": "Ausstehend", + "clearFilters": "Filter löschen", + "deleteConfirm": "Diesen Blog und alle zwischengespeicherten Einträge löschen?", + "created": "Blog erfolgreich hinzugefügt.", + "created_synced": "Blog hinzugefügt und synchronisiert. %{items} Einträge abgerufen.", + "created_sync_failed": "Blog hinzugefügt, aber erster Abruf fehlgeschlagen: %{error}", + "updated": "Blog erfolgreich aktualisiert.", + "deleted": "Blog erfolgreich gelöscht.", + "refreshed": "Blog aktualisiert. %{items} neue Einträge hinzugefügt.", + "form": { + "discoverUrl": "Website-URL", + "discover": "Feed entdecken", + "discoverHint": "Geben Sie eine Website-URL ein, um automatisch RSS/Atom-Feeds zu finden", + "discoverNoUrl": "Bitte geben Sie eine Website-URL ein", + "discovering": "Suche läuft...", + "discoveringHint": "Suche nach RSS/Atom-Feeds...", + "discoverFailed": "Feeds konnten nicht gefunden werden", + "discoverNoFeeds": "Keine Feeds auf dieser Website gefunden", + "discoverFoundOne": "Feed gefunden:", + "discoverFoundMultiple": "Mehrere Feeds gefunden. Klicken Sie auf einen, um ihn auszuwählen:", + "discoverSelected": "Ausgewählter Feed:", + "feedUrl": "Feed-URL", + "feedUrlHint": "RSS-, Atom- oder JSON-Feed-URL", + "title": "Titel", + "titlePlaceholder": "Automatisch aus Feed erkannt", + "titleHint": "Leer lassen, um den Feed-Titel zu verwenden", + "siteUrl": "Website-URL", + "siteUrlHint": "Link zur Startseite des Blogs (optional)", + "category": "Kategorie", + "categoryHint": "Gruppieren Sie Blogs nach Kategorie zum Filtern und OPML-Export", + "tags": "Schlagwörter", + "tagsHint": "Kommagetrennte Schlagwörter für zusätzliche Organisation", + "notes": "Notizen", + "notesPlaceholder": "Warum Sie diesem Blog folgen...", + "notesHint": "Persönliche Notizen (nicht öffentlich sichtbar)", + "pinned": "Diesen Blog anheften (oben in Listen anzeigen)", + "hidden": "Vor öffentlicher API verbergen (nur für Sie sichtbar)" + } + }, + + "api": { + "title": "API-Endpunkte", + "blogs": "Alle Blogs mit Metadaten auflisten", + "items": "Aktuelle Einträge von allen Blogs auflisten", + "categories": "Alle Kategorien auflisten", + "opml": "Als OPML exportieren", + "status": "Synchronisationsstatus und Statistiken" + } + } +} diff --git a/locales/es-419.json b/locales/es-419.json new file mode 100644 index 0000000..e912b26 --- /dev/null +++ b/locales/es-419.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Administra tus fuentes de blogroll y blogs", + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "edit": "Editar", + "sync": "Sincronizar", + "refresh": "Actualizar", + "cancel": "Cancelar", + "never": "Nunca", + + "stats": { + "title": "Resumen", + "sources": "Fuentes", + "blogs": "Blogs", + "items": "Entradas", + "errors": "Errores", + "lastSync": "Última sincronización" + }, + + "actions": { + "title": "Acciones", + "syncNow": "Sincronizar todo ahora", + "clearResync": "Limpiar y resincronizar", + "clearConfirm": "Esto eliminará todas las entradas almacenadas en caché y volverá a descargar todo. ¿Continuar?" + }, + + "errors": { + "title": "Blogs con errores", + "seeAll": "Ver los %{count} blogs con errores" + }, + + "sources": { + "title": "Sincronización OPML", + "manage": "Sincronización OPML", + "add": "Agregar fuente OPML", + "new": "Nueva fuente OPML", + "edit": "Editar fuente OPML", + "create": "Crear", + "save": "Guardar", + "empty": "No hay fuentes OPML configuradas. Usa esto para importar blogs de forma masiva desde FreshRSS u otros lectores de feeds.", + "recent": "Fuentes OPML", + "interval": "Cada %{minutes} min", + "lastSync": "Última sincronización", + "deleteConfirm": "¿Eliminar esta fuente OPML? Los blogs importados se conservarán.", + "created": "Fuente OPML creada exitosamente.", + "created_synced": "Fuente OPML creada y sincronizada exitosamente.", + "created_sync_failed": "Fuente OPML creada, pero la sincronización falló: %{error}", + "updated": "Fuente OPML actualizada exitosamente.", + "deleted": "Fuente OPML eliminada exitosamente.", + "synced": "Sincronización exitosa. Agregados: %{added}, Actualizados: %{updated}", + "form": { + "name": "Nombre", + "type": "Tipo de importación", + "typeHint": "La URL sincroniza periódicamente, el archivo es una importación única", + "url": "URL OPML", + "urlHint": "URL de tu archivo OPML (ej., URL de exportación de FreshRSS)", + "opmlContent": "Contenido OPML", + "opmlContentHint": "Pega aquí el contenido XML OPML completo", + "syncInterval": "Intervalo de sincronización", + "enabled": "Habilitar sincronización automática" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Administrar blogs", + "add": "Agregar blog", + "new": "Nuevo blog", + "edit": "Editar blog", + "create": "Agregar blog", + "save": "Guardar blog", + "empty": "Todavía no hay blogs. Agrega uno o importa desde una fuente OPML.", + "recent": "Blogs recientes", + "pinned": "Fijado", + "hidden": "Oculto", + "noItems": "Aún no se descargaron entradas.", + "recentItems": "Entradas recientes", + "allCategories": "Todas las categorías", + "allStatuses": "Todos los estados", + "statusActive": "Activo", + "statusError": "Error", + "statusPending": "Pendiente", + "clearFilters": "Limpiar filtros", + "deleteConfirm": "¿Eliminar este blog y todas sus entradas almacenadas?", + "created": "Blog agregado exitosamente.", + "created_synced": "Blog agregado y sincronizado. Se descargaron %{items} entradas.", + "created_sync_failed": "Blog agregado, pero la descarga inicial falló: %{error}", + "updated": "Blog actualizado exitosamente.", + "deleted": "Blog eliminado exitosamente.", + "refreshed": "Blog actualizado. Se agregaron %{items} entradas nuevas.", + "form": { + "discoverUrl": "URL del sitio web", + "discover": "Descubrir feed", + "discoverHint": "Ingresa una URL de sitio web para descubrir automáticamente su feed RSS/Atom", + "discoverNoUrl": "Por favor ingresa una URL de sitio web", + "discovering": "Descubriendo...", + "discoveringHint": "Buscando feeds RSS/Atom...", + "discoverFailed": "No se pudieron descubrir feeds", + "discoverNoFeeds": "No se encontraron feeds en este sitio web", + "discoverFoundOne": "Feed encontrado:", + "discoverFoundMultiple": "Se encontraron varios feeds. Hace clic en uno para seleccionarlo:", + "discoverSelected": "Feed seleccionado:", + "feedUrl": "URL del feed", + "feedUrlHint": "URL de RSS, Atom o JSON Feed", + "title": "Título", + "titlePlaceholder": "Detectado automáticamente del feed", + "titleHint": "Dejar en blanco para usar el título del feed", + "siteUrl": "URL del sitio", + "siteUrlHint": "Enlace a la página principal del blog (opcional)", + "category": "Categoría", + "categoryHint": "Agrupa blogs por categoría para filtrar y exportar a OPML", + "tags": "Etiquetas", + "tagsHint": "Etiquetas separadas por comas para organización adicional", + "notes": "Notas", + "notesPlaceholder": "Por qué sigues este blog...", + "notesHint": "Notas personales (no se muestran públicamente)", + "pinned": "Fijar este blog (mostrar al inicio de las listas)", + "hidden": "Ocultar de la API pública (visible solo para vos)" + } + }, + + "api": { + "title": "Endpoints de la API", + "blogs": "Listar todos los blogs con metadatos", + "items": "Listar entradas recientes de todos los blogs", + "categories": "Listar todas las categorías", + "opml": "Exportar como OPML", + "status": "Estado de sincronización y estadísticas" + } + } +} diff --git a/locales/es.json b/locales/es.json new file mode 100644 index 0000000..e60b40a --- /dev/null +++ b/locales/es.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Gestiona tus fuentes de blogroll y blogs", + "enabled": "Activado", + "disabled": "Desactivado", + "edit": "Editar", + "sync": "Sincronizar", + "refresh": "Actualizar", + "cancel": "Cancelar", + "never": "Nunca", + + "stats": { + "title": "Resumen", + "sources": "Fuentes", + "blogs": "Blogs", + "items": "Entradas", + "errors": "Errores", + "lastSync": "Última sincronización" + }, + + "actions": { + "title": "Acciones", + "syncNow": "Sincronizar todo ahora", + "clearResync": "Borrar y resincronizar", + "clearConfirm": "Esto eliminará todas las entradas almacenadas en caché y volverá a obtenerlo todo. ¿Continuar?" + }, + + "errors": { + "title": "Blogs con errores", + "seeAll": "Ver todos los %{count} blogs con errores" + }, + + "sources": { + "title": "Sincronización OPML", + "manage": "Sincronización OPML", + "add": "Añadir fuente OPML", + "new": "Nueva fuente OPML", + "edit": "Editar fuente OPML", + "create": "Crear", + "save": "Guardar", + "empty": "No hay fuentes OPML configuradas. Utiliza esto para importar blogs en bloque desde FreshRSS u otros lectores de feeds.", + "recent": "Fuentes OPML", + "interval": "Cada %{minutes} min", + "lastSync": "Última sincronización", + "deleteConfirm": "¿Eliminar esta fuente OPML? Los blogs importados se conservarán.", + "created": "Fuente OPML creada correctamente.", + "created_synced": "Fuente OPML creada y sincronizada correctamente.", + "created_sync_failed": "Fuente OPML creada, pero la sincronización falló: %{error}", + "updated": "Fuente OPML actualizada correctamente.", + "deleted": "Fuente OPML eliminada correctamente.", + "synced": "Sincronización exitosa. Añadidos: %{added}, Actualizados: %{updated}", + "form": { + "name": "Nombre", + "type": "Tipo de importación", + "typeHint": "La URL sincroniza periódicamente, el archivo es una importación única", + "url": "URL OPML", + "urlHint": "URL de tu archivo OPML (p. ej., URL de exportación de FreshRSS)", + "opmlContent": "Contenido OPML", + "opmlContentHint": "Pega aquí el contenido XML OPML completo", + "syncInterval": "Intervalo de sincronización", + "enabled": "Activar sincronización automática" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Gestionar blogs", + "add": "Añadir blog", + "new": "Nuevo blog", + "edit": "Editar blog", + "create": "Añadir blog", + "save": "Guardar blog", + "empty": "Todavía no hay blogs. Añade uno o impórtalo desde una fuente OPML.", + "recent": "Blogs recientes", + "pinned": "Fijado", + "hidden": "Oculto", + "noItems": "Aún no se han obtenido entradas.", + "recentItems": "Entradas recientes", + "allCategories": "Todas las categorías", + "allStatuses": "Todos los estados", + "statusActive": "Activo", + "statusError": "Error", + "statusPending": "Pendiente", + "clearFilters": "Limpiar filtros", + "deleteConfirm": "¿Eliminar este blog y todas sus entradas almacenadas?", + "created": "Blog añadido correctamente.", + "created_synced": "Blog añadido y sincronizado. Se obtuvieron %{items} entradas.", + "created_sync_failed": "Blog añadido, pero la obtención inicial falló: %{error}", + "updated": "Blog actualizado correctamente.", + "deleted": "Blog eliminado correctamente.", + "refreshed": "Blog actualizado. Se añadieron %{items} entradas nuevas.", + "form": { + "discoverUrl": "URL del sitio web", + "discover": "Descubrir feed", + "discoverHint": "Introduce una URL de sitio web para descubrir automáticamente su feed RSS/Atom", + "discoverNoUrl": "Por favor, introduce una URL de sitio web", + "discovering": "Descubriendo...", + "discoveringHint": "Buscando feeds RSS/Atom...", + "discoverFailed": "No se pudieron descubrir feeds", + "discoverNoFeeds": "No se encontraron feeds en este sitio web", + "discoverFoundOne": "Feed encontrado:", + "discoverFoundMultiple": "Se encontraron varios feeds. Haz clic en uno para seleccionarlo:", + "discoverSelected": "Feed seleccionado:", + "feedUrl": "URL del feed", + "feedUrlHint": "URL de RSS, Atom o JSON Feed", + "title": "Título", + "titlePlaceholder": "Detectado automáticamente del feed", + "titleHint": "Dejar en blanco para usar el título del feed", + "siteUrl": "URL del sitio", + "siteUrlHint": "Enlace a la página principal del blog (opcional)", + "category": "Categoría", + "categoryHint": "Agrupa blogs por categoría para filtrar y exportar a OPML", + "tags": "Etiquetas", + "tagsHint": "Etiquetas separadas por comas para organización adicional", + "notes": "Notas", + "notesPlaceholder": "Por qué sigues este blog...", + "notesHint": "Notas personales (no se muestran públicamente)", + "pinned": "Fijar este blog (mostrar en la parte superior de las listas)", + "hidden": "Ocultar de la API pública (visible solo para ti)" + } + }, + + "api": { + "title": "Puntos de acceso de la API", + "blogs": "Listar todos los blogs con metadatos", + "items": "Listar entradas recientes de todos los blogs", + "categories": "Listar todas las categorías", + "opml": "Exportar como OPML", + "status": "Estado de sincronización y estadísticas" + } + } +} diff --git a/locales/fr.json b/locales/fr.json new file mode 100644 index 0000000..9c332ed --- /dev/null +++ b/locales/fr.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Gérez vos sources de blogroll et vos blogs", + "enabled": "Activé", + "disabled": "Désactivé", + "edit": "Modifier", + "sync": "Synchroniser", + "refresh": "Actualiser", + "cancel": "Annuler", + "never": "Jamais", + + "stats": { + "title": "Aperçu", + "sources": "Sources", + "blogs": "Blogs", + "items": "Entrées", + "errors": "Erreurs", + "lastSync": "Dernière synchronisation" + }, + + "actions": { + "title": "Actions", + "syncNow": "Synchroniser maintenant", + "clearResync": "Effacer et resynchroniser", + "clearConfirm": "Cela supprimera toutes les entrées mises en cache et récupérera tout à nouveau. Continuer ?" + }, + + "errors": { + "title": "Blogs avec des erreurs", + "seeAll": "Voir les %{count} blogs avec des erreurs" + }, + + "sources": { + "title": "Synchronisation OPML", + "manage": "Synchronisation OPML", + "add": "Ajouter une source OPML", + "new": "Nouvelle source OPML", + "edit": "Modifier la source OPML", + "create": "Créer", + "save": "Enregistrer", + "empty": "Aucune source OPML configurée. Utilisez ceci pour importer en masse des blogs depuis FreshRSS ou d'autres lecteurs de flux.", + "recent": "Sources OPML", + "interval": "Toutes les %{minutes} min", + "lastSync": "Dernière synchronisation", + "deleteConfirm": "Supprimer cette source OPML ? Les blogs importés resteront.", + "created": "Source OPML créée avec succès.", + "created_synced": "Source OPML créée et synchronisée avec succès.", + "created_sync_failed": "Source OPML créée, mais la synchronisation a échoué : %{error}", + "updated": "Source OPML mise à jour avec succès.", + "deleted": "Source OPML supprimée avec succès.", + "synced": "Synchronisation réussie. Ajoutés : %{added}, Mis à jour : %{updated}", + "form": { + "name": "Nom", + "type": "Type d'importation", + "typeHint": "L'URL se synchronise périodiquement, le fichier est une importation unique", + "url": "URL OPML", + "urlHint": "URL de votre fichier OPML (par ex., URL d'exportation FreshRSS)", + "opmlContent": "Contenu OPML", + "opmlContentHint": "Collez le contenu XML OPML complet ici", + "syncInterval": "Intervalle de synchronisation", + "enabled": "Activer la synchronisation automatique" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Gérer les blogs", + "add": "Ajouter un blog", + "new": "Nouveau blog", + "edit": "Modifier le blog", + "create": "Ajouter un blog", + "save": "Enregistrer le blog", + "empty": "Aucun blog pour l'instant. Ajoutez-en un ou importez depuis une source OPML.", + "recent": "Blogs récents", + "pinned": "Épinglé", + "hidden": "Masqué", + "noItems": "Aucune entrée récupérée pour l'instant.", + "recentItems": "Entrées récentes", + "allCategories": "Toutes les catégories", + "allStatuses": "Tous les états", + "statusActive": "Actif", + "statusError": "Erreur", + "statusPending": "En attente", + "clearFilters": "Effacer les filtres", + "deleteConfirm": "Supprimer ce blog et toutes ses entrées mises en cache ?", + "created": "Blog ajouté avec succès.", + "created_synced": "Blog ajouté et synchronisé. %{items} entrées récupérées.", + "created_sync_failed": "Blog ajouté, mais la récupération initiale a échoué : %{error}", + "updated": "Blog mis à jour avec succès.", + "deleted": "Blog supprimé avec succès.", + "refreshed": "Blog actualisé. %{items} nouvelles entrées ajoutées.", + "form": { + "discoverUrl": "URL du site web", + "discover": "Découvrir le flux", + "discoverHint": "Entrez une URL de site web pour découvrir automatiquement son flux RSS/Atom", + "discoverNoUrl": "Veuillez entrer une URL de site web", + "discovering": "Découverte en cours...", + "discoveringHint": "Recherche de flux RSS/Atom...", + "discoverFailed": "Échec de la découverte de flux", + "discoverNoFeeds": "Aucun flux trouvé sur ce site web", + "discoverFoundOne": "Flux trouvé :", + "discoverFoundMultiple": "Plusieurs flux trouvés. Cliquez sur l'un pour le sélectionner :", + "discoverSelected": "Flux sélectionné :", + "feedUrl": "URL du flux", + "feedUrlHint": "URL RSS, Atom ou JSON Feed", + "title": "Titre", + "titlePlaceholder": "Détecté automatiquement depuis le flux", + "titleHint": "Laissez vide pour utiliser le titre du flux", + "siteUrl": "URL du site", + "siteUrlHint": "Lien vers la page d'accueil du blog (optionnel)", + "category": "Catégorie", + "categoryHint": "Regroupez les blogs par catégorie pour le filtrage et l'export OPML", + "tags": "Étiquettes", + "tagsHint": "Étiquettes séparées par des virgules pour une organisation supplémentaire", + "notes": "Notes", + "notesPlaceholder": "Pourquoi vous suivez ce blog...", + "notesHint": "Notes personnelles (non affichées publiquement)", + "pinned": "Épingler ce blog (afficher en haut des listes)", + "hidden": "Masquer de l'API publique (visible uniquement pour vous)" + } + }, + + "api": { + "title": "Points de terminaison de l'API", + "blogs": "Lister tous les blogs avec métadonnées", + "items": "Lister les entrées récentes de tous les blogs", + "categories": "Lister toutes les catégories", + "opml": "Exporter en OPML", + "status": "État de synchronisation et statistiques" + } + } +} diff --git a/locales/hi.json b/locales/hi.json new file mode 100644 index 0000000..b8bfb9d --- /dev/null +++ b/locales/hi.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "ब्लॉगरोल", + "description": "अपने ब्लॉगरोल स्रोतों और ब्लॉग्स को प्रबंधित करें", + "enabled": "सक्षम", + "disabled": "अक्षम", + "edit": "संपादित करें", + "sync": "सिंक करें", + "refresh": "ताज़ा करें", + "cancel": "रद्द करें", + "never": "कभी नहीं", + + "stats": { + "title": "अवलोकन", + "sources": "स्रोत", + "blogs": "ब्लॉग", + "items": "आइटम", + "errors": "त्रुटियां", + "lastSync": "अंतिम सिंक" + }, + + "actions": { + "title": "क्रियाएं", + "syncNow": "अभी सब सिंक करें", + "clearResync": "साफ़ करें और पुनः सिंक करें", + "clearConfirm": "इससे सभी कैश किए गए आइटम हटा दिए जाएंगे और सब कुछ फिर से प्राप्त किया जाएगा। जारी रखें?" + }, + + "errors": { + "title": "त्रुटियों वाले ब्लॉग", + "seeAll": "त्रुटियों वाले सभी %{count} ब्लॉग देखें" + }, + + "sources": { + "title": "OPML सिंक", + "manage": "OPML सिंक", + "add": "OPML स्रोत जोड़ें", + "new": "नया OPML स्रोत", + "edit": "OPML स्रोत संपादित करें", + "create": "बनाएं", + "save": "सहेजें", + "empty": "कोई OPML स्रोत कॉन्फ़िगर नहीं किया गया। FreshRSS या अन्य फ़ीड रीडर्स से ब्लॉग बल्क-इम्पोर्ट करने के लिए इसका उपयोग करें।", + "recent": "OPML स्रोत", + "interval": "हर %{minutes} मिनट", + "lastSync": "अंतिम बार सिंक किया गया", + "deleteConfirm": "इस OPML स्रोत को हटाएं? इससे इम्पोर्ट किए गए ब्लॉग बने रहेंगे।", + "created": "OPML स्रोत सफलतापूर्वक बनाया गया।", + "created_synced": "OPML स्रोत सफलतापूर्वक बनाया और सिंक किया गया।", + "created_sync_failed": "OPML स्रोत बनाया गया, लेकिन सिंक विफल रहा: %{error}", + "updated": "OPML स्रोत सफलतापूर्वक अपडेट किया गया।", + "deleted": "OPML स्रोत सफलतापूर्वक हटाया गया।", + "synced": "सफलतापूर्वक सिंक किया गया। जोड़े गए: %{added}, अपडेट किए गए: %{updated}", + "form": { + "name": "नाम", + "type": "इम्पोर्ट प्रकार", + "typeHint": "URL समय-समय पर सिंक करता है, फ़ाइल एक बार का इम्पोर्ट है", + "url": "OPML URL", + "urlHint": "आपकी OPML फ़ाइल का URL (उदा., FreshRSS एक्सपोर्ट URL)", + "opmlContent": "OPML सामग्री", + "opmlContentHint": "यहाँ पूर्ण OPML XML सामग्री पेस्ट करें", + "syncInterval": "सिंक अंतराल", + "enabled": "स्वचालित सिंकिंग सक्षम करें" + } + }, + + "blogs": { + "title": "ब्लॉग", + "manage": "ब्लॉग प्रबंधित करें", + "add": "ब्लॉग जोड़ें", + "new": "नया ब्लॉग", + "edit": "ब्लॉग संपादित करें", + "create": "ब्लॉग जोड़ें", + "save": "ब्लॉग सहेजें", + "empty": "अभी तक कोई ब्लॉग नहीं। एक जोड़ें या OPML स्रोत से इम्पोर्ट करें।", + "recent": "हाल के ब्लॉग", + "pinned": "पिन किया गया", + "hidden": "छिपा हुआ", + "noItems": "अभी तक कोई आइटम प्राप्त नहीं किया गया।", + "recentItems": "हाल के आइटम", + "allCategories": "सभी श्रेणियाँ", + "allStatuses": "सभी स्थितियाँ", + "statusActive": "सक्रिय", + "statusError": "त्रुटि", + "statusPending": "लंबित", + "clearFilters": "फ़िल्टर साफ़ करें", + "deleteConfirm": "इस ब्लॉग और इसके सभी कैश किए गए आइटम हटाएं?", + "created": "ब्लॉग सफलतापूर्वक जोड़ा गया।", + "created_synced": "ब्लॉग जोड़ा और सिंक किया गया। %{items} आइटम प्राप्त किए गए।", + "created_sync_failed": "ब्लॉग जोड़ा गया, लेकिन प्रारंभिक प्राप्ति विफल रही: %{error}", + "updated": "ब्लॉग सफलतापूर्वक अपडेट किया गया।", + "deleted": "ब्लॉग सफलतापूर्वक हटाया गया।", + "refreshed": "ब्लॉग ताज़ा किया गया। %{items} नए आइटम जोड़े गए।", + "form": { + "discoverUrl": "वेबसाइट URL", + "discover": "फ़ीड खोजें", + "discoverHint": "इसके RSS/Atom फ़ीड को स्वचालित रूप से खोजने के लिए वेबसाइट URL दर्ज करें", + "discoverNoUrl": "कृपया वेबसाइट URL दर्ज करें", + "discovering": "खोज रहा है...", + "discoveringHint": "RSS/Atom फ़ीड के लिए जाँच रहा है...", + "discoverFailed": "फ़ीड खोजने में विफल", + "discoverNoFeeds": "इस वेबसाइट पर कोई फ़ीड नहीं मिला", + "discoverFoundOne": "फ़ीड मिला:", + "discoverFoundMultiple": "एकाधिक फ़ीड मिले। चयन करने के लिए किसी एक पर क्लिक करें:", + "discoverSelected": "चयनित फ़ीड:", + "feedUrl": "फ़ीड URL", + "feedUrlHint": "RSS, Atom, या JSON Feed URL", + "title": "शीर्षक", + "titlePlaceholder": "फ़ीड से स्वचालित रूप से पता लगाया गया", + "titleHint": "फ़ीड शीर्षक उपयोग करने के लिए रिक्त छोड़ें", + "siteUrl": "साइट URL", + "siteUrlHint": "ब्लॉग के होमपेज का लिंक (वैकल्पिक)", + "category": "श्रेणी", + "categoryHint": "फ़िल्टरिंग और OPML एक्सपोर्ट के लिए ब्लॉग को श्रेणी के अनुसार समूहित करें", + "tags": "टैग", + "tagsHint": "अतिरिक्त संगठन के लिए अल्पविराम से अलग किए गए टैग", + "notes": "नोट्स", + "notesPlaceholder": "आप इस ब्लॉग को क्यों फ़ॉलो करते हैं...", + "notesHint": "व्यक्तिगत नोट्स (सार्वजनिक रूप से नहीं दिखाए गए)", + "pinned": "इस ब्लॉग को पिन करें (सूचियों के शीर्ष पर दिखाएं)", + "hidden": "सार्वजनिक API से छिपाएं (केवल आपके लिए दृश्यमान)" + } + }, + + "api": { + "title": "API एंडपॉइंट", + "blogs": "मेटाडेटा के साथ सभी ब्लॉग सूचीबद्ध करें", + "items": "सभी ब्लॉग से हाल के आइटम सूचीबद्ध करें", + "categories": "सभी श्रेणियाँ सूचीबद्ध करें", + "opml": "OPML के रूप में एक्सपोर्ट करें", + "status": "सिंक स्थिति और सांख्यिकी" + } + } +} diff --git a/locales/id.json b/locales/id.json new file mode 100644 index 0000000..9ebdd50 --- /dev/null +++ b/locales/id.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Kelola sumber blogroll dan blog Anda", + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "edit": "Edit", + "sync": "Sinkronkan", + "refresh": "Segarkan", + "cancel": "Batal", + "never": "Tidak pernah", + + "stats": { + "title": "Ringkasan", + "sources": "Sumber", + "blogs": "Blog", + "items": "Item", + "errors": "Kesalahan", + "lastSync": "Sinkronisasi Terakhir" + }, + + "actions": { + "title": "Tindakan", + "syncNow": "Sinkronkan Semua Sekarang", + "clearResync": "Hapus & Sinkronkan Ulang", + "clearConfirm": "Ini akan menghapus semua item yang di-cache dan mengambil semuanya lagi. Lanjutkan?" + }, + + "errors": { + "title": "Blog dengan Kesalahan", + "seeAll": "Lihat semua %{count} blog dengan kesalahan" + }, + + "sources": { + "title": "Sinkronisasi OPML", + "manage": "Sinkronisasi OPML", + "add": "Tambah Sumber OPML", + "new": "Sumber OPML Baru", + "edit": "Edit Sumber OPML", + "create": "Buat", + "save": "Simpan", + "empty": "Tidak ada sumber OPML yang dikonfigurasi. Gunakan ini untuk mengimpor blog secara massal dari FreshRSS atau pembaca feed lainnya.", + "recent": "Sumber OPML", + "interval": "Setiap %{minutes} mnt", + "lastSync": "Terakhir disinkronkan", + "deleteConfirm": "Hapus sumber OPML ini? Blog yang diimpor darinya akan tetap ada.", + "created": "Sumber OPML berhasil dibuat.", + "created_synced": "Sumber OPML berhasil dibuat dan disinkronkan.", + "created_sync_failed": "Sumber OPML dibuat, tetapi sinkronisasi gagal: %{error}", + "updated": "Sumber OPML berhasil diperbarui.", + "deleted": "Sumber OPML berhasil dihapus.", + "synced": "Berhasil disinkronkan. Ditambahkan: %{added}, Diperbarui: %{updated}", + "form": { + "name": "Nama", + "type": "Jenis Impor", + "typeHint": "URL sinkronisasi berkala, File adalah impor sekali jalan", + "url": "URL OPML", + "urlHint": "URL ke file OPML Anda (mis., URL ekspor FreshRSS)", + "opmlContent": "Konten OPML", + "opmlContentHint": "Tempel konten XML OPML lengkap di sini", + "syncInterval": "Interval Sinkronisasi", + "enabled": "Aktifkan sinkronisasi otomatis" + } + }, + + "blogs": { + "title": "Blog", + "manage": "Kelola Blog", + "add": "Tambah Blog", + "new": "Blog Baru", + "edit": "Edit Blog", + "create": "Tambah Blog", + "save": "Simpan Blog", + "empty": "Belum ada blog. Tambahkan satu atau impor dari sumber OPML.", + "recent": "Blog Terbaru", + "pinned": "Disematkan", + "hidden": "Tersembunyi", + "noItems": "Belum ada item yang diambil.", + "recentItems": "Item Terbaru", + "allCategories": "Semua Kategori", + "allStatuses": "Semua Status", + "statusActive": "Aktif", + "statusError": "Kesalahan", + "statusPending": "Tertunda", + "clearFilters": "Hapus filter", + "deleteConfirm": "Hapus blog ini dan semua item yang di-cache?", + "created": "Blog berhasil ditambahkan.", + "created_synced": "Blog ditambahkan dan disinkronkan. Mengambil %{items} item.", + "created_sync_failed": "Blog ditambahkan, tetapi pengambilan awal gagal: %{error}", + "updated": "Blog berhasil diperbarui.", + "deleted": "Blog berhasil dihapus.", + "refreshed": "Blog disegarkan. Menambahkan %{items} item baru.", + "form": { + "discoverUrl": "URL Website", + "discover": "Temukan Feed", + "discoverHint": "Masukkan URL website untuk menemukan feed RSS/Atom secara otomatis", + "discoverNoUrl": "Silakan masukkan URL website", + "discovering": "Menemukan...", + "discoveringHint": "Memeriksa feed RSS/Atom...", + "discoverFailed": "Gagal menemukan feed", + "discoverNoFeeds": "Tidak ada feed ditemukan di website ini", + "discoverFoundOne": "Feed ditemukan:", + "discoverFoundMultiple": "Beberapa feed ditemukan. Klik salah satu untuk memilih:", + "discoverSelected": "Feed yang dipilih:", + "feedUrl": "URL Feed", + "feedUrlHint": "URL RSS, Atom, atau JSON Feed", + "title": "Judul", + "titlePlaceholder": "Terdeteksi otomatis dari feed", + "titleHint": "Biarkan kosong untuk menggunakan judul feed", + "siteUrl": "URL Situs", + "siteUrlHint": "Tautan ke halaman beranda blog (opsional)", + "category": "Kategori", + "categoryHint": "Kelompokkan blog berdasarkan kategori untuk penyaringan dan ekspor OPML", + "tags": "Tag", + "tagsHint": "Tag yang dipisahkan koma untuk organisasi tambahan", + "notes": "Catatan", + "notesPlaceholder": "Mengapa Anda mengikuti blog ini...", + "notesHint": "Catatan pribadi (tidak ditampilkan secara publik)", + "pinned": "Sematkan blog ini (tampilkan di bagian atas daftar)", + "hidden": "Sembunyikan dari API publik (hanya terlihat oleh Anda)" + } + }, + + "api": { + "title": "Endpoint API", + "blogs": "Daftarkan semua blog dengan metadata", + "items": "Daftarkan item terbaru dari semua blog", + "categories": "Daftarkan semua kategori", + "opml": "Ekspor sebagai OPML", + "status": "Status sinkronisasi dan statistik" + } + } +} diff --git a/locales/it.json b/locales/it.json new file mode 100644 index 0000000..0af9d89 --- /dev/null +++ b/locales/it.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Gestisci le tue fonti di blogroll e i tuoi blog", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "edit": "Modifica", + "sync": "Sincronizza", + "refresh": "Aggiorna", + "cancel": "Annulla", + "never": "Mai", + + "stats": { + "title": "Panoramica", + "sources": "Fonti", + "blogs": "Blog", + "items": "Elementi", + "errors": "Errori", + "lastSync": "Ultima sincronizzazione" + }, + + "actions": { + "title": "Azioni", + "syncNow": "Sincronizza tutto ora", + "clearResync": "Cancella e risincronizza", + "clearConfirm": "Questo cancellerà tutti gli elementi memorizzati e recupererà tutto nuovamente. Continuare?" + }, + + "errors": { + "title": "Blog con errori", + "seeAll": "Vedi tutti i %{count} blog con errori" + }, + + "sources": { + "title": "Sincronizzazione OPML", + "manage": "Sincronizzazione OPML", + "add": "Aggiungi fonte OPML", + "new": "Nuova fonte OPML", + "edit": "Modifica fonte OPML", + "create": "Crea", + "save": "Salva", + "empty": "Nessuna fonte OPML configurata. Usa questo per importare in blocco blog da FreshRSS o altri lettori di feed.", + "recent": "Fonti OPML", + "interval": "Ogni %{minutes} min", + "lastSync": "Ultima sincronizzazione", + "deleteConfirm": "Eliminare questa fonte OPML? I blog importati rimarranno.", + "created": "Fonte OPML creata con successo.", + "created_synced": "Fonte OPML creata e sincronizzata con successo.", + "created_sync_failed": "Fonte OPML creata, ma la sincronizzazione è fallita: %{error}", + "updated": "Fonte OPML aggiornata con successo.", + "deleted": "Fonte OPML eliminata con successo.", + "synced": "Sincronizzazione riuscita. Aggiunti: %{added}, Aggiornati: %{updated}", + "form": { + "name": "Nome", + "type": "Tipo di importazione", + "typeHint": "L'URL si sincronizza periodicamente, il file è un'importazione una tantum", + "url": "URL OPML", + "urlHint": "URL del tuo file OPML (es., URL di esportazione FreshRSS)", + "opmlContent": "Contenuto OPML", + "opmlContentHint": "Incolla qui il contenuto XML OPML completo", + "syncInterval": "Intervallo di sincronizzazione", + "enabled": "Abilita sincronizzazione automatica" + } + }, + + "blogs": { + "title": "Blog", + "manage": "Gestisci blog", + "add": "Aggiungi blog", + "new": "Nuovo blog", + "edit": "Modifica blog", + "create": "Aggiungi blog", + "save": "Salva blog", + "empty": "Ancora nessun blog. Aggiungine uno o importa da una fonte OPML.", + "recent": "Blog recenti", + "pinned": "In evidenza", + "hidden": "Nascosto", + "noItems": "Nessun elemento recuperato ancora.", + "recentItems": "Elementi recenti", + "allCategories": "Tutte le categorie", + "allStatuses": "Tutti gli stati", + "statusActive": "Attivo", + "statusError": "Errore", + "statusPending": "In attesa", + "clearFilters": "Cancella filtri", + "deleteConfirm": "Eliminare questo blog e tutti i suoi elementi memorizzati?", + "created": "Blog aggiunto con successo.", + "created_synced": "Blog aggiunto e sincronizzato. Recuperati %{items} elementi.", + "created_sync_failed": "Blog aggiunto, ma il recupero iniziale è fallito: %{error}", + "updated": "Blog aggiornato con successo.", + "deleted": "Blog eliminato con successo.", + "refreshed": "Blog aggiornato. Aggiunti %{items} nuovi elementi.", + "form": { + "discoverUrl": "URL del sito web", + "discover": "Scopri feed", + "discoverHint": "Inserisci un URL del sito web per scoprire automaticamente il suo feed RSS/Atom", + "discoverNoUrl": "Inserisci un URL del sito web", + "discovering": "Scoperta in corso...", + "discoveringHint": "Ricerca feed RSS/Atom...", + "discoverFailed": "Impossibile scoprire feed", + "discoverNoFeeds": "Nessun feed trovato su questo sito web", + "discoverFoundOne": "Feed trovato:", + "discoverFoundMultiple": "Trovati più feed. Fai clic su uno per selezionarlo:", + "discoverSelected": "Feed selezionato:", + "feedUrl": "URL del feed", + "feedUrlHint": "URL RSS, Atom o JSON Feed", + "title": "Titolo", + "titlePlaceholder": "Rilevato automaticamente dal feed", + "titleHint": "Lascia vuoto per usare il titolo del feed", + "siteUrl": "URL del sito", + "siteUrlHint": "Link alla homepage del blog (facoltativo)", + "category": "Categoria", + "categoryHint": "Raggruppa i blog per categoria per filtrare ed esportare OPML", + "tags": "Tag", + "tagsHint": "Tag separati da virgole per un'organizzazione aggiuntiva", + "notes": "Note", + "notesPlaceholder": "Perché segui questo blog...", + "notesHint": "Note personali (non mostrate pubblicamente)", + "pinned": "Metti in evidenza questo blog (mostra in cima alle liste)", + "hidden": "Nascondi dall'API pubblica (visibile solo a te)" + } + }, + + "api": { + "title": "Endpoint API", + "blogs": "Elenca tutti i blog con metadati", + "items": "Elenca elementi recenti da tutti i blog", + "categories": "Elenca tutte le categorie", + "opml": "Esporta come OPML", + "status": "Stato di sincronizzazione e statistiche" + } + } +} diff --git a/locales/nl.json b/locales/nl.json new file mode 100644 index 0000000..f4e4bc3 --- /dev/null +++ b/locales/nl.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Beheer je blogroll-bronnen en blogs", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "edit": "Bewerken", + "sync": "Synchroniseren", + "refresh": "Vernieuwen", + "cancel": "Annuleren", + "never": "Nooit", + + "stats": { + "title": "Overzicht", + "sources": "Bronnen", + "blogs": "Blogs", + "items": "Items", + "errors": "Fouten", + "lastSync": "Laatste synchronisatie" + }, + + "actions": { + "title": "Acties", + "syncNow": "Nu alles synchroniseren", + "clearResync": "Wissen en opnieuw synchroniseren", + "clearConfirm": "Dit verwijdert alle gecachte items en haalt alles opnieuw op. Doorgaan?" + }, + + "errors": { + "title": "Blogs met fouten", + "seeAll": "Bekijk alle %{count} blogs met fouten" + }, + + "sources": { + "title": "OPML-synchronisatie", + "manage": "OPML-synchronisatie", + "add": "OPML-bron toevoegen", + "new": "Nieuwe OPML-bron", + "edit": "OPML-bron bewerken", + "create": "Aanmaken", + "save": "Opslaan", + "empty": "Geen OPML-bronnen geconfigureerd. Gebruik dit om blogs in bulk te importeren uit FreshRSS of andere feedlezers.", + "recent": "OPML-bronnen", + "interval": "Elke %{minutes} min", + "lastSync": "Laatst gesynchroniseerd", + "deleteConfirm": "Deze OPML-bron verwijderen? Geïmporteerde blogs blijven behouden.", + "created": "OPML-bron succesvol aangemaakt.", + "created_synced": "OPML-bron succesvol aangemaakt en gesynchroniseerd.", + "created_sync_failed": "OPML-bron aangemaakt, maar synchronisatie mislukt: %{error}", + "updated": "OPML-bron succesvol bijgewerkt.", + "deleted": "OPML-bron succesvol verwijderd.", + "synced": "Succesvol gesynchroniseerd. Toegevoegd: %{added}, Bijgewerkt: %{updated}", + "form": { + "name": "Naam", + "type": "Importtype", + "typeHint": "URL synchroniseert periodiek, Bestand is een eenmalige import", + "url": "OPML-URL", + "urlHint": "URL naar je OPML-bestand (bijv. FreshRSS export-URL)", + "opmlContent": "OPML-inhoud", + "opmlContentHint": "Plak hier de volledige OPML XML-inhoud", + "syncInterval": "Synchronisatie-interval", + "enabled": "Automatische synchronisatie inschakelen" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Blogs beheren", + "add": "Blog toevoegen", + "new": "Nieuwe blog", + "edit": "Blog bewerken", + "create": "Blog toevoegen", + "save": "Blog opslaan", + "empty": "Nog geen blogs. Voeg er een toe of importeer vanuit een OPML-bron.", + "recent": "Recente blogs", + "pinned": "Vastgepind", + "hidden": "Verborgen", + "noItems": "Nog geen items opgehaald.", + "recentItems": "Recente items", + "allCategories": "Alle categorieën", + "allStatuses": "Alle statussen", + "statusActive": "Actief", + "statusError": "Fout", + "statusPending": "In behandeling", + "clearFilters": "Filters wissen", + "deleteConfirm": "Deze blog en alle gecachte items verwijderen?", + "created": "Blog succesvol toegevoegd.", + "created_synced": "Blog toegevoegd en gesynchroniseerd. %{items} items opgehaald.", + "created_sync_failed": "Blog toegevoegd, maar initiële ophaling mislukt: %{error}", + "updated": "Blog succesvol bijgewerkt.", + "deleted": "Blog succesvol verwijderd.", + "refreshed": "Blog vernieuwd. %{items} nieuwe items toegevoegd.", + "form": { + "discoverUrl": "Website-URL", + "discover": "Feed ontdekken", + "discoverHint": "Voer een website-URL in om automatisch de RSS/Atom-feed te ontdekken", + "discoverNoUrl": "Voer een website-URL in", + "discovering": "Aan het ontdekken...", + "discoveringHint": "Controleren op RSS/Atom-feeds...", + "discoverFailed": "Kan feeds niet ontdekken", + "discoverNoFeeds": "Geen feeds gevonden op deze website", + "discoverFoundOne": "Feed gevonden:", + "discoverFoundMultiple": "Meerdere feeds gevonden. Klik op een feed om te selecteren:", + "discoverSelected": "Geselecteerde feed:", + "feedUrl": "Feed-URL", + "feedUrlHint": "RSS-, Atom- of JSON Feed-URL", + "title": "Titel", + "titlePlaceholder": "Automatisch gedetecteerd uit feed", + "titleHint": "Laat leeg om de feed-titel te gebruiken", + "siteUrl": "Site-URL", + "siteUrlHint": "Link naar de homepage van de blog (optioneel)", + "category": "Categorie", + "categoryHint": "Groepeer blogs op categorie voor filteren en OPML-export", + "tags": "Tags", + "tagsHint": "Door komma's gescheiden tags voor extra organisatie", + "notes": "Notities", + "notesPlaceholder": "Waarom je deze blog volgt...", + "notesHint": "Persoonlijke notities (niet openbaar getoond)", + "pinned": "Deze blog vastpinnen (bovenaan lijsten tonen)", + "hidden": "Verbergen voor openbare API (alleen zichtbaar voor jou)" + } + }, + + "api": { + "title": "API-endpoints", + "blogs": "Alle blogs met metadata weergeven", + "items": "Recente items van alle blogs weergeven", + "categories": "Alle categorieën weergeven", + "opml": "Exporteren als OPML", + "status": "Synchronisatiestatus en statistieken" + } + } +} diff --git a/locales/pl.json b/locales/pl.json new file mode 100644 index 0000000..409a31a --- /dev/null +++ b/locales/pl.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Zarządzaj źródłami blogroll i blogami", + "enabled": "Włączony", + "disabled": "Wyłączony", + "edit": "Edytuj", + "sync": "Synchronizuj", + "refresh": "Odśwież", + "cancel": "Anuluj", + "never": "Nigdy", + + "stats": { + "title": "Przegląd", + "sources": "Źródła", + "blogs": "Blogi", + "items": "Elementy", + "errors": "Błędy", + "lastSync": "Ostatnia synchronizacja" + }, + + "actions": { + "title": "Działania", + "syncNow": "Synchronizuj wszystko teraz", + "clearResync": "Wyczyść i zsynchronizuj ponownie", + "clearConfirm": "Spowoduje to usunięcie wszystkich elementów w pamięci podręcznej i ponowne pobranie wszystkiego. Kontynuować?" + }, + + "errors": { + "title": "Blogi z błędami", + "seeAll": "Zobacz wszystkie %{count} blogi z błędami" + }, + + "sources": { + "title": "Synchronizacja OPML", + "manage": "Synchronizacja OPML", + "add": "Dodaj źródło OPML", + "new": "Nowe źródło OPML", + "edit": "Edytuj źródło OPML", + "create": "Utwórz", + "save": "Zapisz", + "empty": "Brak skonfigurowanych źródeł OPML. Użyj tego do masowego importu blogów z FreshRSS lub innych czytników kanałów.", + "recent": "Źródła OPML", + "interval": "Co %{minutes} min", + "lastSync": "Ostatnio zsynchronizowano", + "deleteConfirm": "Usunąć to źródło OPML? Importowane blogi pozostaną.", + "created": "Źródło OPML utworzone pomyślnie.", + "created_synced": "Źródło OPML utworzone i zsynchronizowane pomyślnie.", + "created_sync_failed": "Źródło OPML utworzone, ale synchronizacja nie powiodła się: %{error}", + "updated": "Źródło OPML zaktualizowane pomyślnie.", + "deleted": "Źródło OPML usunięte pomyślnie.", + "synced": "Zsynchronizowano pomyślnie. Dodano: %{added}, Zaktualizowano: %{updated}", + "form": { + "name": "Nazwa", + "type": "Typ importu", + "typeHint": "URL synchronizuje się okresowo, Plik to import jednorazowy", + "url": "URL OPML", + "urlHint": "URL do pliku OPML (np. URL eksportu FreshRSS)", + "opmlContent": "Zawartość OPML", + "opmlContentHint": "Wklej tutaj pełną zawartość XML OPML", + "syncInterval": "Interwał synchronizacji", + "enabled": "Włącz automatyczną synchronizację" + } + }, + + "blogs": { + "title": "Blogi", + "manage": "Zarządzaj blogami", + "add": "Dodaj blog", + "new": "Nowy blog", + "edit": "Edytuj blog", + "create": "Dodaj blog", + "save": "Zapisz blog", + "empty": "Brak blogów. Dodaj jeden lub zaimportuj ze źródła OPML.", + "recent": "Najnowsze blogi", + "pinned": "Przypięty", + "hidden": "Ukryty", + "noItems": "Nie pobrano jeszcze elementów.", + "recentItems": "Najnowsze elementy", + "allCategories": "Wszystkie kategorie", + "allStatuses": "Wszystkie statusy", + "statusActive": "Aktywny", + "statusError": "Błąd", + "statusPending": "Oczekujący", + "clearFilters": "Wyczyść filtry", + "deleteConfirm": "Usunąć ten blog i wszystkie jego elementy w pamięci podręcznej?", + "created": "Blog dodany pomyślnie.", + "created_synced": "Blog dodany i zsynchronizowany. Pobrano %{items} elementów.", + "created_sync_failed": "Blog dodany, ale początkowe pobieranie nie powiodło się: %{error}", + "updated": "Blog zaktualizowany pomyślnie.", + "deleted": "Blog usunięty pomyślnie.", + "refreshed": "Blog odświeżony. Dodano %{items} nowych elementów.", + "form": { + "discoverUrl": "URL strony internetowej", + "discover": "Odkryj kanał", + "discoverHint": "Wprowadź URL strony internetowej, aby automatycznie odkryć jej kanał RSS/Atom", + "discoverNoUrl": "Wprowadź URL strony internetowej", + "discovering": "Odkrywanie...", + "discoveringHint": "Sprawdzanie kanałów RSS/Atom...", + "discoverFailed": "Nie udało się odkryć kanałów", + "discoverNoFeeds": "Nie znaleziono kanałów na tej stronie", + "discoverFoundOne": "Znaleziono kanał:", + "discoverFoundMultiple": "Znaleziono wiele kanałów. Kliknij jeden, aby wybrać:", + "discoverSelected": "Wybrany kanał:", + "feedUrl": "URL kanału", + "feedUrlHint": "URL RSS, Atom lub JSON Feed", + "title": "Tytuł", + "titlePlaceholder": "Automatycznie wykryty z kanału", + "titleHint": "Pozostaw puste, aby użyć tytułu kanału", + "siteUrl": "URL witryny", + "siteUrlHint": "Link do strony głównej bloga (opcjonalnie)", + "category": "Kategoria", + "categoryHint": "Grupuj blogi według kategorii do filtrowania i eksportu OPML", + "tags": "Tagi", + "tagsHint": "Tagi oddzielone przecinkami do dodatkowej organizacji", + "notes": "Notatki", + "notesPlaceholder": "Dlaczego śledzisz tego bloga...", + "notesHint": "Notatki osobiste (niewidoczne publicznie)", + "pinned": "Przypnij ten blog (pokaż na górze list)", + "hidden": "Ukryj przed publicznym API (widoczny tylko dla Ciebie)" + } + }, + + "api": { + "title": "Punkty końcowe API", + "blogs": "Wyświetl wszystkie blogi z metadanymi", + "items": "Wyświetl najnowsze elementy ze wszystkich blogów", + "categories": "Wyświetl wszystkie kategorie", + "opml": "Eksportuj jako OPML", + "status": "Status synchronizacji i statystyki" + } + } +} diff --git a/locales/pt-BR.json b/locales/pt-BR.json new file mode 100644 index 0000000..5e78a2e --- /dev/null +++ b/locales/pt-BR.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Gerencie suas fontes de blogroll e blogs", + "enabled": "Ativado", + "disabled": "Desativado", + "edit": "Editar", + "sync": "Sincronizar", + "refresh": "Atualizar", + "cancel": "Cancelar", + "never": "Nunca", + + "stats": { + "title": "Visão geral", + "sources": "Fontes", + "blogs": "Blogs", + "items": "Itens", + "errors": "Erros", + "lastSync": "Última sincronização" + }, + + "actions": { + "title": "Ações", + "syncNow": "Sincronizar tudo agora", + "clearResync": "Limpar e ressincronizar", + "clearConfirm": "Isso excluirá todos os itens em cache e buscará tudo novamente. Continuar?" + }, + + "errors": { + "title": "Blogs com erros", + "seeAll": "Ver todos os %{count} blogs com erros" + }, + + "sources": { + "title": "Sincronização OPML", + "manage": "Sincronização OPML", + "add": "Adicionar fonte OPML", + "new": "Nova fonte OPML", + "edit": "Editar fonte OPML", + "create": "Criar", + "save": "Salvar", + "empty": "Nenhuma fonte OPML configurada. Use isto para importar blogs em massa do FreshRSS ou outros leitores de feeds.", + "recent": "Fontes OPML", + "interval": "A cada %{minutes} min", + "lastSync": "Última sincronização", + "deleteConfirm": "Excluir esta fonte OPML? Os blogs importados permanecerão.", + "created": "Fonte OPML criada com sucesso.", + "created_synced": "Fonte OPML criada e sincronizada com sucesso.", + "created_sync_failed": "Fonte OPML criada, mas a sincronização falhou: %{error}", + "updated": "Fonte OPML atualizada com sucesso.", + "deleted": "Fonte OPML excluída com sucesso.", + "synced": "Sincronizado com sucesso. Adicionados: %{added}, Atualizados: %{updated}", + "form": { + "name": "Nome", + "type": "Tipo de importação", + "typeHint": "URL sincroniza periodicamente, Arquivo é uma importação única", + "url": "URL OPML", + "urlHint": "URL do seu arquivo OPML (ex., URL de exportação FreshRSS)", + "opmlContent": "Conteúdo OPML", + "opmlContentHint": "Cole aqui o conteúdo XML OPML completo", + "syncInterval": "Intervalo de sincronização", + "enabled": "Ativar sincronização automática" + } + }, + + "blogs": { + "title": "Blogs", + "manage": "Gerenciar blogs", + "add": "Adicionar blog", + "new": "Novo blog", + "edit": "Editar blog", + "create": "Adicionar blog", + "save": "Salvar blog", + "empty": "Ainda não há blogs. Adicione um ou importe de uma fonte OPML.", + "recent": "Blogs recentes", + "pinned": "Fixado", + "hidden": "Oculto", + "noItems": "Ainda não foram buscados itens.", + "recentItems": "Itens recentes", + "allCategories": "Todas as categorias", + "allStatuses": "Todos os status", + "statusActive": "Ativo", + "statusError": "Erro", + "statusPending": "Pendente", + "clearFilters": "Limpar filtros", + "deleteConfirm": "Excluir este blog e todos os seus itens em cache?", + "created": "Blog adicionado com sucesso.", + "created_synced": "Blog adicionado e sincronizado. Buscados %{items} itens.", + "created_sync_failed": "Blog adicionado, mas a busca inicial falhou: %{error}", + "updated": "Blog atualizado com sucesso.", + "deleted": "Blog excluído com sucesso.", + "refreshed": "Blog atualizado. Adicionados %{items} novos itens.", + "form": { + "discoverUrl": "URL do website", + "discover": "Descobrir feed", + "discoverHint": "Digite uma URL de website para descobrir automaticamente seu feed RSS/Atom", + "discoverNoUrl": "Por favor, digite uma URL de website", + "discovering": "Descobrindo...", + "discoveringHint": "Verificando feeds RSS/Atom...", + "discoverFailed": "Falha ao descobrir feeds", + "discoverNoFeeds": "Nenhum feed encontrado neste website", + "discoverFoundOne": "Feed encontrado:", + "discoverFoundMultiple": "Vários feeds encontrados. Clique em um para selecionar:", + "discoverSelected": "Feed selecionado:", + "feedUrl": "URL do feed", + "feedUrlHint": "URL RSS, Atom ou JSON Feed", + "title": "Título", + "titlePlaceholder": "Detectado automaticamente do feed", + "titleHint": "Deixe em branco para usar o título do feed", + "siteUrl": "URL do site", + "siteUrlHint": "Link para a página inicial do blog (opcional)", + "category": "Categoria", + "categoryHint": "Agrupe blogs por categoria para filtragem e exportação OPML", + "tags": "Tags", + "tagsHint": "Tags separadas por vírgula para organização adicional", + "notes": "Notas", + "notesPlaceholder": "Por que você segue este blog...", + "notesHint": "Notas pessoais (não mostradas publicamente)", + "pinned": "Fixar este blog (mostrar no topo das listas)", + "hidden": "Ocultar da API pública (visível apenas para você)" + } + }, + + "api": { + "title": "Endpoints da API", + "blogs": "Listar todos os blogs com metadados", + "items": "Listar itens recentes de todos os blogs", + "categories": "Listar todas as categorias", + "opml": "Exportar como OPML", + "status": "Status de sincronização e estatísticas" + } + } +} diff --git a/locales/pt.json b/locales/pt.json new file mode 100644 index 0000000..d2362da --- /dev/null +++ b/locales/pt.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Blogroll", + "description": "Gerir as suas fontes de blogroll e blogues", + "enabled": "Ativado", + "disabled": "Desativado", + "edit": "Editar", + "sync": "Sincronizar", + "refresh": "Atualizar", + "cancel": "Cancelar", + "never": "Nunca", + + "stats": { + "title": "Resumo", + "sources": "Fontes", + "blogs": "Blogues", + "items": "Itens", + "errors": "Erros", + "lastSync": "Última sincronização" + }, + + "actions": { + "title": "Ações", + "syncNow": "Sincronizar tudo agora", + "clearResync": "Limpar e ressincronizar", + "clearConfirm": "Isto eliminará todos os itens em cache e voltará a obter tudo. Continuar?" + }, + + "errors": { + "title": "Blogues com erros", + "seeAll": "Ver todos os %{count} blogues com erros" + }, + + "sources": { + "title": "Sincronização OPML", + "manage": "Sincronização OPML", + "add": "Adicionar fonte OPML", + "new": "Nova fonte OPML", + "edit": "Editar fonte OPML", + "create": "Criar", + "save": "Guardar", + "empty": "Nenhuma fonte OPML configurada. Use isto para importar blogues em massa do FreshRSS ou outros leitores de feeds.", + "recent": "Fontes OPML", + "interval": "A cada %{minutes} min", + "lastSync": "Última sincronização", + "deleteConfirm": "Eliminar esta fonte OPML? Os blogues importados permanecerão.", + "created": "Fonte OPML criada com sucesso.", + "created_synced": "Fonte OPML criada e sincronizada com sucesso.", + "created_sync_failed": "Fonte OPML criada, mas a sincronização falhou: %{error}", + "updated": "Fonte OPML atualizada com sucesso.", + "deleted": "Fonte OPML eliminada com sucesso.", + "synced": "Sincronizado com sucesso. Adicionados: %{added}, Atualizados: %{updated}", + "form": { + "name": "Nome", + "type": "Tipo de importação", + "typeHint": "URL sincroniza periodicamente, Ficheiro é uma importação única", + "url": "URL OPML", + "urlHint": "URL do seu ficheiro OPML (ex., URL de exportação FreshRSS)", + "opmlContent": "Conteúdo OPML", + "opmlContentHint": "Cole aqui o conteúdo XML OPML completo", + "syncInterval": "Intervalo de sincronização", + "enabled": "Ativar sincronização automática" + } + }, + + "blogs": { + "title": "Blogues", + "manage": "Gerir blogues", + "add": "Adicionar blogue", + "new": "Novo blogue", + "edit": "Editar blogue", + "create": "Adicionar blogue", + "save": "Guardar blogue", + "empty": "Ainda não há blogues. Adicione um ou importe de uma fonte OPML.", + "recent": "Blogues recentes", + "pinned": "Fixado", + "hidden": "Oculto", + "noItems": "Ainda não foram obtidos itens.", + "recentItems": "Itens recentes", + "allCategories": "Todas as categorias", + "allStatuses": "Todos os estados", + "statusActive": "Ativo", + "statusError": "Erro", + "statusPending": "Pendente", + "clearFilters": "Limpar filtros", + "deleteConfirm": "Eliminar este blogue e todos os seus itens em cache?", + "created": "Blogue adicionado com sucesso.", + "created_synced": "Blogue adicionado e sincronizado. Obtidos %{items} itens.", + "created_sync_failed": "Blogue adicionado, mas a obtenção inicial falhou: %{error}", + "updated": "Blogue atualizado com sucesso.", + "deleted": "Blogue eliminado com sucesso.", + "refreshed": "Blogue atualizado. Adicionados %{items} novos itens.", + "form": { + "discoverUrl": "URL do website", + "discover": "Descobrir feed", + "discoverHint": "Introduza um URL de website para descobrir automaticamente o seu feed RSS/Atom", + "discoverNoUrl": "Por favor, introduza um URL de website", + "discovering": "A descobrir...", + "discoveringHint": "A verificar feeds RSS/Atom...", + "discoverFailed": "Falha ao descobrir feeds", + "discoverNoFeeds": "Nenhum feed encontrado neste website", + "discoverFoundOne": "Feed encontrado:", + "discoverFoundMultiple": "Vários feeds encontrados. Clique num para selecionar:", + "discoverSelected": "Feed selecionado:", + "feedUrl": "URL do feed", + "feedUrlHint": "URL RSS, Atom ou JSON Feed", + "title": "Título", + "titlePlaceholder": "Detetado automaticamente do feed", + "titleHint": "Deixe em branco para usar o título do feed", + "siteUrl": "URL do site", + "siteUrlHint": "Ligação para a página inicial do blogue (opcional)", + "category": "Categoria", + "categoryHint": "Agrupe blogues por categoria para filtragem e exportação OPML", + "tags": "Etiquetas", + "tagsHint": "Etiquetas separadas por vírgulas para organização adicional", + "notes": "Notas", + "notesPlaceholder": "Porque segue este blogue...", + "notesHint": "Notas pessoais (não mostradas publicamente)", + "pinned": "Fixar este blogue (mostrar no topo das listas)", + "hidden": "Ocultar da API pública (visível apenas para si)" + } + }, + + "api": { + "title": "Endpoints da API", + "blogs": "Listar todos os blogues com metadados", + "items": "Listar itens recentes de todos os blogues", + "categories": "Listar todas as categorias", + "opml": "Exportar como OPML", + "status": "Estado de sincronização e estatísticas" + } + } +} diff --git a/locales/sr.json b/locales/sr.json new file mode 100644 index 0000000..f0e2ca3 --- /dev/null +++ b/locales/sr.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Блогрол", + "description": "Управљајте изворима блогрола и блоговима", + "enabled": "Омогућено", + "disabled": "Онемогућено", + "edit": "Измени", + "sync": "Синхронизуј", + "refresh": "Освежи", + "cancel": "Откажи", + "never": "Никад", + + "stats": { + "title": "Преглед", + "sources": "Извори", + "blogs": "Блогови", + "items": "Ставке", + "errors": "Грешке", + "lastSync": "Последња синхронизација" + }, + + "actions": { + "title": "Акције", + "syncNow": "Синхронизуј све сада", + "clearResync": "Обриши и поново синхронизуј", + "clearConfirm": "Ово ће обрисати све кеширане ставке и поново преузети све. Наставити?" + }, + + "errors": { + "title": "Блогови са грешкама", + "seeAll": "Погледај свих %{count} блогова са грешкама" + }, + + "sources": { + "title": "OPML синхронизација", + "manage": "OPML синхронизација", + "add": "Додај OPML извор", + "new": "Нови OPML извор", + "edit": "Измени OPML извор", + "create": "Креирај", + "save": "Сачувај", + "empty": "Нема конфигурисаних OPML извора. Користите ово за масовни увоз блогова из FreshRSS или других читача довода.", + "recent": "OPML извори", + "interval": "Сваких %{minutes} мин", + "lastSync": "Последња синхронизација", + "deleteConfirm": "Обрисати овај OPML извор? Блогови увезени из њега ће остати.", + "created": "OPML извор успешно креиран.", + "created_synced": "OPML извор успешно креиран и синхронизован.", + "created_sync_failed": "OPML извор креиран, али синхронизација није успела: %{error}", + "updated": "OPML извор успешно ажуриран.", + "deleted": "OPML извор успешно обрисан.", + "synced": "Успешно синхронизовано. Додато: %{added}, Ажурирано: %{updated}", + "form": { + "name": "Назив", + "type": "Тип увоза", + "typeHint": "URL се синхронизује периодично, Датотека је једнократни увоз", + "url": "OPML URL", + "urlHint": "URL ваше OPML датотеке (нпр. URL за извоз из FreshRSS)", + "opmlContent": "OPML садржај", + "opmlContentHint": "Налепите овде потпун OPML XML садржај", + "syncInterval": "Интервал синхронизације", + "enabled": "Омогући аутоматску синхронизацију" + } + }, + + "blogs": { + "title": "Блогови", + "manage": "Управљај блоговима", + "add": "Додај блог", + "new": "Нови блог", + "edit": "Измени блог", + "create": "Додај блог", + "save": "Сачувај блог", + "empty": "Још нема блогова. Додајте један или увезите из OPML извора.", + "recent": "Скорашњи блогови", + "pinned": "Закачено", + "hidden": "Сакривено", + "noItems": "Још нема преузетих ставки.", + "recentItems": "Скорашње ставке", + "allCategories": "Све категорије", + "allStatuses": "Сви статуси", + "statusActive": "Активан", + "statusError": "Грешка", + "statusPending": "На чекању", + "clearFilters": "Обриши филтере", + "deleteConfirm": "Обрисати овај блог и све његове кеширане ставке?", + "created": "Блог успешно додат.", + "created_synced": "Блог додат и синхронизован. Преузето %{items} ставки.", + "created_sync_failed": "Блог додат, али почетно преузимање није успело: %{error}", + "updated": "Блог успешно ажуриран.", + "deleted": "Блог успешно обрисан.", + "refreshed": "Блог освежен. Додато %{items} нових ставки.", + "form": { + "discoverUrl": "URL веб-сајта", + "discover": "Открий довод", + "discoverHint": "Унесите URL веб-сајта да аутоматски откријете његов RSS/Atom довод", + "discoverNoUrl": "Молимо унесите URL веб-сајта", + "discovering": "Откривање...", + "discoveringHint": "Проверавање RSS/Atom довода...", + "discoverFailed": "Откривање довода није успело", + "discoverNoFeeds": "Нема пронађених довода на овом веб-сајту", + "discoverFoundOne": "Пронађен довод:", + "discoverFoundMultiple": "Пронађено више довода. Кликните на један да изаберете:", + "discoverSelected": "Изабрани довод:", + "feedUrl": "URL довода", + "feedUrlHint": "RSS, Atom или JSON Feed URL", + "title": "Наслов", + "titlePlaceholder": "Аутоматски откривено из довода", + "titleHint": "Оставите празно да користите наслов довода", + "siteUrl": "URL сајта", + "siteUrlHint": "Линк до почетне странице блога (опционо)", + "category": "Категорија", + "categoryHint": "Групишите блогове по категорији за филтрирање и OPML извоз", + "tags": "Ознаке", + "tagsHint": "Ознаке одвојене зарезима за додатну организацију", + "notes": "Белешке", + "notesPlaceholder": "Зашто пратите овај блог...", + "notesHint": "Личне белешке (неће бити јавно приказане)", + "pinned": "Закачи овај блог (прикажи на врху листа)", + "hidden": "Сакриј од јавног API-ја (видљиво само вама)" + } + }, + + "api": { + "title": "API крајње тачке", + "blogs": "Излистај све блогове са метаподацима", + "items": "Излистај скорашње ставке са свих блогова", + "categories": "Излистај све категорије", + "opml": "Извези као OPML", + "status": "Статус синхронизације и статистика" + } + } +} diff --git a/locales/sv.json b/locales/sv.json new file mode 100644 index 0000000..78f712a --- /dev/null +++ b/locales/sv.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "Bloggroll", + "description": "Hantera dina bloggrollskällor och bloggar", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "edit": "Redigera", + "sync": "Synkronisera", + "refresh": "Uppdatera", + "cancel": "Avbryt", + "never": "Aldrig", + + "stats": { + "title": "Översikt", + "sources": "Källor", + "blogs": "Bloggar", + "items": "Poster", + "errors": "Fel", + "lastSync": "Senaste synkronisering" + }, + + "actions": { + "title": "Åtgärder", + "syncNow": "Synkronisera allt nu", + "clearResync": "Rensa och synkronisera om", + "clearConfirm": "Detta kommer att ta bort alla cachade poster och hämta allt igen. Fortsätta?" + }, + + "errors": { + "title": "Bloggar med fel", + "seeAll": "Se alla %{count} bloggar med fel" + }, + + "sources": { + "title": "OPML-synkronisering", + "manage": "OPML-synkronisering", + "add": "Lägg till OPML-källa", + "new": "Ny OPML-källa", + "edit": "Redigera OPML-källa", + "create": "Skapa", + "save": "Spara", + "empty": "Inga OPML-källor konfigurerade. Använd detta för att massimportera bloggar från FreshRSS eller andra flödesläsare.", + "recent": "OPML-källor", + "interval": "Varje %{minutes} min", + "lastSync": "Senast synkroniserad", + "deleteConfirm": "Ta bort denna OPML-källa? Bloggar importerade från den kommer att finnas kvar.", + "created": "OPML-källa skapad.", + "created_synced": "OPML-källa skapad och synkroniserad.", + "created_sync_failed": "OPML-källa skapad, men synkronisering misslyckades: %{error}", + "updated": "OPML-källa uppdaterad.", + "deleted": "OPML-källa borttagen.", + "synced": "Synkronisering lyckades. Tillagda: %{added}, Uppdaterade: %{updated}", + "form": { + "name": "Namn", + "type": "Importtyp", + "typeHint": "URL synkroniserar periodiskt, Fil är en engångsimport", + "url": "OPML-URL", + "urlHint": "URL till din OPML-fil (t.ex. FreshRSS export-URL)", + "opmlContent": "OPML-innehåll", + "opmlContentHint": "Klistra in det fullständiga OPML XML-innehållet här", + "syncInterval": "Synkroniseringsintervall", + "enabled": "Aktivera automatisk synkronisering" + } + }, + + "blogs": { + "title": "Bloggar", + "manage": "Hantera bloggar", + "add": "Lägg till blogg", + "new": "Ny blogg", + "edit": "Redigera blogg", + "create": "Lägg till blogg", + "save": "Spara blogg", + "empty": "Inga bloggar ännu. Lägg till en eller importera från en OPML-källa.", + "recent": "Senaste bloggarna", + "pinned": "Fäst", + "hidden": "Dold", + "noItems": "Inga poster hämtade ännu.", + "recentItems": "Senaste poster", + "allCategories": "Alla kategorier", + "allStatuses": "Alla statusar", + "statusActive": "Aktiv", + "statusError": "Fel", + "statusPending": "Väntande", + "clearFilters": "Rensa filter", + "deleteConfirm": "Ta bort denna blogg och alla dess cachade poster?", + "created": "Blogg tillagd.", + "created_synced": "Blogg tillagd och synkroniserad. Hämtade %{items} poster.", + "created_sync_failed": "Blogg tillagd, men initial hämtning misslyckades: %{error}", + "updated": "Blogg uppdaterad.", + "deleted": "Blogg borttagen.", + "refreshed": "Blogg uppdaterad. Lade till %{items} nya poster.", + "form": { + "discoverUrl": "Webbplats-URL", + "discover": "Upptäck flöde", + "discoverHint": "Ange en webbplats-URL för att automatiskt upptäcka dess RSS/Atom-flöde", + "discoverNoUrl": "Vänligen ange en webbplats-URL", + "discovering": "Upptäcker...", + "discoveringHint": "Söker efter RSS/Atom-flöden...", + "discoverFailed": "Kunde inte upptäcka flöden", + "discoverNoFeeds": "Inga flöden hittades på denna webbplats", + "discoverFoundOne": "Flöde hittat:", + "discoverFoundMultiple": "Flera flöden hittades. Klicka på ett för att välja:", + "discoverSelected": "Valt flöde:", + "feedUrl": "Flödes-URL", + "feedUrlHint": "RSS-, Atom- eller JSON Feed-URL", + "title": "Titel", + "titlePlaceholder": "Automatiskt upptäckt från flöde", + "titleHint": "Lämna tomt för att använda flödets titel", + "siteUrl": "Webbplats-URL", + "siteUrlHint": "Länk till bloggens startsida (valfritt)", + "category": "Kategori", + "categoryHint": "Gruppera bloggar efter kategori för filtrering och OPML-export", + "tags": "Taggar", + "tagsHint": "Kommaseparerade taggar för ytterligare organisation", + "notes": "Anteckningar", + "notesPlaceholder": "Varför du följer denna blogg...", + "notesHint": "Personliga anteckningar (visas inte offentligt)", + "pinned": "Fäst denna blogg (visa högst upp i listor)", + "hidden": "Dölj från offentligt API (synlig endast för dig)" + } + }, + + "api": { + "title": "API-slutpunkter", + "blogs": "Lista alla bloggar med metadata", + "items": "Lista senaste poster från alla bloggar", + "categories": "Lista alla kategorier", + "opml": "Exportera som OPML", + "status": "Synkroniseringsstatus och statistik" + } + } +} diff --git a/locales/zh-Hans-CN.json b/locales/zh-Hans-CN.json new file mode 100644 index 0000000..cd00ada --- /dev/null +++ b/locales/zh-Hans-CN.json @@ -0,0 +1,133 @@ +{ + "blogroll": { + "title": "博客列表", + "description": "管理您的博客列表来源和博客", + "enabled": "已启用", + "disabled": "已禁用", + "edit": "编辑", + "sync": "同步", + "refresh": "刷新", + "cancel": "取消", + "never": "从不", + + "stats": { + "title": "概览", + "sources": "来源", + "blogs": "博客", + "items": "条目", + "errors": "错误", + "lastSync": "最后同步" + }, + + "actions": { + "title": "操作", + "syncNow": "立即全部同步", + "clearResync": "清除并重新同步", + "clearConfirm": "这将删除所有缓存的条目并重新获取所有内容。继续吗?" + }, + + "errors": { + "title": "有错误的博客", + "seeAll": "查看所有 %{count} 个有错误的博客" + }, + + "sources": { + "title": "OPML 同步", + "manage": "OPML 同步", + "add": "添加 OPML 源", + "new": "新 OPML 源", + "edit": "编辑 OPML 源", + "create": "创建", + "save": "保存", + "empty": "未配置 OPML 源。使用此功能从 FreshRSS 或其他订阅阅读器批量导入博客。", + "recent": "OPML 源", + "interval": "每 %{minutes} 分钟", + "lastSync": "最后同步", + "deleteConfirm": "删除此 OPML 源?从中导入的博客将保留。", + "created": "OPML 源创建成功。", + "created_synced": "OPML 源创建并同步成功。", + "created_sync_failed": "OPML 源已创建,但同步失败:%{error}", + "updated": "OPML 源更新成功。", + "deleted": "OPML 源删除成功。", + "synced": "同步成功。已添加:%{added},已更新:%{updated}", + "form": { + "name": "名称", + "type": "导入类型", + "typeHint": "URL 定期同步,文件是一次性导入", + "url": "OPML URL", + "urlHint": "您的 OPML 文件的 URL(例如 FreshRSS 导出 URL)", + "opmlContent": "OPML 内容", + "opmlContentHint": "在此粘贴完整的 OPML XML 内容", + "syncInterval": "同步间隔", + "enabled": "启用自动同步" + } + }, + + "blogs": { + "title": "博客", + "manage": "管理博客", + "add": "添加博客", + "new": "新博客", + "edit": "编辑博客", + "create": "添加博客", + "save": "保存博客", + "empty": "还没有博客。添加一个或从 OPML 源导入。", + "recent": "最近的博客", + "pinned": "已固定", + "hidden": "已隐藏", + "noItems": "尚未获取任何条目。", + "recentItems": "最近的条目", + "allCategories": "所有类别", + "allStatuses": "所有状态", + "statusActive": "活跃", + "statusError": "错误", + "statusPending": "待处理", + "clearFilters": "清除筛选", + "deleteConfirm": "删除此博客及其所有缓存条目?", + "created": "博客添加成功。", + "created_synced": "博客已添加并同步。获取了 %{items} 个条目。", + "created_sync_failed": "博客已添加,但初始获取失败:%{error}", + "updated": "博客更新成功。", + "deleted": "博客删除成功。", + "refreshed": "博客已刷新。添加了 %{items} 个新条目。", + "form": { + "discoverUrl": "网站 URL", + "discover": "发现订阅源", + "discoverHint": "输入网站 URL 以自动发现其 RSS/Atom 订阅源", + "discoverNoUrl": "请输入网站 URL", + "discovering": "正在发现...", + "discoveringHint": "正在检查 RSS/Atom 订阅源...", + "discoverFailed": "发现订阅源失败", + "discoverNoFeeds": "在此网站上未找到订阅源", + "discoverFoundOne": "找到订阅源:", + "discoverFoundMultiple": "找到多个订阅源。点击一个进行选择:", + "discoverSelected": "已选择的订阅源:", + "feedUrl": "订阅源 URL", + "feedUrlHint": "RSS、Atom 或 JSON Feed URL", + "title": "标题", + "titlePlaceholder": "从订阅源自动检测", + "titleHint": "留空以使用订阅源标题", + "siteUrl": "网站 URL", + "siteUrlHint": "博客主页的链接(可选)", + "category": "类别", + "categoryHint": "按类别对博客进行分组以便筛选和 OPML 导出", + "tags": "标签", + "tagsHint": "用逗号分隔的标签,用于额外组织", + "notes": "笔记", + "notesPlaceholder": "您关注此博客的原因...", + "notesHint": "个人笔记(不公开显示)", + "pinned": "固定此博客(在列表顶部显示)", + "hidden": "从公共 API 隐藏(仅对您可见)" + } + }, + + "api": { + "title": "API 端点", + "blogs": "列出所有博客及元数据", + "items": "列出所有博客的最新条目", + "categories": "列出所有类别", + "opml": "导出为 OPML", + "status": "同步状态和统计" + } + } +} diff --git a/package.json b/package.json index d818e64..23d3234 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rmdes/indiekit-endpoint-blogroll", - "version": "1.0.17", + "version": "1.0.18", "description": "Blogroll endpoint for Indiekit. Aggregates blog feeds from OPML, JSON feeds, or manual entry.", "keywords": [ "indiekit",