Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reiverr Translate #77

Open
GaetanPTX opened this issue Aug 22, 2023 · 10 comments
Open

Reiverr Translate #77

GaetanPTX opened this issue Aug 22, 2023 · 10 comments
Labels
community Up to contributors, I'm not probably doing this myself any time soon discussion Megathread / This needs discussing good first issue Good for newcomers

Comments

@GaetanPTX
Copy link

Where can I help translate Reiverr into French?

@aleksilassila
Copy link
Owner

Hey,

If you have experience with javascript, follow the steps here to get yourself a development environment. Then in the source code, create following file: src/lib/lang/fr.json, register it in src/lib/components/Lang/I18n.svelte similar to Spanish, and then you can copy english translations from src/lib/lang/en.json to src/lib/lang/fr.json and start translating :)

If you don't have development experience, you can copy the english translations file below, add your translations and send it back to me here and I'll add them for you.

src/lib/lang/en.json

{
	"appName": "Reiverr",
	"setupRequiredTitle": "Welcome to",
	"setupRequiredDescription": "It seems like the application is missing some environment variables that are necessary for the application to function. Please provide the following environment variables:",
	"navbar": {
		"home": "Home",
		"discover": "Discover",
		"library": "Library",
		"sources": "Sources",
		"settings": "Settings"
	},
	"search": {
		"placeHolder": "Search for Movies and TV Shows",
		"noRecentSearches": "No recent searches",
		"noResults": "No search results"
	},
	"discover": {
		"trending": "Trending",
		"popularPeople": "Popular People",
		"upcomingMovies": "Upcoming Movies",
		"upcomingSeries": "Upcoming Series",
		"genres": "Genres",
		"newDigitalReleases": "New Digital Releases",
		"streamingNow": "On Streaming Now",
		"TVNetworks": "TV Networks"
	},
	"library": {
		"missingConfiguration": "Configure Radarr, Sonarr and Jellyfin to watch and manage your library",
		"available": "Available",
		"watched": "Watched",
		"unavailable": "Unavailable",
		"sort": {
			"byTitle": "By Title"
		},
		"content": {
			"movie": "Movie",
			"show": "Show",
			"requestContent": "Request",
			"directedBy": "Directed By",
			"releaseDate": "Release Date",
			"budget": "Budget",
			"status": "Status",
			"runtime": "Runtime",
			"castAndCrew": "Cast & Crew",
			"recommendations": "Recommendations",
			"similarTitles": "Similar Titles"
		}
	},
	"sources": {},
	"titleShowcase": {
		"details": "Details",
		"watchTrailer": "Watch Trailer",
		"releaseDate": "Release Date",
		"directedBy": "Directed By"
	},
	"settings": {
		"navbar": {
			"settings": "Configuration",
			"general": "General",
			"integrations": "Integrations"
		},
		"general": {
			"userInterface": {
				"userInterface": "User Interface",
				"language": "Language",
				"autoplayTrailers": "Autoplay Trailers",
				"animationDuration": "Animation Duration"
			},
			"discovery": {
				"discovery": "Discovery",
				"none": "None",
				"region": "Region",
				"excludeLibraryItemsFromDiscovery": "Exclude library items from Discovery",
				"includedLanguages": "Included languages",
				"includedLanguagesDescription": "Filter results based on spoken language. Takes ISO 639-1 language codes separated with commas. Leave empty to disable."
			}
		},
		"integrations": {
			"integrations": "Integrations",
			"integrationsNote": "Note: Base urls must be accessible from the browser, meaning that internal docker addresses won't work, for example. API Keys <span class='font-medium underline'>will be exposed</span> to the browser.",
			"baseUrl": "Base URL",
			"apiKey": "API Key",
			"testConnection": "Test Connection",
			"status": {
				"connected": "Connected",
				"disconnected": "Disconnected"
			},
			"options": {
				"options": "Options",
				"rootFolder": "Root Folder",
				"qualityProfile": "Quality Profile",
				"languageProfile": "Language Profile",
				"jellyfinUser": "Jellyfin User"
			}
		},
		"misc": {
			"saveChanges": "Save Changes",
			"resetToDefaults": "Reset to Defaults ",
			"changelog": "Changelog"
		}
	}
}

Thank you!

@GaetanPTX
Copy link
Author

GaetanPTX commented Aug 22, 2023

I translated the json file in French for your next update

