diff --git a/client/src/locales/fi-FI/core.js b/client/src/locales/fi-FI/core.js
new file mode 100644
index 00000000..3ae002a4
--- /dev/null
+++ b/client/src/locales/fi-FI/core.js
@@ -0,0 +1,437 @@
+import dateFns from 'date-fns/locale/fi';
+import timeAgo from 'javascript-time-ago/locale/fi';
+
+import markdownEditor from './markdown-editor.json';
+
+export default {
+ dateFns,
+ timeAgo,
+ markdownEditor,
+
+ format: {
+ date: 'd.M.yyyy',
+ time: 'H.mm',
+ dateTime: '$t(format:date) $t(format:time)',
+ longDate: 'd. MMM',
+ longDateTime: "d. MMMM 'klo' H.mm",
+ fullDate: 'd. MMM y',
+ fullDateTime: "d. MMMM y 'klo' H.mm",
+ },
+
+ translation: {
+ common: {
+ aboutPlanka: 'Tietoa PLANKAsta',
+ account: 'Tili',
+ actions: 'Toiminnot',
+ activateUser_title: 'Aktivoi käyttäjä',
+ active: 'Aktiivinen',
+ addAttachment_title: 'Lisää liite',
+ addCustomField_title: 'Lisää mukautettu kenttä',
+ addCustomFieldGroup_title: 'Lisää mukautettujen kenttien ryhmä',
+ addManager_title: 'Lisää ylläpitäjä',
+ addMember_title: 'Lisää jäsen',
+ addTaskList_title: 'Lisää tehtävälista',
+ addUser_title: 'Lisää käyttäjä',
+ admin: 'Ylläpitäjä',
+ administration: 'Hallinta',
+ all: 'Kaikki',
+ allChangesWillBeAutomaticallySavedAfterConnectionRestored:
+ 'Kaikki muutokset tallennetaan automaattisesti
yhteyden palautuessa.',
+ alphabetically: 'Aakkosjärjestyksessä',
+ alwaysDisplayCardCreator: 'Näytä aina kortin luoja',
+ archive: 'Arkistoi',
+ archiveCard_title: 'Arkistoi kortti',
+ archiveCards_title: 'Arkistoi kortit',
+ areYouSureYouWantToActivateThisUser: 'Haluatko varmasti aktivoida tämän käyttäjän?',
+ areYouSureYouWantToArchiveCards: 'Haluatko varmasti arkistoida kortit?',
+ areYouSureYouWantToArchiveThisCard: 'Haluatko varmasti arkistoida tämän kortin?',
+ areYouSureYouWantToAssignThisProjectManagerAsOwner:
+ 'Haluatko varmasti asettaa tämän projektipäällikön omistajaksi?',
+ areYouSureYouWantToDeactivateThisUser: 'Haluatko varmasti poistaa tämän käyttäjän käytöstä?',
+ areYouSureYouWantToDeleteThisAttachment: 'Haluatko varmasti poistaa tämän liitteen?',
+ areYouSureYouWantToDeleteThisBackgroundImage: 'Haluatko varmasti poistaa tämän taustakuvan?',
+ areYouSureYouWantToDeleteThisBoard: 'Haluatko varmasti poistaa tämän taulun?',
+ areYouSureYouWantToDeleteThisCard: 'Haluatko varmasti poistaa tämän kortin?',
+ areYouSureYouWantToDeleteThisCardForever: 'Haluatko varmasti poistaa tämän kortin pysyvästi?',
+ areYouSureYouWantToDeleteThisComment: 'Haluatko varmasti poistaa tämän kommentin?',
+ areYouSureYouWantToDeleteThisCustomField:
+ 'Haluatko varmasti poistaa tämän mukautetun kentän?',
+ areYouSureYouWantToDeleteThisCustomFieldGroup:
+ 'Haluatko varmasti poistaa tämän mukautettujen kenttien ryhmän?',
+ areYouSureYouWantToDeleteThisLabel: 'Haluatko varmasti poistaa tämän tunnisteen?',
+ areYouSureYouWantToDeleteThisList:
+ 'Haluatko varmasti poistaa tämän listan? Kaikki kortit siirretään roskakoriin.',
+ areYouSureYouWantToDeleteThisNotificationService:
+ 'Haluatko varmasti poistaa tämän ilmoituspalvelun?',
+ areYouSureYouWantToDeleteThisProject: 'Haluatko varmasti poistaa tämän projektin?',
+ areYouSureYouWantToDeleteThisTask: 'Haluatko varmasti poistaa tämän tehtävän?',
+ areYouSureYouWantToDeleteThisTaskList: 'Haluatko varmasti poistaa tämän tehtävälistan?',
+ areYouSureYouWantToDeleteThisUser: 'Haluatko varmasti poistaa tämän käyttäjän?',
+ areYouSureYouWantToEmptyTrash: 'Haluatko varmasti tyhjentää roskakorin?',
+ areYouSureYouWantToLeaveBoard: 'Haluatko varmasti poistua taululta?',
+ areYouSureYouWantToLeaveProject: 'Haluatko varmasti poistua projektista?',
+ areYouSureYouWantToMakeThisProjectShared: 'Haluatko varmasti jakaa tämän projektin?',
+ areYouSureYouWantToRemoveThisManagerFromProject:
+ 'Haluatko varmasti poistaa tämän ylläpitäjän projektista?',
+ areYouSureYouWantToRemoveThisMemberFromBoard:
+ 'Haluatko varmasti poistaa tämän jäsenen taululta?',
+ assignAsOwner_title: 'Aseta omistajaksi',
+ atLeastOneListMustBePresent: 'Vähintään yksi lista vaaditaan',
+ attachment: 'Liite',
+ attachments: 'Liitteet',
+ authentication: 'Tunnistautuminen',
+ background: 'Tausta',
+ baseCustomFields_title: 'Perusmukautetut kentät',
+ baseGroup: 'Perusryhmä',
+ board: 'Taulu',
+ boardActions_title: 'Taulun toiminnot',
+ boardNotFound_title: 'Taulua ei löytynyt',
+ boardSubscribed: 'Taulu tilattu',
+ boardUser: 'Taulun käyttäjä',
+ byCreationTime: 'Luontiajan mukaan',
+ byDefault: 'Oletuksena',
+ byDueDate: 'Määräajan mukaan',
+ canBeInvitedToWorkInBoards: 'Voidaan kutsua työskentelemään tauluihin.',
+ canComment: 'Voi kommentoida',
+ canCreateOwnProjectsAndBeInvitedToWorkInOthers:
+ 'Voi luoda omia projekteja ja tulla kutsutuksi muihin.',
+ canEditBoardLayoutAndAssignMembersToCards:
+ 'Voi muokata taulun asettelua ja lisätä jäseniä kortteihin.',
+ canManageSystemWideSettingsAndActAsProjectOwner:
+ 'Voi hallita järjestelmän asetuksia ja toimia projektin omistajana.',
+ canOnlyViewBoard: 'Voi vain tarkastella taulua.',
+ cardActions_title: 'Kortin toiminnot',
+ cardNotFound_title: 'Korttia ei löytynyt',
+ cardsOnThisListAreAvailableToAllBoardMembers:
+ 'Tämän listan kortit ovat kaikkien taulun jäsenten saatavilla.',
+ cardsOnThisListAreCompleteAndReadyToBeArchived:
+ 'Tämän listan kortit ovat valmiita ja voidaan arkistoida.',
+ cardsOnThisListAreReadyToBeWorkedOn: 'Tämän listan kortit ovat valmiita työstettäväksi.',
+ clickHereOrRefreshPageToUpdate: '<0>Päivitä tästä0> tai lataa sivu uudelleen.',
+ closed: 'Suljettu',
+ color: 'Väri',
+ comments: 'Kommentit',
+ contentExceedsLimit: 'Sisältö ylittää rajan {{limit}}',
+ contentOfThisAttachmentIsTooBigToDisplay: 'Liitteen sisältö on liian suuri näytettäväksi.',
+ copy_inline: 'kopioi',
+ createBoard_title: 'Luo taulu',
+ createCustomFieldGroup_title: 'Luo mukautettujen kenttien ryhmä',
+ createLabel_title: 'Luo tunniste',
+ createNewOneOrSelectExistingOne: 'Luo uusi tai valitse
olemassa oleva.',
+ createProject_title: 'Luo projekti',
+ createTextFile_title: 'Luo tekstitiedosto',
+ creator: 'Luoja',
+ currentPassword: 'Nykyinen salasana',
+ customField_title: 'Mukautettu kenttä',
+ customFields_title: 'Mukautetut kentät',
+ customFieldGroup_title: 'Mukautettujen kenttien ryhmä',
+ customFieldGroups_title: 'Mukautettujen kenttien ryhmät',
+ dangerZone_title: 'Vaaravyöhyke',
+ date: 'Päivämäärä',
+ deactivateUser_title: 'Poista käyttäjä käytöstä',
+ defaultCardType_title: 'Oletuskorttityyppi',
+ defaultView_title: 'Oletusnäkymä',
+ deletedUser_title: 'Poistettu käyttäjä',
+ deleteAllBoardsToBeAbleToDeleteThisProject:
+ 'Poista kaikki taulut, jotta voit poistaa tämän projektin',
+ deleteAttachment_title: 'Poista liite',
+ deleteBackgroundImage_title: 'Poista taustakuva',
+ deleteBoard_title: 'Poista taulu',
+ deleteCard_title: 'Poista kortti',
+ deleteCardForever_title: 'Poista kortti pysyvästi',
+ deleteComment_title: 'Poista kommentti',
+ deleteCustomField_title: 'Poista mukautettu kenttä',
+ deleteCustomFieldGroup_title: 'Poista mukautettujen kenttien ryhmä',
+ deleteLabel_title: 'Poista tunniste',
+ deleteList_title: 'Poista lista',
+ deleteNotificationService_title: 'Poista ilmoituspalvelu',
+ deleteProject_title: 'Poista projekti',
+ deleteTask_title: 'Poista tehtävä',
+ deleteTaskList_title: 'Poista tehtävälista',
+ deleteUser_title: 'Poista käyttäjä',
+ description: 'Kuvaus',
+ detectAutomatically: 'Tunnista automaattisesti',
+ display: 'Näyttö',
+ dropFileToUpload: 'Pudota tiedosto ladattavaksi',
+ dueDate_title: 'Määräpäivä',
+ dynamicAndUnevenlySpacedLayout: 'Dynaaminen ja epätasaisesti jaettu asettelu.',
+ editor: 'Muokkain',
+ editors: 'Muokkaajat',
+ editAttachment_title: 'Muokkaa liitettä',
+ editAvatar_title: 'Muokkaa avatar',
+ editColor_title: 'Muokkaa väriä',
+ editCustomField_title: 'Muokkaa mukautettua kenttää',
+ editCustomFieldGroup_title: 'Muokkaa mukautettujen kenttien ryhmää',
+ editDueDate_title: 'Muokkaa määräpäivää',
+ editEmail_title: 'Muokkaa sähköpostia',
+ editInformation_title: 'Muokkaa tietoja',
+ editLabel_title: 'Muokkaa tunnistetta',
+ editPassword_title: 'Muokkaa salasanaa',
+ editPermissions_title: 'Muokkaa oikeuksia',
+ editRole_title: 'Muokkaa roolia',
+ editStopwatch_title: 'Muokkaa ajastinta',
+ editType_title: 'Muokkaa tyyppiä',
+ editUsername_title: 'Muokkaa käyttäjänimeä',
+ email: 'Sähköposti',
+ emptyTrash_title: 'Tyhjennä roskakori',
+ enterCardTitle: 'Syötä kortin otsikko...',
+ enterDescription: 'Syötä kuvaus...',
+ enterFilename: 'Syötä tiedostonimi',
+ enterListTitle: 'Syötä listan otsikko...',
+ enterTaskDescription: 'Syötä tehtävän kuvaus...',
+ filterByLabels_title: 'Suodata tunnisteiden mukaan',
+ filterByMembers_title: 'Suodata jäsenten mukaan',
+ forTeamBasedProjects: 'Tiimipohjaisiin projekteihin.',
+ forPersonalProjects: 'Henkilökohtaisiin projekteihin.',
+ fromComputer_title: 'Tietokoneelta',
+ fromTrello: 'Trellosta',
+ general: 'Yleinen',
+ gradients: 'Liukuvärit',
+ grid: 'Ruudukko',
+ hideFromProjectListAndFavorites: 'Piilota projektilistasta ja suosikeista',
+ hours: 'Tunnit',
+ importBoard_title: 'Tuo taulu',
+ invalidCurrentPassword: 'Virheellinen nykyinen salasana',
+ kanban: 'Kanban',
+ labels: 'Tunnisteet',
+ language: 'Kieli',
+ leaveBoard_title: 'Poistu taululta',
+ leaveProject_title: 'Poistu projektista',
+ limitCardTypesToDefaultOne: 'Rajoita korttityypit oletukseen',
+ list: 'Lista',
+ lists: 'Listat',
+ listActions_title: 'Listan toiminnot',
+ makeProjectShared_title: 'Jaa projekti',
+ managers: 'Ylläpitäjät',
+ members: 'Jäsenet',
+ memberActions_title: 'Jäsenen toiminnot',
+ minutes: 'Minuutit',
+ moveCard_title: 'Siirrä kortti',
+ myOwn_title: 'Omat',
+ name: 'Nimi',
+ newestFirst: 'Uusimmat ensin',
+ newEmail: 'Uusi sähköposti',
+ newPassword: 'Uusi salasana',
+ newUsername: 'Uusi käyttäjänimi',
+ newVersionAvailable: 'Uusi versio saatavilla',
+ noConnectionToServer: 'Ei yhteyttä palvelimeen',
+ noBoards: 'Ei tauluja',
+ noLists: 'Ei listoja',
+ noProjects: 'Ei projekteja',
+ notifications: 'Ilmoitukset',
+ noUnreadNotifications: 'Ei lukemattomia ilmoituksia.',
+ oldestFirst: 'Vanhimmat ensin',
+ openBoard_title: 'Avaa taulu',
+ optional_inline: 'valinnainen',
+ organization: 'Organisaatio',
+ others: 'Muut',
+ phone: 'Puhelin',
+ plankaUsesAppriseToSendNotificationsToOver100PopularServices:
+ 'PLANKA käyttää <1><0>Apprise0>1> lähettääkseen ilmoituksia yli 100 suosittuun palveluun.',
+ preferences: 'Asetukset',
+ pressPasteShortcutToAddAttachmentFromClipboard:
+ 'Vinkki: paina Ctrl-V (tai Cmd-V Macilla) lisätäksesi liitteen leikepöydältä.',
+ private: 'Yksityinen',
+ project: 'Projekti',
+ projectNotFound_title: 'Projektia ei löytynyt',
+ projectOwner: 'Projektin omistaja',
+ referenceDataAndKnowledgeStorage: 'Viitetiedot ja tietovarasto.',
+ removeManager_title: 'Poista ylläpitäjä',
+ removeMember_title: 'Poista jäsen',
+ role: 'Rooli',
+ searchCards: 'Etsi kortteja...',
+ searchCustomFields: 'Etsi mukautettuja kenttiä...',
+ searchCustomFieldGroups: 'Etsi mukautettujen kenttien ryhmiä...',
+ searchLabels: 'Etsi tunnisteita...',
+ searchLists: 'Etsi listoja...',
+ searchMembers: 'Etsi jäseniä...',
+ searchProjects: 'Etsi projekteja...',
+ searchUsers: 'Etsi käyttäjiä...',
+ seconds: 'Sekunnit',
+ selectAssignee_title: 'Valitse vastuuhenkilö',
+ selectBoard: 'Valitse taulu',
+ selectList: 'Valitse lista',
+ selectListToRestoreThisCard: 'Valitse lista palauttaaksesi tämän kortin',
+ selectOrder_title: 'Valitse järjestys',
+ selectPermissions_title: 'Valitse oikeudet',
+ selectProject: 'Valitse projekti',
+ selectRole_title: 'Valitse rooli',
+ selectType_title: 'Valitse tyyppi',
+ sequentialDisplayOfCards: 'Korttien peräkkäinen näyttö.',
+ settings: 'Asetukset',
+ shared: 'Jaettu',
+ sharedWithMe_title: 'Jaettu kanssani',
+ showOnFrontOfCard: 'Näytä kortin etupuolella',
+ sortList_title: 'Lajittele lista',
+ stopwatch: 'Ajastin',
+ story: 'Tarina',
+ subscribeToCardWhenCommenting: 'Tilaa kortti kommentoidessa',
+ subscribeToMyOwnCardsByDefault: 'Tilaa omat kortit oletuksena',
+ taskActions_title: 'Tehtävän toiminnot',
+ taskAssignmentAndProjectCompletion: 'Tehtävien jako ja projektin valmistuminen.',
+ taskList_title: 'Tehtävälista',
+ taskListActions_title: 'Tehtävälistan toiminnot',
+ team: 'Tiimi',
+ thereIsNoPreviewAvailableForThisAttachment: 'Tälle liitteelle ei ole esikatselua saatavilla.',
+ time: 'Aika',
+ title: 'Otsikko',
+ trash: 'Roskakori',
+ trashHasBeenSuccessfullyEmptied: 'Roskakori tyhjennetty onnistuneesti.',
+ turnOffRecentCardHighlighting: 'Poista uusien korttien korostus',
+ typeNameToConfirm: 'Kirjoita nimi vahvistaaksesi.',
+ typeTitleToConfirm: 'Kirjoita otsikko vahvistaaksesi.',
+ unsavedChanges: 'Tallentamattomat muutokset',
+ uploadedImages: 'Ladatut kuvat',
+ userActions_title: 'Käyttäjän toiminnot',
+ userAddedCardToList: '<0>{{user}}0> lisäsi <2>{{card}}2> listaan {{list}}',
+ userAddedThisCardToList: '<0>{{user}}0> lisäsi tämän kortin listaan {{list}}',
+ userAddedUserToCard:
+ '<0>{{actorUser}}0> lisäsi käyttäjän {{addedUser}} korttiin <4>{{card}}4>',
+ userAddedUserToThisCard: '<0>{{actorUser}}0> lisäsi käyttäjän {{addedUser}} tähän korttiin',
+ userAddedYouToCard: '<0>{{user}}0> lisäsi sinut korttiin <2>{{card}}2>',
+ userCompletedTaskOnCard:
+ '<0>{{user}}0> suoritti tehtävän {{task}} kortissa <4>{{card}}4>',
+ userCompletedTaskOnThisCard: '<0>{{user}}0> suoritti tehtävän {{task}} tässä kortissa',
+ userJoinedCard: `<0>{{user}}0> liittyi korttiin <2>{{card}}2>`,
+ userJoinedThisCard: `<0>{{user}}0> liittyi tähän korttiin`,
+ userLeftNewCommentToCard:
+ '<0>{{user}}0> jätti uuden kommentin «{{comment}}» korttiin <2>{{card}}2>',
+ userLeftCard: '<0>{{user}}0> poistui kortista <2>{{card}}2>',
+ userLeftThisCard: '<0>{{user}}0> poistui tästä kortista',
+ userMarkedTaskIncompleteOnCard:
+ '<0>{{user}}0> merkitsi tehtävän {{task}} keskeneräiseksi kortissa <4>{{card}}4>',
+ userMarkedTaskIncompleteOnThisCard:
+ '<0>{{user}}0> merkitsi tehtävän {{task}} keskeneräiseksi tässä kortissa',
+ userMentionedYouInCommentOnCard:
+ '<0>{{user}}0> mainitsi sinut kommentissa «{{comment}}» kortissa <2>{{card}}2>',
+ userMovedCardFromListToList:
+ '<0>{{user}}0> siirsi <2>{{card}}2> listasta {{fromList}} listaan {{toList}}',
+ userMovedThisCardFromListToList:
+ '<0>{{user}}0> siirsi tämän kortin listasta {{fromList}} listaan {{toList}}',
+ userRemovedUserFromCard:
+ '<0>{{actorUser}}0> poisti käyttäjän {{removedUser}} kortista <4>{{card}}4>',
+ userRemovedUserFromThisCard:
+ '<0>{{actorUser}}0> poisti käyttäjän {{removedUser}} tästä kortista',
+ username: 'Käyttäjänimi',
+ users: 'Käyttäjät',
+ viewer: 'Katselija',
+ viewers: 'Katselijat',
+ visualTaskManagementWithLists: 'Visuaalinen tehtävien hallinta listoilla.',
+ withoutBaseGroup: 'Ilman perusryhmää',
+ writeComment: 'Kirjoita kommentti...',
+ },
+
+ action: {
+ activateUser: 'Aktivoi käyttäjä',
+ activateUser_title: 'Aktivoi käyttäjä',
+ addAnotherCard: 'Lisää toinen kortti',
+ addAnotherList: 'Lisää toinen lista',
+ addAnotherTask: 'Lisää toinen tehtävä',
+ addCard: 'Lisää kortti',
+ addCard_title: 'Lisää kortti',
+ addComment: 'Lisää kommentti',
+ addCustomField: 'Lisää mukautettu kenttä',
+ addCustomFieldGroup: 'Lisää mukautettujen kenttien ryhmä',
+ addList: 'Lisää lista',
+ addMember: 'Lisää jäsen',
+ addMoreDetailedDescription: 'Lisää tarkempi kuvaus',
+ addTask: 'Lisää tehtävä',
+ addTaskList: 'Lisää tehtävälista',
+ addToCard: 'Lisää korttiin',
+ addUser: 'Lisää käyttäjä',
+ archive: 'Arkistoi',
+ archiveCard: 'Arkistoi kortti',
+ archiveCard_title: 'Arkistoi kortti',
+ archiveCards: 'Arkistoi kortit',
+ archiveCards_title: 'Arkistoi kortit',
+ assignAsOwner: 'Aseta omistajaksi',
+ cancel: 'Peruuta',
+ createBoard: 'Luo taulu',
+ createCustomFieldGroup: 'Luo mukautettujen kenttien ryhmä',
+ createFile: 'Luo tiedosto',
+ createLabel: 'Luo tunniste',
+ createNewLabel: 'Luo uusi tunniste',
+ createProject: 'Luo projekti',
+ deactivateUser: 'Poista käyttäjä käytöstä',
+ deactivateUser_title: 'Poista käyttäjä käytöstä',
+ delete: 'Poista',
+ deleteAttachment: 'Poista liite',
+ deleteAvatar: 'Poista avatar',
+ deleteBackgroundImage: 'Poista taustakuva',
+ deleteBoard: 'Poista taulu',
+ deleteBoard_title: 'Poista taulu',
+ deleteCard: 'Poista kortti',
+ deleteCard_title: 'Poista kortti',
+ deleteCardForever: 'Poista kortti pysyvästi',
+ deleteComment: 'Poista kommentti',
+ deleteCustomField: 'Poista mukautettu kenttä',
+ deleteCustomFieldGroup: 'Poista mukautettujen kenttien ryhmä',
+ deleteForever_title: 'Poista pysyvästi',
+ deleteGroup: 'Poista ryhmä',
+ deleteLabel: 'Poista tunniste',
+ deleteList: 'Poista lista',
+ deleteList_title: 'Poista lista',
+ deleteNotificationService: 'Poista ilmoituspalvelu',
+ deleteProject: 'Poista projekti',
+ deleteProject_title: 'Poista projekti',
+ deleteTask: 'Poista tehtävä',
+ deleteTask_title: 'Poista tehtävä',
+ deleteTaskList: 'Poista tehtävälista',
+ deleteUser: 'Poista käyttäjä',
+ deleteUser_title: 'Poista käyttäjä',
+ dismissAll: 'Sulje kaikki',
+ duplicate: 'Monista',
+ duplicateCard_title: 'Monista kortti',
+ edit: 'Muokkaa',
+ editColor_title: 'Muokkaa väriä',
+ editDueDate_title: 'Muokkaa määräpäivää',
+ editDescription_title: 'Muokkaa kuvausta',
+ editEmail_title: 'Muokkaa sähköpostia',
+ editGroup: 'Muokkaa ryhmää',
+ editInformation_title: 'Muokkaa tietoja',
+ editPassword_title: 'Muokkaa salasanaa',
+ editPermissions: 'Muokkaa oikeuksia',
+ editRole_title: 'Muokkaa roolia',
+ editStopwatch_title: 'Muokkaa ajastinta',
+ editTitle_title: 'Muokkaa otsikkoa',
+ editType_title: 'Muokkaa tyyppiä',
+ editUsername_title: 'Muokkaa käyttäjänimeä',
+ emptyTrash: 'Tyhjennä roskakori',
+ emptyTrash_title: 'Tyhjennä roskakori',
+ import: 'Tuo',
+ join: 'Liity',
+ leave: 'Poistu',
+ leaveBoard: 'Poistu taululta',
+ leaveProject: 'Poistu projektista',
+ logOut_title: 'Kirjaudu ulos',
+ makeCover_title: 'Aseta kansikuvaksi',
+ makeProjectShared: 'Jaa projekti',
+ makeProjectShared_title: 'Jaa projekti',
+ move: 'Siirrä',
+ moveCard_title: 'Siirrä kortti',
+ remove: 'Poista',
+ removeAssignee: 'Poista vastuuhenkilö',
+ removeColor: 'Poista väri',
+ removeCover_title: 'Poista kansikuva',
+ removeFromBoard: 'Poista taululta',
+ removeFromProject: 'Poista projektista',
+ removeManager: 'Poista ylläpitäjä',
+ removeMember: 'Poista jäsen',
+ restoreToList: 'Palauta listaan {{list}}',
+ returnToBoard: 'Palaa tauluun',
+ save: 'Tallenna',
+ showActive: 'Näytä aktiiviset',
+ showAllAttachments: 'Näytä kaikki liitteet ({{hidden}} piilotettu)',
+ showCardsWithThisUser: 'Näytä kortit, joissa tämä käyttäjä',
+ showDeactivated: 'Näytä poistetut käytöstä',
+ showFewerAttachments: 'Näytä vähemmän liitteitä',
+ sortList_title: 'Lajittele lista',
+ start: 'Aloita',
+ stop: 'Lopeta',
+ subscribe: 'Tilaa',
+ unsubscribe: 'Peru tilaus',
+ uploadNewAvatar: 'Lataa uusi avatar',
+ uploadNewImage: 'Lataa uusi kuva',
+ },
+ },
+};
diff --git a/client/src/locales/fi-FI/index.js b/client/src/locales/fi-FI/index.js
new file mode 100644
index 00000000..b30addcf
--- /dev/null
+++ b/client/src/locales/fi-FI/index.js
@@ -0,0 +1,8 @@
+import login from './login';
+
+export default {
+ language: 'fi-FI',
+ country: 'fi',
+ name: 'Suomi',
+ embeddedLocale: login,
+};
diff --git a/client/src/locales/fi-FI/login.js b/client/src/locales/fi-FI/login.js
new file mode 100644
index 00000000..c17a22e1
--- /dev/null
+++ b/client/src/locales/fi-FI/login.js
@@ -0,0 +1,27 @@
+export default {
+ translation: {
+ common: {
+ activeUsersLimitReached: 'Aktiivisten käyttäjien raja saavutettu',
+ emailAlreadyInUse: 'Sähköposti on jo käytössä',
+ emailOrUsername: 'Sähköposti tai käyttäjänimi',
+ invalidCredentials: 'Virheelliset tunnistetiedot',
+ invalidEmailOrUsername: 'Virheellinen sähköposti tai käyttäjänimi',
+ invalidPassword: 'Virheellinen salasana',
+ logIn_title: 'Kirjaudu sisään',
+ noInternetConnection: 'Ei internet-yhteyttä',
+ or: 'Tai',
+ pageNotFound_title: 'Sivua ei löytynyt',
+ password: 'Salasana',
+ poweredByPlanka: 'Käyttää <1>PLANKAa1>',
+ serverConnectionFailed: 'Yhteys palvelimeen epäonnistui',
+ unknownError: 'Tuntematon virhe, yritä myöhemmin uudelleen',
+ usernameAlreadyInUse: 'Käyttäjänimi on jo käytössä',
+ useSingleSignOn: 'Käytä kertakirjautumista',
+ },
+
+ action: {
+ logIn: 'Kirjaudu sisään',
+ logInWithSso: 'Kirjaudu SSO:lla',
+ },
+ },
+};
diff --git a/client/src/locales/fi-FI/markdown-editor.json b/client/src/locales/fi-FI/markdown-editor.json
new file mode 100644
index 00000000..a534af99
--- /dev/null
+++ b/client/src/locales/fi-FI/markdown-editor.json
@@ -0,0 +1,165 @@
+{
+ "action-previews": {
+ "text": "Tämä on teksti ilman otsikkoa.\nSekä otsikko että teksti\nvoidaan korostaa lihavoidulla, kursiivilla, värillä,\nyliviivauksella ja alleviivauksella.",
+ "text-with-head": "Tämä on teksti otsikolla.\nSekä otsikko että teksti\nvoidaan korostaa lihavoidulla, kursiivilla, värillä,\nyliviivauksella ja alleviivauksella.",
+ "heading": "Otsikko"
+ },
+ "bundle": {
+ "error-title": "Virhe markdown-editorissa",
+ "settings_wysiwyg": "Visuaalinen editori (wysiwyg)",
+ "settings_markup": "Markdown-merkintä",
+ "markup_placeholder": "Syötä markdown-merkintä..."
+ },
+ "codeblock": {
+ "remove": "Poista",
+ "empty_option": "Ei tuloksia löytynyt"
+ },
+ "common": {
+ "delete": "Poista",
+ "edit": "Muokkaa",
+ "toolbar_action_disabled": "Yhteensopimaton merkintäelementti"
+ },
+ "forms": {
+ "common_action_cancel": "Peruuta",
+ "common_action_submit": "Lähetä",
+ "common_action_upload": "Valitse",
+ "common_tab_attach": "Lisää laitteelta",
+ "common_tab_link": "Lisää linkillä",
+ "common_link": "Linkki",
+ "common_sizes": "Koko, px",
+ "image_name": "Otsikko",
+ "image_link_href": "Kuvan linkki",
+ "image_link_href_help": "Osoite, johon kuvalinkki johtaa.",
+ "image_alt": "Alt-teksti",
+ "image_alt_help": "Alt-teksti näytetään, jos kuvaa ei voida ladata.",
+ "image_upload_help": "JPEG-, GIF- tai PNG-kuva, enintään 1 Mt.",
+ "image_upload_failed": "Kuvan lisääminen epäonnistui",
+ "image_size_width": "Leveys",
+ "image_size_height": "Korkeus",
+ "link_url_help": "Osoite, johon linkki johtaa.",
+ "link_text": "Linkin teksti",
+ "link_text_help": "Teksti, joka näytetään linkkinä.",
+ "link_open_help": "Avaa linkki uuteen välilehteen"
+ },
+ "md-hints": {
+ "header_title": "Otsikko",
+ "header_hint": "# Tekstisi",
+ "italic_title": "Kursiivi",
+ "italic_hint": "_Tekstisi_",
+ "bold_title": "Lihavoitu",
+ "bold_hint": "**Tekstisi**",
+ "strikethrough_title": "Yliviivaus",
+ "strikethrough_hint": "~~Tekstisi~~",
+ "blockquote_title": "Lainaus",
+ "blockquote_hint": "> Tekstisi",
+ "code_title": "Koodi",
+ "code_hint": "```Tekstisi```",
+ "link_title": "Linkki",
+ "link_hint": "[Tekstisi](osoite)",
+ "image_title": "Kuva",
+ "image_hint": "",
+ "list_title": "Listan kohta",
+ "list_hint": "- Tekstisi",
+ "numbered-list_title": "Numeroitu lista",
+ "numbered-list_hint": "1. Tekstisi",
+ "documentation": "Dokumentaatio",
+ "documentation_link": "https://diplodoc.com/docs/fi/syntax/"
+ },
+ "menubar": {
+ "bold": "Lihavoitu",
+ "code": "Koodi",
+ "code_inline": "Rivikoodi",
+ "codeblock": "Koodilohko",
+ "colorify": "Tekstin väri",
+ "colorify__color_blue": "Sininen",
+ "colorify__color_default": "Oletus",
+ "colorify__color_gray": "Harmaa",
+ "colorify__color_green": "Vihreä",
+ "colorify__color_orange": "Oranssi",
+ "colorify__color_red": "Punainen",
+ "colorify__color_violet": "Violetti",
+ "colorify__color_yellow": "Keltainen",
+ "colorify__group_text": "Teksti",
+ "cut": "Leikkaa",
+ "emoji": "Emoji",
+ "emoji__hint": "Emojit voi lisätä WYSIWYG:ssä tai käsin merkinnällä",
+ "heading": "Otsikko",
+ "heading1": "Otsikko 1",
+ "heading2": "Otsikko 2",
+ "heading3": "Otsikko 3",
+ "heading4": "Otsikko 4",
+ "heading5": "Otsikko 5",
+ "heading6": "Otsikko 6",
+ "hrule": "Erotin",
+ "image": "Kuva",
+ "italic": "Kursiivi",
+ "link": "Linkki",
+ "list": "Lista",
+ "list__action_lift": "Nosta kohta",
+ "list__action_sink": "Laske kohta",
+ "list_action_disabled": "Ristiriita listan logiikan kanssa",
+ "mark": "Merkitty",
+ "mono": "Monospace",
+ "more_action": "Lisää toimintoja",
+ "note": "Huomautus",
+ "olist": "Järjestetty lista",
+ "quote": "Lainaus",
+ "redo": "Tee uudelleen",
+ "strike": "Yliviivaus",
+ "table": "Taulukko",
+ "text": "Teksti",
+ "ulist": "Luettelomerkki lista",
+ "underline": "Alleviivaus",
+ "undo": "Kumoa"
+ },
+ "placeholder": {
+ "doc_empty": "Kirjoita / käyttääksesi komentoja...",
+ "checkbox": "Syötä tehtävän kuvaus...",
+ "deflist_term": "Termi",
+ "deflist_desc": "Määritelmän kuvaus",
+ "heading": "Otsikko",
+ "cut_title": "Otsikko",
+ "cut_content": "Sisältö näytetään napsautettaessa",
+ "note_title": "Otsikko",
+ "note_content": "Huomautuksen sisältö",
+ "table_cell": "Solun sisältö",
+ "select_filter": "Etsi kieliä..."
+ },
+ "search": {
+ "label_case-sensitive": "Kirjainkoko huomioidaan",
+ "label_whole-word": "Koko sana",
+ "title": "Etsi koodista"
+ },
+ "suggest": {
+ "empty-msg": "Ei löytynyt"
+ },
+ "widgets": {
+ "image": "Lisää kuva",
+ "link": "Lisää linkki"
+ },
+ "yfm-note": {
+ "info": "Huomautus",
+ "tip": "Vinkki",
+ "warning": "Varoitus",
+ "alert": "Hälytys",
+ "remove": "Poista"
+ },
+ "yfm-table": {
+ "column.add.before": "Lisää sarake ennen",
+ "column.add.after": "Lisää sarake jälkeen",
+ "column.remove": "Poista sarake",
+ "row.add.before": "Lisää rivi ennen",
+ "row.add.after": "Lisää rivi jälkeen",
+ "row.remove": "Poista rivi",
+ "table.remove": "Poista taulukko",
+ "table.menu.cell.align.left": "Tasaa solun sisältö vasemmalle",
+ "table.menu.cell.align.right": "Tasaa solun sisältö oikealle",
+ "table.menu.cell.align.center": "Tasaa solun sisältö keskelle",
+ "table.menu.row.add": "Lisää rivi jälkeen",
+ "table.menu.row.remove": "Poista rivi",
+ "table.menu.column.add": "Lisää sarake jälkeen",
+ "table.menu.column.remove": "Poista sarake",
+ "table.menu.convert.yfm": "Muunna YFM-taulukoksi",
+ "table.menu.table.remove": "Poista taulukko"
+ }
+}
diff --git a/client/src/locales/index.js b/client/src/locales/index.js
index 0fb387c3..03086252 100644
--- a/client/src/locales/index.js
+++ b/client/src/locales/index.js
@@ -13,6 +13,7 @@ import enGB from './en-GB';
import enUS from './en-US';
import esES from './es-ES';
import faIR from './fa-IR';
+import fiFI from './fi-FI';
import frFR from './fr-FR';
import huHU from './hu-HU';
import idID from './id-ID';
@@ -45,6 +46,7 @@ const locales = [
enUS,
esES,
faIR,
+ fiFI,
frFR,
huHU,
idID,
diff --git a/server/api/models/User.js b/server/api/models/User.js
index e3971c0b..7659ea95 100755
--- a/server/api/models/User.js
+++ b/server/api/models/User.js
@@ -44,6 +44,7 @@ const LANGUAGES = [
'en-US',
'es-ES',
'fa-IR',
+ 'fi-FI',
'fr-FR',
'hu-HU',
'id-ID',