diff --git a/src/localization/languages/fi.json b/src/localization/languages/fi.json
new file mode 100644
index 0000000..ede0efa
--- /dev/null
+++ b/src/localization/languages/fi.json
@@ -0,0 +1,120 @@
+{
+ "name": "englanti",
+ "substrings": {
+ "ContactLink": "lähetä ongelma githubissa"
+ },
+ "strings": {
+ "LinkInput": "liitä linkki tähän",
+ "AboutSummary": "{appName} on sosiaalisen median lataussivusto. nolla mainoksia, seurantalaitteita tai muuta pelottavaa paskaa. liitä vain jakolinkki ja olet valmis rokkaamaan!",
+ "EmbedBriefDescription": "tallenna sisältöä sosiaalisesta mediasta ilman häiriöitä",
+ "MadeWithLove": "tehty wukko kanssa <3",
+ "AccessibilityInputArea": "linkin syöttöalue",
+ "AccessibilityOpenAbout": "avaa \"tietoa\"-ponnahdusikkuna",
+ "AccessibilityDownloadButton": "latauspainike",
+ "AccessibilityOpenSettings": "avaa \"asetukset\" -ponnahdusikkuna",
+ "AccessibilityClosePopup": "sulje ponnahdusikkuna",
+ "AccessibilityOpenDonate": "avaa \"lahjoitus\"-ponnahdusikkuna",
+ "TitlePopupAbout": "mikä on {appName}?",
+ "TitlePopupSettings": "asetukset",
+ "TitlePopupError": "voi ei...",
+ "TitlePopupChangelog": "mikä on uutta?",
+ "TitlePopupDonate": "tuki {appName}",
+ "TitlePopupDownload": "lataa",
+ "ErrorSomethingWentWrong": "jotain meni pieleen enkä saanut sinulle mitään. voit yrittää uudelleen, mutta jos ongelma jatkuu, {ContactLink}.",
+ "ErrorUnsupported": "näyttää siltä, että tätä palvelua ei vielä tueta tai linkkisi on virheellinen.",
+ "ErrorBrokenLink": "{s} on tuettu, mutta linkissäsi on jotain vikaa. et ehkä kopioinut sitä kokonaan?",
+ "ErrorNoLink": "en voi arvata, mitä haluat ladata! anna minulle se linkki",
+ "ErrorPageRenderFail": "jotain meni pieleen ja sivua ei voitu renderöidä. jos se on toistuva tai kriittinen ongelma, {ContactLink}. olisi hyödyllistä, jos voisit antaa nykyiset vahvistushajautusvaiheet ({s}) ja virheen jälleenrakennusvaiheet. Kiitos jo etukäteen",
+ "ErrorRateLimit": "teet liian monta pyyntöä. yritä myöhemmin uudelleen!",
+ "ErrorCouldntFetch": "linkistäsi ei löytynyt tietoa. tarkista onko se oikein ja yritä uudelleen.",
+ "ErrorLengthLimit": "nykyinen pituusrajoitus on {s} minuuttia. video, jonka yritit ladata, on yli {s} minuuttia. valitse jotain muuta!",
+ "ErrorBadFetch": "tapahtui virhe, kun yritettiin hakea tietoja linkistäsi. oletko varma, että se toimii? tarkista toimiiko se ja yritä uudelleen.",
+ "ErrorCorruptedStream": "tämä lataus on valitettavasti vioittunut. yritä uudelleen tai kokeile toista muotoa ja resoluutiota.",
+ "ErrorNoInternet": "internetiä ei ole tai {appName}-sovellusliittymä on poissa käytöstä. tarkista yhteys ja yritä uudelleen.",
+ "ErrorCantConnectToServiceAPI": "ei voi muodostaa yhteyttä sovellukseen {s}. näyttää siltä, että {s} ei ole käytössä tai palvelimen {appName} IP-osoite on estetty. yritä myöhemmin uudelleen.",
+ "ErrorEmptyDownload": "En näe täältä mitään ladattavaa. kokeile toista linkkiä.",
+ "ErrorLiveVideo": "En voi katsoa tulevaisuuteen ja ladata live-videota tapahtumista. odota striimin loppumista ja yritä uudelleen!",
+ "SettingsAppearanceSubtitle": "ulkomuoto",
+ "SettingsThemeSubtitle": "teema",
+ "SettingsFormatSubtitle": "latausmuoto",
+ "SettingsQualitySubtitle": "laatu",
+ "SettingsThemeAuto": "Automaattinen",
+ "SettingsThemeLight": "valoa",
+ "SettingsThemeDark": "tumma",
+ "SettingsQualitySwitchMax": "maksimi",
+ "SettingsQualitySwitchHigh": "korkea",
+ "SettingsQualitySwitchMedium": "keskikokoinen",
+ "SettingsQualitySwitchLow": "matala",
+ "SettingsQualitySwitchLowest": "alhaisin",
+ "SettingsKeepDownloadButton": "pitää >> näköpiirissä",
+ "AccessibilityKeepDownloadButton": "pidä latauspainike aina näkyvissä",
+ "SettingsEnableDownloadPopup": "kysy keinoa säästää",
+ "AccessibilityEnableDownloadPopup": "kysy mitä tehdä latauksille",
+ "SettingsFormatDescription": "valitse webm saadaksesi parhaan mahdollisen laadun. webm-videot ovat yleensä korkeampia bittinopeutta, mutta ios-laitteet eivät voi toistaa niitä alkuperäisesti.",
+ "SettingsQualityDescription": "jos valittua laatua ei ole saatavilla, valitaan lähin.\njos haluat lähettää youtube-videon sosiaalisessa mediassa, valitse mp4- ja 720p-yhdistelmä.",
+ "LinkGitHubChanges": ">> katso aiemmat sitoumukset ja osallistu githubissa",
+ "NoScriptMessage": "{appName} käyttää JavaScriptiä API-pyyntöihin ja interaktiiviseen käyttöliittymään. sinun on sallittava JavaScript käyttää tätä sivustoa. Minulla ei ole mainoksia tai seurantalaitteita, pinky lupaus.",
+ "DownloadPopupDescriptionIOS": "pidä latauspainiketta painettuna, piilota videon esikatselu ja valitse sitten \"lataa linkitetty tiedosto\".",
+ "DownloadPopupDescription": "latauspainike avaa uuden välilehden, jossa on pyydetty tiedosto. voit poistaa tämän ponnahdusikkunan käytöstä asetuksista.",
+ "DownloadPopupWayToSave": "valitse tapa säästää",
+ "ClickToCopy": "paina kopioidaksesi",
+ "Download": "lataa",
+ "CopyURL": "kopioi url",
+ "AboutTab": "noin",
+ "ChangelogTab": "muutosloki",
+ "DonationsTab": "lahjoituksia",
+ "SettingsVideoTab": "video",
+ "SettingsAudioTab": "audio",
+ "SettingsOtherTab": "muu",
+ "ChangelogLastMajor": "nykyinen versio & sitoudu",
+ "AccessibilityModeToggle": "vaihda lataustilaa",
+ "DonateLinksDescription": "lahjoituslinkit avautuvat uuteen välilehteen. tämä on paras tapa lahjoittaa, jos haluat minun vastaanottavan lahjoituksesi suoraan.",
+ "SettingsAudioFormatBest": "parhaat",
+ "SettingsAudioFormatDescription": "kun paras muoto valitaan, saat äänen parhaalla mahdollisella laadulla, koska sitä ei ole koodattu uudelleen. kaikki muu koodataan uudelleen.",
+ "Keyphrase": "säästää mitä rakastat",
+ "SettingsRemoveWatermark": "poista vesileima käytöstä",
+ "ErrorPopupCloseButton": "sain sen",
+ "ErrorLengthAudioConvert": "äänen muuntamisen nykyinen pituusrajoitus on {s} minuuttia. Valitse \"paras\" muoto, jos haluat välttää rajoituksia.",
+ "SettingsAudioFullTikTok": "lataa täysi ääni",
+ "SettingsAudioFullTikTokDescription": "lataa alkuperäisen äänen tai videossa käytetyn äänen ilman videon tekijän tekemiä lisämuutoksia.",
+ "ErrorCantGetID": "en saanut kaikkia tietoja lyhennetystä linkistä. varmista, että se toimii tai kokeile täydellistä.",
+ "ErrorNoVideosInTweet": "en löytänyt videoita tai gifiä tästä twiitistä. kokeile toista!",
+ "ImagePickerTitle": "valitse ladattavat kuvat",
+ "ImagePickerDownloadAudio": "lataa ääni",
+ "ImagePickerExplanationPC": "tallenna kuva oikealla painikkeella.",
+ "ImagePickerExplanationPhone": "paina ja pidä kuvaa tallentaaksesi sen.",
+ "ErrorNoUrlReturned": "palvelin ei palauttanut latauslinkkiä. tämän ei pitäisi koskaan tapahtua. lataa sivu uudelleen ja yritä uudelleen, mutta jos se ei auta, {ContactLink}.",
+ "ErrorUnknownStatus": "sain vastauksen, jota en voi käsitellä. todennäköisimmin jokin tila on vialla. tämän ei pitäisi koskaan tapahtua. lataa sivu uudelleen ja yritä uudelleen, mutta jos se ei auta, {ContactLink}.",
+ "PasteFromClipboard": "liitä leikepöydältä",
+ "ChangelogOlder": "aiemmat versiot",
+ "ChangelogPressToExpand": "paina laajentaaksesi",
+ "Miscellaneous": "sekalaista",
+ "ModeToggleAuto": "automaattinen tila",
+ "ModeToggleAudio": "äänitila",
+ "SettingsDisableNotifications": "piilota ilmoituspisteet",
+ "MediaPickerTitle": "valita mitä säästää",
+ "MediaPickerExplanationPC": "napsauta tai napsauta hiiren kakkospainikkeella ladataksesi haluamasi.",
+ "MediaPickerExplanationPhone": "paina tai paina ja pidä painettuna ladataksesi haluamasi.",
+ "MediaPickerExplanationPhoneIOS": "paina ja pidä painettuna, piilota esikatselu ja valitse sitten \"lataa linkitetty tiedosto\" tallentaaksesi.",
+ "TwitterSpaceWasntRecorded": "tätä twitter-tilaa ei tallennettu, joten ei ole mitään ladattavaa. kokeile toista!",
+ "ErrorCantProcess": "en voinut käsitellä pyyntöäsi :(\nvoit yrittää uudelleen, mutta jos ongelma jatkuu, {ContactLink}.",
+ "ChangelogPressToHide": "paina tiivistääksesi",
+ "Donate": "lahjoittaa",
+ "DonateSub": "auta minua jatkamaan sitä",
+ "DonateExplanation": "{appName} ei näytä (eikä koskaan) näytä mainoksia tai myy tietojasi, joten sen käyttö on täysin ilmaista. mutta osoittaa, että tuhansien ihmisten käyttämän verkkopalvelun ylläpitäminen on jonkin verran kallista.\n\nJos olet joskus pitänyt {appName}-sovelluksesta hyödyllisenä ja haluat pitää sen verkossa tai haluat vain kiittää kehittäjää, harkitse osallistumista! jokainen sentti auttaa ja sitä arvostetaan ERITTÄIN.",
+ "DonateVia": "lahjoita kautta",
+ "DonateHireMe": "tai vaihtoehtoisesti voit palkata minut.",
+ "SettingsVideoMute": "mykistää äänen",
+ "SettingsVideoMuteExplanation": "poistaa äänen ladatusta videosta, jos mahdollista. ohitetaan, kun äänitila on päällä tai palvelu tukee vain ääntä.",
+ "SettingsVideoGeneral": "yleistä",
+ "ErrorSoundCloudNoClientId": "ei löytynyt asiakastunnusta, jota tarvitaan äänidatan hakemiseen soundcloudista. yritä uudelleen ja jos ongelma jatkuu, {ContactLink}.",
+ "CollapseServices": "tuetut palvelut",
+ "CollapseSupport": "tuki & lähdekoodi",
+ "CollapsePrivacy": "tietosuojakäytäntö",
+ "ServicesNote": "tämä luettelo ei ole lopullinen ja laajenee ajan myötä, muista tarkistaa se silloin tällöin!",
+ "FollowSupport": "seuraa {appName}a mastodonissa tai twitterissä saadaksesi tukea, kyselyitä, uutisia ja paljon muuta:",
+ "SupportNote": "huomaa, että kysymyksiin ja ongelmiin vastaaminen voi kestää hetken. kaikkea hallitsee vain yksi henkilö.",
+ "SourceCode": "ilmoita ongelmista, tutki lähdekoodia, merkitse tai haaroittele repo:",
+ "PrivacyPolicy": "sovelluksen {appName} tietosuojakäytäntö on yksinkertainen: sinusta ei kerätä tai tallenneta tietoja. nolla, zilch, nada, ei mitään.\nlataamasi asia on sinun, ei minun.\n\njotkut ei-takaisinjäljitettävät tiedot tallennetaan väliaikaisesti, kun pyydetty lataus vaatii live-renderöinnin. se on välttämätöntä, jotta tämä ominaisuus toimii.\n\nsiinä tapauksessa ip-osoitteesi suolattu sha256-hajautus ja tiedot pyydetystä streamista tallennetaan tilapäisesti palvelimen RAM-muistiin 2 minuutiksi. 2 minuutin kuluttua kaikki aiemmin tallennetut tiedot poistetaan pysyvästi. IP-osoitteesi tiivistettä käytetään streamin käytön rajoittamiseen vain sinulle.\nkenelläkään (edes minulla) ei ole pääsyä näihin tietoihin, koska virallinen kobolttikoodikanta ei alun perin tarjoa tapaa lukea niitä käsittelytoimintojen ulkopuolella.\n\nvoit itse tarkistaa sovelluksen {appName} github-repon ja nähdä, että mitään ei todellakaan ole tallennettu pysyvästi."
+ }
+}