{
  "appName": "Reiverr",
  "setupRequiredTitle": "Bienvenue à",
  "setupRequiredDescription": "Il semble que l'application manque de certaines variables d'environnement nécessaires au fonctionnement de l'application. ",
  "navbar": {
    "home": "Accueil",
    "discover": "Découvrir",
    "library": "Bibliothèque",
    "sources": "Sources",
    "settings": "Paramètres"
  },
  "search": {
    "placeHolder": "Rechercher des films et des émissions de télévision",
    "noRecentSearches": "Aucune recherche récente",
    "noResults": "Aucun résultat trouvé"
  },
  "discover": {
    "trending": "Tendance",
    "popularPeople": "Personnes populaires",
    "upcomingMovies": "Films à venir",
    "upcomingSeries": "Série à venir",
    "genres": "Genres",
    "newDigitalReleases": "Nouvelles versions numériques",
    "streamingNow": "En streaming maintenant",
    "TVNetworks": "Réseaux de télévision"
  },
  "library": {
    "missingConfiguration": "Configurez Radarr, Sonarr et Jellyfin pour surveiller et gérer votre bibliothèque",
    "available": "Disponible",
    "watched": "Regardé",
    "unavailable": "Indisponible",
    "sort": {
      "byTitle": "Par titre"
    },
    "content": {
      "movie": "Film",
      "show": "Voir",
      "requestContent": "Demander",
      "directedBy": "Dirigé par",
      "releaseDate": "Date de sortie",
      "budget": "Budget",
      "status": "Statut",
      "runtime": "Durée",
      "castAndCrew": "Casting",
      "recommendations": "Recommandations",
      "similarTitles": "Titres similaires"
    }
  },
  "sources": {},
  "titleShowcase": {
    "details": "Détails",
    "watchTrailer": "Regarde la bande-annonce",
    "releaseDate": "Date de sortie",
    "directedBy": "Dirigé par"
  },
  "settings": {
    "navbar": {
      "settings": "Configuration",
      "general": "Général",
      "integrations": "Intégrations"
    },
    "general": {
      "userInterface": {
        "userInterface": "Interface utilisateur",
        "language": "Langue",
        "autoplayTrailers": "Bandes-annonces à lecture automatique",
        "animationDuration": "Durée de l'animation"
      },
      "discovery": {
        "discovery": "Découverte",
        "none": "Aucun",
        "region": "Région",
        "excludeLibraryItemsFromDiscovery": "Exclure les éléments de bibliothèque de Discovery",
        "includedLanguages": "Langues incluses",
        "includedLanguagesDescription": "Filtrez les résultats en fonction de la langue parlée. "
      }
    },
    "integrations": {
      "integrations": "Intégrations",
      "integrationsNote": "Remarque : Les URL de base doivent être accessibles depuis le navigateur, ce qui signifie que les adresses Docker internes ne fonctionneront pas, par exemple.  La clé d'API <span class='font-medium underline'>sera exposée</span> au navigateur.",
      "baseUrl": "URL de base",
      "apiKey": "clé API",
      "testConnection": "Tester la connexion",
      "status": {
        "connected": "Connecté",
        "disconnected": "Déconnecté"
      },
      "options": {
        "options": "Options",
        "rootFolder": "Dossier racine",
        "qualityProfile": "Profil de qualité",
        "languageProfile": "Profil linguistique",
        "jellyfinUser": "Utilisateur de Jellyfin"
      }
    },
    "misc": {
      "saveChanges": "Sauvegarder les modifications",
      "resetToDefaults": "Réinitialiser les paramètres par défaut ",
      "changelog": "Journal des modifications"
    }
  }
}

@aleksilassila
Copy link
Owner

Very nice, I'll add them 👍 Just to double check, is the settings.integrations.integrationsNote correct? It seems like it's missing the API key part

@GaetanPTX
Copy link
Author

Ah yes indeed I forgot this part, I corrected my previous message. Thanks

@serverless83
Copy link

serverless83 commented Aug 31, 2023

Here the Italian translation:

