From 80192e65c414f1c6fbcea92a56cdc2057cbb7ba6 Mon Sep 17 00:00:00 2001 From: Miro Rauhala Date: Tue, 15 Jul 2025 09:39:38 +0300 Subject: [PATCH] feat(lang): add Finnish localization support (#676) Co-authored-by: retardgerman <78982850+retardgerman@users.noreply.github.com> Co-authored-by: Fredrik Burmester --- i18n.ts | 3 + translations/fi.json | 480 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 483 insertions(+) create mode 100644 translations/fi.json diff --git a/i18n.ts b/i18n.ts index 135c635d..5a2bcd6e 100644 --- a/i18n.ts +++ b/i18n.ts @@ -12,6 +12,7 @@ import ja from "./translations/ja.json"; import nl from "./translations/nl.json"; import pl from "./translations/pl.json"; import ptBR from "./translations/pt-BR.json"; +import fi from "./translations/fi.json"; import ro from "./translations/ro.json"; import ru from "./translations/ru.json"; import sq from "./translations/sq.json"; @@ -38,6 +39,7 @@ export const APP_LANGUAGES = [ { label: "Português (Brasil)", value: "pt-BR" }, { label: "Română", value: "ro" }, { label: "Svenska", value: "sv" }, + { label: "Suomi", value: "fi" }, { label: "Shqip", value: "sq" }, { label: "Русский", value: "ru" }, { label: "Українська", value: "uk" }, @@ -62,6 +64,7 @@ i18n.use(initReactI18next).init({ "pt-BR": { translation: ptBR }, ro: { translation: ro }, sv: { translation: sv }, + fi: { translation: fi }, sq: { translation: sq }, ru: { translation: ru }, tr: { translation: tr }, diff --git a/translations/fi.json b/translations/fi.json new file mode 100644 index 00000000..215ecf59 --- /dev/null +++ b/translations/fi.json @@ -0,0 +1,480 @@ +{ + "login": { + "username_required": "Käyttäjätunnus on pakollinen", + "error_title": "Virhe", + "login_title": "Kirjaudu sisään", + "login_to_title": "Kirjaudu sisään palveluun", + "username_placeholder": "Käyttäjätunnus", + "password_placeholder": "Salasana", + "login_button": "Kirjaudu sisään", + "quick_connect": "Pikayhdistys", + "enter_code_to_login": "Syötä koodi {{code}} kirjautuaksesi", + "failed_to_initiate_quick_connect": "Pikayhdistyksen aloittaminen epäonnistui", + "got_it": "Okei", + "connection_failed": "Yhteys epäonnistui", + "could_not_connect_to_server": "Yhteyttä palvelimeen ei voitu muodostaa. Tarkista URL-osoite ja verkkoyhteytesi.", + "an_unexpected_error_occured": "Odottamaton virhe tapahtui", + "change_server": "Vaihda palvelinta", + "invalid_username_or_password": "Virheellinen käyttäjätunnus tai salasana", + "user_does_not_have_permission_to_log_in": "Käyttäjällä ei ole oikeuksia kirjautua sisään", + "server_is_taking_too_long_to_respond_try_again_later": "Palvelin reagoi liian hitaasti, yritä myöhemmin uudelleen", + "server_received_too_many_requests_try_again_later": "Palvelin sai liian monta pyyntöä, yritä myöhemmin uudelleen.", + "there_is_a_server_error": "Palvelimessa on virhe", + "an_unexpected_error_occured_did_you_enter_the_correct_url": "Odottamaton virhe tapahtui. Syötitkö palvelimen URL-osoitteen oikein?" + }, + "server": { + "enter_url_to_jellyfin_server": "Syötä URL-osoite Jellyfin-palvelimellesi", + "server_url_placeholder": "http(s)://oma-palvelin.com", + "connect_button": "Yhdistä", + "previous_servers": "edelliset palvelimet", + "clear_button": "Tyhjennä", + "search_for_local_servers": "Etsi paikallisia palvelimia", + "searching": "Etsitään...", + "servers": "Palvelimet" + }, + "home": { + "no_internet": "Ei internet-yhteyttä", + "no_items": "Ei kohteita", + "no_internet_message": "Ei hätää, voit silti katsella\nladattua sisältöä.", + "go_to_downloads": "Siirry latauksiin", + "oops": "Ups!", + "error_message": "Jotain meni pieleen.\nKirjaudu ulos ja takaisin sisään.", + "continue_watching": "Jatka katsomista", + "next_up": "Seuraavaksi", + "recently_added_in": "Äskettäin lisätty {{libraryName}}-kirjastoon", + "suggested_movies": "Ehdotetut elokuvat", + "suggested_episodes": "Ehdotetut jaksot", + "intro": { + "welcome_to_streamyfin": "Tervetuloa Streamyfiniin", + "a_free_and_open_source_client_for_jellyfin": "Ilmainen ja avoimen lähdekoodin asiakas Jellyfinille.", + "features_title": "Ominaisuudet", + "features_description": "Streamyfin sisältää useita ominaisuuksia ja integroituu laajaan valikoimaan ohjelmistoja, jotka löydät asetukset-valikosta. Näitä ovat:", + "jellyseerr_feature_description": "Yhdistä Jellyseerr-instanssiisi ja pyydä elokuvia suoraan sovelluksessa.", + "downloads_feature_title": "Lataukset", + "downloads_feature_description": "Lataa elokuvia ja TV-sarjoja katsottavaksi offline-tilassa. Käytä joko oletusmenetelmää tai asenna optimoitu palvelin ladataksesi tiedostoja taustalla.", + "chromecast_feature_description": "Lähetä elokuvia ja TV-sarjoja Chromecast-laitteillesi.", + "centralised_settings_plugin_title": "Keskitetty asetusten liitännäinen", + "centralised_settings_plugin_description": "Määritä asetukset keskitetystä sijainnista Jellyfin-palvelimellasi. Kaikki asiakasasetukset kaikille käyttäjille synkronoidaan automaattisesti.", + "done_button": "Valmis", + "go_to_settings_button": "Siirry asetuksiin", + "read_more": "Lue lisää" + }, + "settings": { + "settings_title": "Asetukset", + "log_out_button": "Kirjaudu ulos", + "user_info": { + "user_info_title": "Käyttäjätiedot", + "user": "Käyttäjä", + "server": "Palvelin", + "token": "Token", + "app_version": "Sovelluksen versio" + }, + "quick_connect": { + "quick_connect_title": "Pikayhdistys", + "authorize_button": "Valtuuta Pikayhdistys", + "enter_the_quick_connect_code": "Syötä nopean yhteyden koodi...", + "success": "Onnistui", + "quick_connect_autorized": "Pikayhdistys valtuutettu", + "error": "Virhe", + "invalid_code": "Virheellinen koodi", + "authorize": "Valtuuta" + }, + "media_controls": { + "media_controls_title": "Mediaohjaimet", + "forward_skip_length": "Eteenpäin hyppäämisen pituus", + "rewind_length": "Taaksepäin hyppäämisen pituus", + "seconds_unit": "s" + }, + "audio": { + "audio_title": "Ääni", + "set_audio_track": "Aseta ääniura edellisestä kohteesta", + "audio_language": "Ääni kieli", + "audio_hint": "Valitse oletusäänen kieli.", + "none": "Ei mitään", + "language": "Kieli" + }, + "subtitles": { + "subtitle_title": "Tekstitykset", + "subtitle_language": "Tekstityksen kieli", + "subtitle_mode": "Tekstitysmoodi", + "set_subtitle_track": "Aseta tekstitys edellisestä kohteesta", + "subtitle_size": "Tekstityksen koko", + "subtitle_hint": "Määritä tekstitysasetukset.", + "none": "Ei mitään", + "language": "Kieli", + "loading": "Ladataan", + "modes": { + "Default": "Oletus", + "Smart": "Älykäs", + "Always": "Aina", + "None": "Ei mitään", + "OnlyForced": "Vain pakotettu" + } + }, + "other": { + "other_title": "Muut", + "follow_device_orientation": "Automaattinen kierto", + "video_orientation": "Videon suunta", + "orientation": "Suunta", + "orientations": { + "DEFAULT": "Oletus", + "ALL": "Kaikki", + "PORTRAIT": "Pystysuora", + "PORTRAIT_UP": "Pystysuora ylös", + "PORTRAIT_DOWN": "Pystysuora alas", + "LANDSCAPE": "Vaakasuora", + "LANDSCAPE_LEFT": "Vaakasuora vasemmalle", + "LANDSCAPE_RIGHT": "Vaakasuora oikealle", + "OTHER": "Muu", + "UNKNOWN": "Tuntematon" + }, + "safe_area_in_controls": "Turvallinen alue ohjaimissa", + "video_player": "Videosoitin", + "video_players": { + "VLC_3": "VLC 3", + "VLC_4": "VLC 4 (Kokeellinen + PiP)" + }, + "show_custom_menu_links": "Näytä mukautetut valikkolinkit", + "hide_libraries": "Piilota kirjastot", + "select_liraries_you_want_to_hide": "Valitse kirjastot, jotka haluat piilottaa Kirjasto-välilehdeltä ja etusivun osioista.", + "disable_haptic_feedback": "Poista haptinen palautteet käytöstä", + "default_quality": "Oletuslaatu" + }, + "downloads": { + "downloads_title": "Lataukset", + "download_method": "Latausmenetelmä", + "remux_max_download": "Remuxin maksimi lataus", + "auto_download": "Automaattinen lataus", + "optimized_versions_server": "Optimoitujen versioiden palvelin", + "save_button": "Tallenna", + "optimized_server": "Optimoitu palvelin", + "optimized": "Optimoitu", + "default": "Oletus", + "optimized_version_hint": "Syötä optimoidun palvelimen URL-osoite. URL-osoitteen tulee sisältää http tai https ja valinnaisesti portti.", + "read_more_about_optimized_server": "Lue lisää optimoidusta palvelimesta.", + "url": "URL", + "server_url_placeholder": "http(s)://verkkotunnus.org:portti" + }, + "plugins": { + "plugins_title": "Liitännäiset", + "jellyseerr": { + "jellyseerr_warning": "Tämä integraatio on alkuvaiheessa. Odota muutoksia.", + "server_url": "Palvelimen URL", + "server_url_hint": "Esimerkki: http(s)://verkkotunnus.url\n(lisää portti tarvittaessa)", + "server_url_placeholder": "Jellyseerr URL...", + "password": "Salasana", + "password_placeholder": "Syötä salasana Jellyfin-käyttäjälle {{username}}", + "save_button": "Tallenna", + "clear_button": "Tyhjennä", + "login_button": "Kirjaudu sisään", + "total_media_requests": "Yhteensä mediapyynnöt", + "movie_quota_limit": "Elokuvakiintiön raja", + "movie_quota_days": "Elokuvakiintiön päivät", + "tv_quota_limit": "TV-kiintiön raja", + "tv_quota_days": "TV-kiintiön päivät", + "reset_jellyseerr_config_button": "Nollaa Jellyseerr-asetukset", + "unlimited": "Rajoittamaton", + "plus_n_more": "+{{n}} lisää", + "order_by": { + "DEFAULT": "Oletus", + "VOTE_COUNT_AND_AVERAGE": "Äänimäärä ja keskiarvo", + "POPULARITY": "Suosio" + } + }, + "marlin_search": { + "enable_marlin_search": "Ota Marlin-haku käyttöön", + "url": "URL", + "server_url_placeholder": "http(s)://verkkotunnus.org:portti", + "marlin_search_hint": "Syötä Marlin-palvelimen URL-osoite. URL-osoitteen tulee sisältää http tai https ja valinnaisesti portti.", + "read_more_about_marlin": "Lue lisää Marlinista.", + "save_button": "Tallenna", + "toasts": { + "saved": "Tallennettu" + } + } + }, + "storage": { + "storage_title": "Tallennustila", + "app_usage": "Sovelluksen käyttö {{usedSpace}}%", + "device_usage": "Laitteen käyttö {{availableSpace}}%", + "size_used": "{{used}} / {{total}} käytössä", + "delete_all_downloaded_files": "Poista kaikki ladatut tiedostot" + }, + "intro": { + "show_intro": "Näytä intro", + "reset_intro": "Nollaa intro" + }, + "logs": { + "logs_title": "Lokit", + "export_logs": "Vie lokit", + "click_for_more_info": "Napsauta lisätietoja varten", + "level": "Taso", + "no_logs_available": "Ei lokitietoja saatavilla", + "delete_all_logs": "Poista kaikki lokit" + }, + "languages": { + "title": "Kielet", + "app_language": "Sovelluksen kieli", + "app_language_description": "Valitse sovelluksen kieli.", + "system": "Järjestelmä" + }, + "toasts": { + "error_deleting_files": "Virhe tiedostojen poistamisessa", + "background_downloads_enabled": "Taustalataukset käytössä", + "background_downloads_disabled": "Taustalataukset pois käytöstä", + "connected": "Yhdistetty", + "could_not_connect": "Yhteyttä ei voitu muodostaa", + "invalid_url": "Virheellinen URL" + } + }, + "sessions": { + "title": "Istunnot", + "no_active_sessions": "Ei aktiivisia istuntoja" + }, + "downloads": { + "downloads_title": "Lataukset", + "tvseries": "TV-sarjat", + "movies": "Elokuvat", + "queue": "Jonot", + "queue_hint": "Jonot ja lataukset menetetään sovelluksen uudelleenkäynnistyksen yhteydessä", + "no_items_in_queue": "Ei kohteita jonossa", + "no_downloaded_items": "Ei ladattuja kohteita", + "delete_all_movies_button": "Poista kaikki elokuvat", + "delete_all_tvseries_button": "Poista kaikki TV-sarjat", + "delete_all_button": "Poista kaikki", + "active_download": "Aktiivinen lataus", + "no_active_downloads": "Ei aktiivisia latauksia", + "active_downloads": "Aktiiviset lataukset", + "new_app_version_requires_re_download": "Uusi sovellusversio vaatii uudelleen latauksen", + "new_app_version_requires_re_download_description": "Uusi päivitys vaatii sisällön lataamista uudelleen. Poista kaikki ladattu sisältö ja yritä uudelleen.", + "back": "Takaisin", + "delete": "Poista", + "something_went_wrong": "Jotain meni pieleen", + "could_not_get_stream_url_from_jellyfin": "Ei voitu saada suoratoiston URL:ia Jellyfinilta", + "eta": "Arvio {{eta}}", + "methods": "Menetelmät", + "toasts": { + "you_are_not_allowed_to_download_files": "Sinulla ei ole lupaa ladata tiedostoja.", + "deleted_all_movies_successfully": "Kaikki elokuvat poistettu onnistuneesti!", + "failed_to_delete_all_movies": "Kaikkien elokuvien poistaminen epäonnistui", + "deleted_all_tvseries_successfully": "Kaikki TV-sarjat poistettu onnistuneesti!", + "failed_to_delete_all_tvseries": "Kaikkien TV-sarjojen poistaminen epäonnistui", + "download_cancelled": "Lataus peruutettu", + "could_not_cancel_download": "Latausta ei voitu peruuttaa", + "download_completed": "Lataus valmis", + "download_started_for": "Lataus aloitettu kohteelle {{item}}", + "item_is_ready_to_be_downloaded": "{{item}} on valmis ladattavaksi", + "download_stated_for_item": "Lataus aloitettu kohteelle {{item}}", + "download_failed_for_item": "Lataus epäonnistui kohteelle {{item}} - {{error}}", + "download_completed_for_item": "Lataus valmis kohteelle {{item}}", + "queued_item_for_optimization": "Jonotettu {{item}} optimointia varten", + "failed_to_start_download_for_item": "Latauksen aloittaminen kohteelle {{item}} epäonnistui: {{message}}", + "server_responded_with_status_code": "Palvelin vastasi tilakoodilla {{statusCode}}", + "no_response_received_from_server": "Palvelimelta ei saatu vastausta", + "error_setting_up_the_request": "Virhe pyynnön asetuksessa", + "failed_to_start_download_for_item_unexpected_error": "Latauksen aloittaminen kohteelle {{item}} epäonnistui: Odottamaton virhe", + "all_files_folders_and_jobs_deleted_successfully": "Kaikki tiedostot, kansiot ja tehtävät poistettu onnistuneesti", + "an_error_occured_while_deleting_files_and_jobs": "Virhe tapahtui tiedostojen ja tehtävien poistamisen aikana", + "go_to_downloads": "Siirry latauksiin" + } + } + }, + "search": { + "search_here": "Hae täältä...", + "search": "Haku...", + "x_items": "{{count}} kohdetta", + "library": "Kirjasto", + "discover": "Löydä", + "no_results": "Ei tuloksia", + "no_results_found_for": "Ei tuloksia löydetty", + "movies": "Elokuvat", + "series": "Sarjat", + "episodes": "Jaksot", + "collections": "Kokoelmat", + "actors": "Näyttelijät", + "request_movies": "Pyydä elokuvia", + "request_series": "Pyydä sarjoja", + "recently_added": "Äskettäin lisätty", + "recent_requests": "Äskettäin pyydetyt", + "plex_watchlist": "Plexin seurantalista", + "trending": "Trendikkäät", + "popular_movies": "Suositut elokuvat", + "movie_genres": "Elokuvagenret", + "upcoming_movies": "Tulevat elokuvat", + "studios": "Studios", + "popular_tv": "Suositut TV-ohjelmat", + "tv_genres": "TV-genret", + "upcoming_tv": "Tulevat TV-ohjelmat", + "networks": "Verkot", + "tmdb_movie_keyword": "TMDB Elokuvan avainsana", + "tmdb_movie_genre": "TMDB Elokuvagenre", + "tmdb_tv_keyword": "TMDB TV:n avainsana", + "tmdb_tv_genre": "TMDB TV-genre", + "tmdb_search": "TMDB Haku", + "tmdb_studio": "TMDB Studio", + "tmdb_network": "TMDB Verkko", + "tmdb_movie_streaming_services": "TMDB Elokuvan suoratoistopalvelut", + "tmdb_tv_streaming_services": "TMDB TV:n suoratoistopalvelut" + }, + "library": { + "no_items_found": "Ei kohteita löytynyt", + "no_results": "Ei tuloksia", + "no_libraries_found": "Ei kirjastoja löytynyt", + "item_types": { + "movies": "elokuvat", + "series": "sarjat", + "boxsets": "bokset", + "items": "kohteet" + }, + "options": { + "display": "Näyttö", + "row": "Rivi", + "list": "Lista", + "image_style": "Kuvatyylit", + "poster": "Juliste", + "cover": "Kansi", + "show_titles": "Näytä otsikot", + "show_stats": "Näytä tilastot" + }, + "filters": { + "genres": "Genret", + "years": "Vuodet", + "sort_by": "Lajittele", + "sort_order": "Lajittelujärjestys", + "asc": "Nouseva", + "desc": "Laskeva", + "tags": "Tunnisteet" + }, + "favorites": { + "series": "Sarjat", + "movies": "Elokuvat", + "episodes": "Jaksot", + "videos": "Videot", + "boxsets": "Bokset", + "playlists": "Soittolistat", + "noDataTitle": "Ei suosikkeja vielä", + "noData": "Merkitse kohteita suosikeiksi, jotta ne näkyvät täällä nopeaa pääsyä varten." + }, + "custom_links": { + "no_links": "Ei linkkejä" + }, + "player": { + "error": "Virhe", + "failed_to_get_stream_url": "Suoratoisto-URL:n saaminen epäonnistui", + "an_error_occured_while_playing_the_video": "Virhe tapahtui videota toistettaessa. Tarkista lokit asetuksista.", + "client_error": "Asiakasvirhe", + "could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastille", + "message_from_server": "Viesti palvelimelta: {{message}}", + "video_has_finished_playing": "Video on lopettanut toistamisen!", + "no_video_source": "Ei videolähdettä...", + "next_episode": "Seuraava jakso", + "refresh_tracks": "Päivitä raidat", + "subtitle_tracks": "Tekstitysraidat:", + "audio_tracks": "Ääniraidat:", + "playback_state": "Toistotila:", + "no_data_available": "Ei tietoja saatavilla", + "index": "Indeksi:" + }, + "item_card": { + "next_up": "Seuraavaksi", + "no_items_to_display": "Ei näytettäviä kohteita", + "cast_and_crew": "Näyttelijät ja työryhmä", + "series": "Sarjat", + "seasons": "Kausi(t)", + "season": "Kausi", + "no_episodes_for_this_season": "Ei jaksoja tälle kaudelle", + "overview": "Yhteenveto", + "more_with": "Lisää {{name}}:n kanssa", + "similar_items": "Samanlaiset kohteet", + "no_similar_items_found": "Ei löytynyt samanlaisia kohteita", + "video": "Video", + "more_details": "Lisätietoja", + "quality": "Laatu", + "audio": "Ääni", + "subtitles": "Tekstitys", + "show_more": "Näytä lisää", + "show_less": "Näytä vähemmän", + "appeared_in": "Ilmestyi", + "could_not_load_item": "Kohteen lataaminen epäonnistui", + "none": "Ei mitään", + "download": { + "download_season": "Lataa kausi", + "download_series": "Lataa sarja", + "download_episode": "Lataa jakso", + "download_movie": "Lataa elokuva", + "download_x_item": "Lataa {{item_count}} kohdetta", + "download_button": "Lataa", + "using_optimized_server": "Käytetään optimoitua palvelinta", + "using_default_method": "Käytetään oletusmenetelmää" + } + } + }, + "live_tv": { + "next": "Seuraava", + "previous": "Edellinen", + "live_tv": "Live TV", + "coming_soon": "Tulossa pian", + "on_now": "Nykyään", + "shows": "Ohjelmat", + "movies": "Elokuvat", + "sports": "Urheilu", + "for_kids": "Lapsille", + "news": "Uutiset" + }, + "jellyseerr": { + "confirm": "Vahvista", + "cancel": "Peruuta", + "yes": "Kyllä", + "whats_wrong": "Mikä on vialla?", + "issue_type": "Ongelmatyyppi", + "select_an_issue": "Valitse ongelma", + "types": "Tyypit", + "describe_the_issue": "(valinnainen) Kuvaile ongelmaa...", + "submit_button": "Lähetä", + "report_issue_button": "Ilmoita ongelmasta", + "request_button": "Pyydä", + "are_you_sure_you_want_to_request_all_seasons": "Oletko varma, että haluat pyytää kaikki kaudet?", + "failed_to_login": "Kirjautuminen epäonnistui", + "cast": "Näyttelijät", + "details": "Yksityiskohdat", + "status": "Tila", + "original_title": "Alkuperäinen otsikko", + "series_type": "Sarjan tyyppi", + "release_dates": "Julkaisupäivät", + "first_air_date": "Ensimmäinen esitys", + "next_air_date": "Seuraava esitys", + "revenue": "Tulot", + "budget": "Budjetti", + "original_language": "Alkuperäinen kieli", + "production_country": "Tuotantomaa", + "studios": "Studio", + "network": "Verkko", + "currently_streaming_on": "Nykyään suoratoistona", + "advanced": "Lisäasetukset", + "request_as": "Pyydä muodossa", + "tags": "Tunnisteet", + "quality_profile": "Laatuprofiili", + "root_folder": "Juurikansio", + "season_all": "Kausi (kaikki)", + "season_number": "Kausi {{season_number}}", + "number_episodes": "{{episode_number}} jaksoa", + "born": "Syntynyt", + "appearances": "Ulkonäöt", + "toasts": { + "jellyseer_does_not_meet_requirements": "Jellyseerr-palvelin ei täytä vähimmäisversiovaatimuksia! Päivitä vähintään versioon 2.0.0", + "jellyseerr_test_failed": "Jellyseerr-testi epäonnistui. Yritä uudelleen.", + "failed_to_test_jellyseerr_server_url": "Jellyseerr-palvelimen URL-osoitteen testaaminen epäonnistui", + "issue_submitted": "Ongelma lähetetty!", + "requested_item": "Pyydetty {{item}}!", + "you_dont_have_permission_to_request": "Sinulla ei ole lupaa pyytää!", + "something_went_wrong_requesting_media": "Jotain meni pieleen mediaa pyydettäessä!" + } + }, + "tabs": { + "home": "Etusivu", + "search": "Haku", + "library": "Kirjasto", + "custom_links": "Mukautetut linkit", + "favorites": "Suosikit" + } +}