diff --git a/frontend/app/locales/fi.json b/frontend/app/locales/fi.json
new file mode 100644
index 00000000..eebf77bd
--- /dev/null
+++ b/frontend/app/locales/fi.json
@@ -0,0 +1,168 @@
+{
+ "anonymousLoginForm.length-limit": "Käyttäjätunnuksen on oltava vähintään 3 merkkiä pitkä",
+ "anonymousLoginForm.log-in": "Kirjaudu sisään",
+ "anonymousLoginForm.symbol-limit": "Käyttäjätunnuksen tulee alkaa kirjaimella ja sisältää vain latinalaisia kirjaimia, numeroita, alaviivoja ja välilyöntejä",
+ "anonymousLoginForm.user-name": "Käyttäjätunnus",
+ "authPanel.anonymous-provider": "Anonyymisti",
+ "authPanel.disable-comments": "Poista kommentit käytöstä",
+ "authPanel.disabled-cookies": "Poista kolmansien osapuolien evästeiden estäminen käytöstä kirjautuaksesi tai kommenttien avataksesi",
+ "authPanel.enable-comments": "Ota kommentit käyttöön",
+ "authPanel.enable-cookies": "Salli evästeet kirjautuaksesi sisään ja kommentoidaksesi",
+ "authPanel.hide-settings": "Piilota asetukset",
+ "authPanel.logged-as": "Olet kirjautunut sisään nimellä",
+ "authPanel.login": "Kirjaudu sisään:",
+ "authPanel.logout": "Kirjaudu ulos?",
+ "authPanel.or-provider": "tai",
+ "authPanel.other-provider": "Muu",
+ "authPanel.read-only": "Vain luku",
+ "authPanel.request-to-delete-data": "Pyydä tietojen poistamista",
+ "authPanel.show-settings": "Näytä asetukset",
+ "blockingDuration.day": "Päiväksi",
+ "blockingDuration.month": "Kuukaudeksi",
+ "blockingDuration.permanently": "Pysyvästi",
+ "blockingDuration.week": "Viikoksi",
+ "comment.block": "Estä",
+ "comment.block-user": "Haluatko estää käyttäjän {userName} {duration}?",
+ "comment.blocked-user": "Estetty",
+ "comment.blocking-period": "Eston pituus",
+ "comment.cancel": "Peruuta",
+ "comment.controversy": "Kiistely: {value}",
+ "comment.copied": "Kopioitu!",
+ "comment.copy": "Kopioi",
+ "comment.delete": "Poista",
+ "comment.delete-message": "Haluatko poistaa tämän kommentin?",
+ "comment.deleted-comment": "Tämä kommentti poistettiin",
+ "comment.deleted-user": "Poistettu",
+ "comment.edit": "Muokkaa",
+ "comment.expired-time": "Muokkausaika on päättynyt.",
+ "comment.go-to-parent": "Siirry juurikommenttiin",
+ "comment.hide": "Piilota",
+ "comment.hide-user-comment": "Haluatko piilottaa käyttäjän {userName} kommentit?",
+ "comment.pin": "Sitoo",
+ "comment.pin-comment": "Haluatko kiinnittää tämän kommentin?",
+ "comment.reply": "Vastaa",
+ "comment.time": "{day} klo {time}",
+ "comment.toggle-verification": "Toggle verification",
+ "comment.unblock": "Poista esto",
+ "comment.unblock-user": "Haluatko poistaa tämän käyttäjän eston?",
+ "comment.unpin": "Poista sidonta",
+ "comment.unpin-comment": "Do you want to unpin this comment?",
+ "comment.unverified-user": "Vahvistamaton käyttäjä",
+ "comment.unverify-user": "Do you want to unverify {userName}?",
+ "comment.verified-user": "Vahvistettu käyttäjä",
+ "comment.verify-user": "Haluatko vahvistaa käyttäjän {userName}?",
+ "comment.vote-error": "Äänestysvirhe: {voteErrorMessage}",
+ "commentForm.anonymous-uploading-disabled": "Kuvien lataus on poistettu käytöstä luvattomilta käyttäjiltä. Kirjaudu sisään ennen lähettämistä.",
+ "commentForm.exceeded-size": "{fileName} ylittää {maxImageSize}",
+ "commentForm.input-placeholder": "Kirjoita kommenttisi tähän",
+ "commentForm.new-comment": "Uusi kommentti",
+ "commentForm.notice-about-styling": "Markdown-syntaksia tuetaan",
+ "commentForm.preview": "Esikatselu",
+ "commentForm.reply": "Vastaa",
+ "commentForm.save": "Tallenna",
+ "commentForm.send": "Lähetä",
+ "commentForm.subscribe-by": "Tilaa kommentit",
+ "commentForm.subscribe-or": "tai",
+ "commentForm.unexpected-error": "Jotain meni pieleen. Yritä uudelleen myöhemmin.",
+ "commentForm.upload-file-fail": "{fileName} tiedoston lähetys epäonnistui: \"{errorMessage}\"",
+ "commentForm.uploading": "Ladataan...",
+ "commentForm.uploading-file": "ladataan {fileName}...",
+ "commentSort.sort-by": "Järjestä",
+ "commentsSort.best": "Paras",
+ "commentsSort.least-controversial": "Vähiten kiistelty",
+ "commentsSort.least-recently-updated": "Ei päivitetty pitkään aikaan",
+ "commentsSort.most-controversial": "Eniten kiistelty",
+ "commentsSort.newest": "Uusin",
+ "commentsSort.oldest": "Vanhin",
+ "commentsSort.recently-updated": "Äskettäin päivitetty",
+ "commentsSort.worst": "Huonoin",
+ "emailLoginForm.back": "Takaisin",
+ "emailLoginForm.confirm": "Vahvista",
+ "emailLoginForm.email-address": "Sähköposti",
+ "emailLoginForm.empty-token": "Tunnus-kenttä ei saa olla tyhjä",
+ "emailLoginForm.expired-token": "Tunnus on vanhentunut",
+ "emailLoginForm.invalid-email": "Anna kelvollinen sähköpostiosoite",
+ "emailLoginForm.loading": "Ladataan...",
+ "emailLoginForm.send-verification": "Lähetä vahvistus",
+ "emailLoginForm.token": "Tunnus",
+ "emailLoginForm.user-not-found": "Käyttäjää ei löytynyt",
+ "errors.0": "Jotain meni pieleen. Yritä uudelleen myöhemmin.",
+ "errors.1": "Kommenttia ei löydy. Päivitä sivu ja yritä uudelleen.",
+ "errors.10": "Aikaikkuna kommentin muokkaamiseen on ohitettu.",
+ "errors.11": "Tähän kommenttiin on jo vastaus, muokkaaminen ei ole mahdollista.",
+ "errors.12": "Äänestystulosta ei voi tallentaa. Yritä uudelleen myöhemmin.",
+ "errors.13": "Et voi äänestää oman kommenttisi puolesta.",
+ "errors.14": "Olet äänestänyt jo tämän kommentin puolesta.",
+ "errors.15": "Too many votes for the comment.",
+ "errors.16": "Min score reached for the comment.",
+ "errors.17": "Toiminta hylättiin. Yritä uudelleen myöhemmin.",
+ "errors.18": "Pyydettyä tiedostoa ei löydy.",
+ "errors.2": "Failed to unmarshal incoming request.",
+ "errors.3": "Sinulla ei ole lupaa tähän operaatioon.",
+ "errors.4": "Virheellinen kommentti.",
+ "errors.5": "Kommenttia ei löydy. Päivitä sivu ja yritä uudelleen.",
+ "errors.6": "Sivustoa ei löydy. Päivitä sivu ja yritä uudelleen.",
+ "errors.7": "Käyttäjä on estetty.",
+ "errors.8": "Käyttäjä on estetty.",
+ "errors.9": "Kommentin vaihtaminen epäonnistui. Yritä uudelleen myöhemmin.",
+ "errors.failed-fetch": "Nouto epäonnistui. Tarkista internet-yhteytesi tai yritä uudelleen myöhemmin.",
+ "errors.forbidden": "Kieletty.",
+ "errors.not-authorized": "Ei sallittu.",
+ "errors.to-many-request": "Liian monta pyyntöä.",
+ "errors.unexpected-error": "Jotain meni pieleen.",
+ "root.pinned-comments": "Kiinnitetyt kommentit",
+ "root.powered-by": "Powered by Remark42",
+ "root.show-more": "Näytä lisää",
+ "settings.block": "estä",
+ "settings.block-time": "{day} asti klo {time}",
+ "settings.block-user": "Haluatko estää käyttäjän {userName}?",
+ "settings.blocked-users-header": "Estetyt käyttäjät:",
+ "settings.blocked-users-title": "Estetyt käyttäjät",
+ "settings.hidden-user-header": "Piilotetut käyttäjät:",
+ "settings.hidden-users-title": "Piilotetut käyttäjät",
+ "settings.hide": "piilota",
+ "settings.no-blocked-users": "Estettyjä käyttäjiä ei ole.",
+ "settings.no-hidden-users": "Piilotettuja käyttäjiä ei ole.",
+ "settings.permanently": "pysyvästi",
+ "settings.show": "näytä",
+ "settings.unblock": "poista esto",
+ "settings.unblock-user": "Haluatko poistaa käyttäjän {userName} eston?",
+ "settings.unknown": "tuntematon",
+ "subscribeByEmail.back": "Takaisin",
+ "subscribeByEmail.close": "Sulje",
+ "subscribeByEmail.email": "Sähköposti",
+ "subscribeByEmail.expired-token": "Tunnus on vanhentunut",
+ "subscribeByEmail.have-been-subscribed": "You have been subscribed on updates by email",
+ "subscribeByEmail.have-been-unsubscribed": "You have been unsubscribed by email to updates",
+ "subscribeByEmail.only-registered-users": "Saatavilla vain rekisteröityneille käyttäjille",
+ "subscribeByEmail.submit": "Lähetä",
+ "subscribeByEmail.subscribe": "Tilaa",
+ "subscribeByEmail.subscribe-by-email": "Tilaa sähköpostitse",
+ "subscribeByEmail.subscribe-to-replies": "Tilaa vastaukset",
+ "subscribeByEmail.subscribed": "Olet tilannut päivitykset sähköpostitse",
+ "subscribeByEmail.token": "Tunnus",
+ "subscribeByEmail.unsubscribe": "Lopeta tilaus",
+ "subscribeByRSS.button-title": "Tilaa RSS",
+ "subscribeByRSS.replies": "Vastaukset",
+ "subscribeByRSS.site": "Sivusto",
+ "subscribeByRSS.thread": "Teema",
+ "subscribeByRSS.title": "RSS",
+ "toolbar.attach-image": "Liitä kuva, vedä ja pudota tai liitä leikepöydältä",
+ "toolbar.bold": "Lihavoitu ",
+ "toolbar.code": "Lähdekoodi",
+ "toolbar.header": "Otsikko",
+ "toolbar.italic": "Kursivoitu ",
+ "toolbar.link": "Linkki ",
+ "toolbar.ordered-list": "Järjestetty luettelo",
+ "toolbar.quote": "Lainaus",
+ "toolbar.unordered-list": "Järjestämätön luettelo",
+ "user-info.last-comments": "Uusimmat kommentit käyttäjältä {userName}",
+ "user-info.unexpected-error": "Jotain meni pieleen",
+ "vote.anonymous": "Anonyymit käyttäjät eivät voi äänestää",
+ "vote.deleted": "Poistettua kommenttia ei voi äänestää",
+ "vote.guest": "Kirjaudu sisään äänestääksesi",
+ "vote.only-positive": "Vain positiivinen arvostelu on sallittu",
+ "vote.only-post-page": "Äänestys on sallittu vain artikkelisivulla",
+ "vote.own-comment": "Et voi äänestää oman kommenttisi puolesta",
+ "vote.readonly": "Et voi äänestää vain luku -tilassa olevien kommenttien puolesta"
+}
diff --git a/frontend/app/utils/loadLocale.ts b/frontend/app/utils/loadLocale.ts
index 04bba8c1..6c0a6dd2 100644
--- a/frontend/app/utils/loadLocale.ts
+++ b/frontend/app/utils/loadLocale.ts
@@ -13,6 +13,11 @@ export async function loadLocale(locale: string): Promise
.then(res => res.default)
.catch(() => enMessages);
}
+ if (locale === 'fi') {
+ return import(/* webpackChunkName: "fi" */ '../locales/fi.json')
+ .then(res => res.default)
+ .catch(() => enMessages);
+ }
return enMessages;
}
diff --git a/frontend/tasks/supportedLocales.json b/frontend/tasks/supportedLocales.json
index ed6daed5..e6ef2bd8 100644
--- a/frontend/tasks/supportedLocales.json
+++ b/frontend/tasks/supportedLocales.json
@@ -1 +1 @@
-["en", "ru", "de"]
+["en", "ru", "de", "fi"]