{
	"appName": "Reiverr",
	"setupRequiredTitle": "Benvenuti in",
	"setupRequiredDescription": "Sembra che alcune variabili di ambiente necessarie per il funzionamento dell'applicazione siano mancanti. Per favore, inserisci le seguenti variabili d'ambiente:",
	"navbar": {
		"home": "Home",
		"discover": "Esplora",
		"library": "Libreria",
		"sources": "Fonti",
		"settings": "Impostazioni"
	},
	"search": {
		"placeHolder": "Cerca Film o Serie TV",
		"noRecentSearches": "Nessuna ricerca recente",
		"noResults": "Nessun risultato"
	},
	"discover": {
		"trending": "In tendenza",
		"popularPeople": "Personaggi in tendenza",
		"upcomingMovies": "Film in uscita",
		"upcomingSeries": "Serie TV in uscita",
		"genres": "Generi",
		"newDigitalReleases": "Nuove uscite in digitale",
		"streamingNow": "In streaming adesso",
		"TVNetworks": "Network TV"
	},
	"library": {
		"missingConfiguration": "Configura Radarr, Sonarr e Jellyfin per guardare e gestire la tua libreria",
		"available": "Disponibile",
		"watched": "Guardato",
		"unavailable": "Non disponibile",
		"sort": {
			"byTitle": "Per Titolo"
		},
		"content": {
			"movie": "Film",
			"show": "Serie TV",
			"requestContent": "Richiedi",
			"directedBy": "Diretto da",
			"releaseDate": "Data di uscita",
			"budget": "Budget",
			"status": "Stato",
			"runtime": "Durata",
			"castAndCrew": "Cast e Crew",
			"recommendations": "Suggerimenti",
			"similarTitles": "Titoli simili"
		}
	},
	"sources": {},
	"titleShowcase": {
		"details": "Dettagli",
		"watchTrailer": "Guarda il trailer",
		"releaseDate": "Data di uscita",
		"directedBy": "Diretto da"
	},
	"settings": {
		"navbar": {
			"settings": "Configurazione",
			"general": "Generale",
			"integrations": "Integrazioni"
		},
		"general": {
			"userInterface": {
				"userInterface": "Interfaccia utente",
				"language": "Lingua",
				"autoplayTrailers": "Riproduci automaticamente i trailer",
				"animationDuration": "Durata dell'animazione"
			},
			"discovery": {
				"discovery": "Esplora",
				"none": "Niente",
				"region": "Paese",
				"excludeLibraryItemsFromDiscovery": "Escludi i media presenti nella libreria dalla sezione Esplora",
				"includedLanguages": "Lingue disponibili",
				"includedLanguagesDescription": "Filtra i risultati in base alla lingua dell'audio. Inserisci i codici della lingua in formato ISO 639-1 separati da virgola. Lascia vuoto per disabilitare."
			}
		},
		"integrations": {
			"integrations": "Integrazioni",
			"integrationsNote": "Nota bene: L'indirizzo (URL) deve essere accessibile dal browser, questo vuol dire che indirizzi come quello interno di docker non funzioneranno. Le chiavi API <span class='font-medium underline'>saranno rese disponibili</span> al browser.",
			"baseUrl": "Indirizzo (URL)",
			"apiKey": "Chiave API",
			"testConnection": "Testa la connessione",
			"status": {
				"connected": "Connesso",
				"disconnected": "Disconnesso"
			},
			"options": {
				"options": "Opzioni",
				"rootFolder": "Percorso",
				"qualityProfile": "Profilo di qualità",
				"languageProfile": "Profilo della lingua",
				"jellyfinUser": "Utente Jellyfin"
			}
		},
		"misc": {
			"saveChanges": "Salva",
			"resetToDefaults": "Impostazioni predefinite",
			"changelog": "Note di rilascio"
		}
	}
}

@aleksilassila
Copy link
Owner

Thanks @serverless83, I added them and they will ship with the next version.

@aleksilassila aleksilassila added community Up to contributors, I'm not probably doing this myself any time soon good first issue Good for newcomers labels Sep 1, 2023
@rogeriomendes
Copy link

Translation to Portuguese Brazil:

{
	"appName": "Reiverr",
	"setupRequiredTitle": "Bem-vindo ao",
	"setupRequiredDescription": "Parece que faltam algumas variáveis de ambiente, que são necessárias para o funcionamento do aplicativo. Forneça as seguintes variáveis de ambiente:",
	"navbar": {
		"home": "Início",
		"discover": "Explorar",
		"library": "Biblioteca",
		"sources": "Fontes",
		"settings": "Configurações"
	},
	"search": {
		"placeHolder": "Pesquise Filmes e Séries",
		"noRecentSearches": "Nenhuma pesquisa recente",
		"noResults": "Nenhum resultado da pesquisa"
	},
	"discover": {
		"trending": "Em alta",
		"popularPeople": "Pessoas populares",
		"upcomingMovies": "Próximos lançamentos de filmes",
		"upcomingSeries": "Próximos lançamentos de séries",
		"genres": "Gêneros",
		"newDigitalReleases": "Novos lançamentos digitais",
		"streamingNow": "Transmitindo agora",
		"TVNetworks": "Emissora"
	},
	"library": {
		"missingConfiguration": "Configure Radarr, Sonarr e Jellyfin para monitorar e gerenciar sua biblioteca",
		"available": "Disponível",
		"watched": "Assistido",
		"unavailable": "Indisponível",
		"sort": {
			"byTitle": "Por título"
		},
		"content": {
			"movie": "Filmes",
			"show": "Séries",
			"requestContent": "Solicitar",
			"directedBy": "Dirigido por",
			"releaseDate": "Data de lançamento",
			"budget": "Orçamento",
			"status": "Estado",
			"runtime": "Tempo de execução",
			"castAndCrew": "Elenco e equipe",
			"recommendations": "Recomendações",
			"similarTitles": "Títulos semelhantes"
		}
	},
	"sources": {},
	"titleShowcase": {
		"details": "Detalhes",
		"watchTrailer": "Assistir Trailer",
		"releaseDate": "Data de lançamento",
		"directedBy": "Dirigido por"
	},
	"settings": {
		"navbar": {
			"settings": "Configuração",
			"general": "Geral",
			"integrations": "Integrações"
		},
		"general": {
			"userInterface": {
				"userInterface": "Interface de usuário",
				"language": "Idioma",
				"autoplayTrailers": "Reprodução automática de trailers",
				"animationDuration": "Duração da animação"
			},
			"discovery": {
				"discovery": "Explorar",
				"none": "Nenhum",
				"region": "Região",
				"excludeLibraryItemsFromDiscovery": "Excluir itens da biblioteca do Explorar",
				"includedLanguages": "Idiomas incluídos",
				"includedLanguagesDescription": "Filtre os resultados com base no idioma falado. Utiliza códigos de idioma ISO 639-1 separados por vírgulas. Deixe em branco para desabilitar."
			}
		},
		"integrations": {
			"integrations": "Integrações",
			"integrationsNote": "Observação: as URLs base devem estar acessíveis no navegador, o que significa que os endereços internos do docker não funcionarão, por exemplo. As chaves de API <span class='font-medium underline'>serão expostas</span> ao navegador.",
			"baseUrl": "URL base",
			"apiKey": "Chave API",
			"testConnection": "Testar conexão",
			"status": {
				"connected": "Conectado",
				"disconnected": "Desconectado"
			},
			"options": {
				"options": "Opções",
				"rootFolder": "Pasta raiz",
				"qualityProfile": "Perfil de qualidade",
				"languageProfile": "Perfil de idioma",
				"jellyfinUser": "Usuário Jellyfin"
			}
		},
		"misc": {
			"saveChanges": "Salvar alterações",
			"resetToDefaults": "Redefinir para os padrões",
			"changelog": "Mudanças"
		}
	}
}

@bannert1337
Copy link

Translation to German:

{
	"appName": "Reiverr",
	"setupRequiredTitle": "Willkommen bei",
	"setupRequiredDescription": "Es scheint, dass der Anwendung einige Umgebungsvariablen fehlen, die für ihre Funktion erforderlich sind. Bitte geben Sie die folgenden Umgebungsvariablen an:",
	"navbar": {
		"home": "Startseite",
		"discover": "Entdecken",
		"library": "Bibliothek",
		"sources": "Quellen",
		"settings": "Einstellungen"
	},
	"search": {
		"placeHolder": "Suche nach Filmen und Serien",
		"noRecentSearches": "Keine kürzlichen Suchanfragen",
		"noResults": "Keine Suchergebnisse"
	},
	"discover": {
		"trending": "Trends",
		"popularPeople": "Beliebte Personen",
		"upcomingMovies": "Kommende Filme",
		"upcomingSeries": "Kommende Serien",
		"genres": "Genres",
		"newDigitalReleases": "Neue digitale Veröffentlichungen",
		"streamingNow": "Jetzt im Stream",
		"TVNetworks": "Fernsehsender"
	},
	"library": {
		"missingConfiguration": "Konfigurieren Sie Radarr, Sonarr und Jellyfin, um Ihre Bibliothek anzusehen und zu verwalten",
		"available": "Verfügbar",
		"watched": "Gesehen",
		"unavailable": "Nicht verfügbar",
		"sort": {
			"byTitle": "Nach Titel"
		},
		"content": {
			"movie": "Film",
			"show": "Serie",
			"requestContent": "Anfordern",
			"directedBy": "Regie",
			"releaseDate": "Veröffentlichungsdatum",
			"budget": "Budget",
			"status": "Status",
			"runtime": "Laufzeit",
			"castAndCrew": "Besetzung & Crew",
			"recommendations": "Empfehlungen",
			"similarTitles": "Ähnliche Titel"
		}
	},
	"sources": {},
	"titleShowcase": {
		"details": "Details",
		"watchTrailer": "Trailer ansehen",
		"releaseDate": "Veröffentlichungsdatum",
		"directedBy": "Regie"
	},
	"settings": {
		"navbar": {
			"settings": "Konfiguration",
			"general": "Allgemein",
			"integrations": "Integrationen"
		},
		"general": {
			"userInterface": {
				"userInterface": "Benutzeroberfläche",
				"language": "Sprache",
				"autoplayTrailers": "Trailer automatisch abspielen",
				"animationDuration": "Animationsdauer"
			},
			"discovery": {
				"discovery": "Entdeckung",
				"none": "Keine",
				"region": "Region",
				"excludeLibraryItemsFromDiscovery": "Bibliothekselemente von der Entdeckung ausschließen",
				"includedLanguages": "Eingeschlossene Sprachen",
				"includedLanguagesDescription": "Filterergebnisse basierend auf gesprochener Sprache. Verwenden Sie durch Kommas getrennte ISO 639-1 Sprachcodes. Lassen Sie das Feld leer, um die Funktion zu deaktivieren."
			}
		},
		"integrations": {
			"integrations": "Integrationen",
			"integrationsNote": "Hinweis: Basis-URLs müssen vom Browser aus erreichbar sein. Interne Docker-Adressen funktionieren zum Beispiel nicht. API-Schlüssel <span class='font-medium underline'>werden dem Browser angezeigt</span>.",
			"baseUrl": "Basis-URL",
			"apiKey": "API-Schlüssel",
			"testConnection": "Verbindung testen",
			"status": {
				"connected": "Verbunden",
				"disconnected": "Getrennt"
			},
			"options": {
				"options": "Optionen",
				"rootFolder": "Stammverzeichnis",
				"qualityProfile": "Qualitätsprofil",
				"languageProfile": "Sprachprofil",
				"jellyfinUser": "Jellyfin-Benutzer"
			}
		},
		"misc": {
			"saveChanges": "Änderungen speichern",
			"resetToDefaults": "Auf Standardwerte zurücksetzen",
			"changelog": "Änderungsprotokoll"
		}
	}
}

@chris-kruining
Copy link

chris-kruining commented Jun 5, 2024

I have a suggestion: convert the lang file names to locales instead of just the language. the motivation being that you can have more granular control over "accents" so to speak.

so en.json would become en-gb.json and en-us.json for example.

the reason I state this is because the dutch translations are made by a Belgium person. and whilst it is totally legible for me, dutch and flamish do have some differences witch result in sentences that are really unnatural in dutch, but totally normal in flamish. And since I don't think we should favor one over the other I suggest to just have both.

I'd be happy to provide you with a PR

@aleksilassila
Copy link
Owner

I have a suggestion: convert the lang file names to locales instead of just the language. the motivation being that you can have more granular control over "accents" so to speak.

so en.json would become en-gb.json and en-us.json for example.

the reason I state this is because the dutch translations are made by a Belgium person. and whilst it is totally legible for me, dutch and flamish do have some differences witch result in sentences that are really unnatural in dutch, but totally normal in flamish. And since I don't think we should favor one over the other I suggest to just have both.

I'd be happy to provide you with a PR

Good insight, didn't realize this! I will probably leave language support to the community again, as I have quite a lot on my plate in terms of the rewrite. So if you or someone else wants to implement this to v0 or v2, I'd be happy to merge. Also seems like there's a lot of translations here that I've forgot to merge, so I'll try to include those next week (or if someone wants to speed things up, feel free to create a PR for me :))

@aleksilassila aleksilassila added the discussion Megathread / This needs discussing label Jun 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
community Up to contributors, I'm not probably doing this myself any time soon discussion Megathread / This needs discussing good first issue Good for newcomers
Projects
Development

No branches or pull requests

6 participants