diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml
index ceceabd5..e8283946 100644
--- a/web/translation/translate.en_US.toml
+++ b/web/translation/translate.en_US.toml
@@ -44,6 +44,7 @@
"monitor" = "Listen IP"
"certificate" = "Digital Certificate"
"fail" = "Failed"
+"comment" = "Comment"
"success" = "Successfully"
"getVersion" = "Get Version"
"install" = "Install"
diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml
index b9af3272..fffdb378 100644
--- a/web/translation/translate.es_ES.toml
+++ b/web/translation/translate.es_ES.toml
@@ -44,6 +44,7 @@
"monitor" = "Listening IP"
"certificate" = "Certificado Digital"
"fail" = "Falló"
+"comment" = "Comentario"
"success" = "Éxito"
"getVersion" = "Obtener versión"
"install" = "Instalar"
diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml
index c7fad84e..d1fcaca4 100644
--- a/web/translation/translate.fa_IR.toml
+++ b/web/translation/translate.fa_IR.toml
@@ -44,6 +44,7 @@
"monitor" = "آیپی اتصال"
"certificate" = "گواهی دیجیتال"
"fail" = "ناموفق"
+"comment" = "نظر دهید"
"success" = "موفق"
"getVersion" = "دریافت نسخه"
"install" = "نصب"
diff --git a/web/translation/translate.fi_FI.toml b/web/translation/translate.fi_FI.toml
new file mode 100644
index 00000000..a61410ca
--- /dev/null
+++ b/web/translation/translate.fi_FI.toml
@@ -0,0 +1,595 @@
+"username" = "Käyttäjänimi"
+"password" = "Salasana"
+"login" = "Kirjaudu sisään"
+"confirm" = "Vahvista"
+"cancel" = "Peruuta"
+"close" = "Sulje"
+"copy" = "Kopioi"
+"copied" = "Kopioitu"
+"download" = "Lataa"
+"remark" = "Huomautus"
+"enable" = "Ota käyttöön"
+"protocol" = "Protokolla"
+"search" = "Haku"
+"filter" = "Suodatin"
+"loading" = "Ladataan..."
+"second" = "Sekunti"
+"minute" = "Minuutti"
+"hour" = "Tunti"
+"day" = "Päivä"
+"check" = "Tarkista"
+"indefinite" = "Määräaikainen"
+"unlimited" = "Rajoittamaton"
+"none" = "Tyhjä"
+"qrCode" = "QR-koodi"
+"info" = "Tiedot"
+"edit" = "Muokkaa"
+"delete" = "Poista"
+"reset" = "Nollaa"
+"copySuccess" = "Kopioitu"
+"sure" = "Kyllä"
+"encryption" = "Salaus"
+"transmission" = "Lähetysprotokolla"
+"host" = "Isäntä"
+"path" = "Polku"
+"camouflage" = "Naamiointi"
+"status" = "Tila"
+"enabled" = "Käytössä"
+"disabled" = "Pois käytöstä"
+"depleted" = "Loppuun käytetty"
+"depletingSoon" = "Lähes loppunut"
+"offline" = "Offline"
+"online" = "Online"
+"domainName" = "Verkkotunnus"
+"monitor" = "Seuraa IP:tä"
+"certificate" = "Digitaalinen sertifikaatti"
+"fail" = "Epäonnistui"
+"comment" = "Kommentti"
+"success" = "Onnistui"
+"getVersion" = "Hanki versio"
+"install" = "Asennus"
+"clients" = "Asiakkaat"
+"usage" = "Käyttö"
+"secretToken" = "Salainen tunnus"
+"remained" = "Jäljellä"
+"security" = "Turvallisuus"
+"secAlertTitle" = "Tietoturvahälytys"
+"secAlertSsl" = "Tämä yhteys ei ole suojattu. Älä anna arkaluontoisia tietoja ennen kuin TLS on aktivoitu tietojen suojaamiseksi."
+"secAlertConf" = "Jotkin asetukset ovat alttiita hyökkäyksille. On suositeltavaa vahvistaa tietoturvaprotokollia mahdollisten tietomurtojen estämiseksi."
+"secAlertSSL" = "Ohjauspaneelin yhteys ei ole turvallinen. Asenna TLS-sertifikaatti tietojen suojaamiseksi."
+"secAlertPanelPort" = "Paneelin oletusportti ei ole turvallinen. Määritä satunnainen tai tietty portti."
+"secAlertPanelURI" = "Paneelin oletus-URI-polku ei ole turvallinen. Määritä monimutkainen URI-polku."
+"secAlertSubURI" = "Tilauksen oletus-URI-polku ei ole turvallinen. Määritä monimutkainen URI-polku."
+"secAlertSubJsonURI" = "Tilauksen JSON-oletus-URI-polku ei ole turvallinen. Määritä monimutkainen URI-polku."
+
+[menu]
+"dashboard" = "Järjestelmän tila"
+"inbounds" = "Yhteydet"
+"settings" = "Paneelin asetukset"
+"xray" = "Xray-asetukset"
+"logout" = "Kirjaudu ulos"
+"link" = "Hallinta"
+
+[pages.login]
+"hello" = "Hei"
+"title" = "Tervetuloa"
+"loginAgain" = "Istuntosi on vanhentunut. Kirjaudu sisään uudelleen."
+
+[pages.login.toasts]
+"invalidFormData" = "Virheellinen tietomuoto"
+"emptyUsername" = "Anna käyttäjänimi"
+"emptyPassword" = "Anna salasana"
+"wrongUsernameOrPassword" = "Väärä käyttäjänimi tai salasana"
+"successLogin" = "Kirjautuminen onnistui"
+
+[pages.index]
+"title" = "Järjestelmän tila"
+"memory" = "Muisti"
+"hard" = "Kiintolevy"
+"xrayStatus" = "Xray"
+"stopXray" = "Pysäytä"
+"restartXray" = "Käynnistä uudelleen"
+"xraySwitch" = "Versio"
+"xraySwitchClick" = "Valitse haluamasi versio"
+"xraySwitchClickDesk" = "Valitse huolellisesti, koska vanhemmat versiot voivat olla yhteensopimattomia nykyisten asetusten kanssa."
+"operationHours" = "Järjestelmän käyttöaika"
+"systemLoad" = "Järjestelmän kuormitus"
+"systemLoadDesc" = "Järjestelmän keskimääräinen kuormitus viimeisen 1, 5 ja 15 minuutin aikana."
+"connectionTcpCountDesc" = "TCP-yhteyksien kokonaismäärä kaikilla verkkokorteilla."
+"connectionUdpCountDesc" = "UDP-yhteyksien kokonaismäärä kaikilla verkkokorteilla."
+"connectionCount" = "Yhteyksien määrä"
+"upSpeed" = "Kaikkien verkkojen yhteinen upload-nopeus"
+"downSpeed" = "Kaikkien verkkojen yhteinen download-nopeus"
+"totalSent" = "Kaikkien verkkojen lähettämä tiedon määrä järjestelmän käynnistämisestä lähtien"
+"totalReceive" = "Kaikkien verkkojen vastaanottama tiedon määrä järjestelmän käynnistämisestä lähtien."
+"xraySwitchVersionDialog" = "Vaihda Xray-versiota"
+"xraySwitchVersionDialogDesc" = "Haluatko varmasti vaihtaa Xray-versiota?"
+"dontRefresh" = "Asennus käynnissä. Älä päivitä tätä sivua."
+"logs" = "Lokit"
+"config" = "Määritykset"
+"backup" = "Varmuuskopiointi ja palautus"
+"backupTitle" = "Tietokannan varmuuskopiointi ja palautus"
+"backupDescription" = "Muista tehdä varmuuskopio ennen uuden tietokannan tuontia."
+"exportDatabase" = "Vie tietokanta"
+"importDatabase" = "Tuo tietokanta"
+
+[pages.inbounds]
+"title" = "Yhteydet"
+"totalDownUp" = "Kokonais-upload/download"
+"totalUsage" = "Kokonaiskäyttö"
+"inboundCount" = "Yhteyksien määrä"
+"operate" = "Valikko"
+"enable" = "Ota käyttöön"
+"remark" = "Huomautus"
+"protocol" = "Protokolla"
+"port" = "Portti"
+"traffic" = "Liikenne"
+"details" = "Tiedot"
+"transportConfig" = "Kuljetus"
+"expireDate" = "Päättymispäivä"
+"resetTraffic" = "Nollaa liikenne"
+"addInbound" = "Lisää yhteys"
+"generalActions" = "Yleiset toiminnot"
+"create" = "Luo"
+"update" = "Päivitä"
+"modifyInbound" = "Muokkaa yhteyttä"
+"deleteInbound" = "Poista yhteys"
+"deleteInboundContent" = "Haluatko varmasti poistaa tämän yhteyden?"
+"deleteClient" = "Poista asiakas"
+"deleteClientContent" = "Haluatko varmasti poistaa tämän asiakkaan?"
+"resetTrafficContent" = "Haluatko varmasti nollata liikenteen?"
+"copyLink" = "Kopioi avain"
+"address" = "Osoite"
+"network" = "Verkko"
+"destinationPort" = "Kohdeportti"
+"targetAddress" = "Kohdeosoite"
+"monitorDesc" = "Jätä tyhjäksi kuunnellaksesi kaikkia IP-osoitteita."
+"meansNoLimit" = "= Ei rajoituksia (arvo: GB)"
+"totalFlow" = "Kokonaiskulutus"
+"leaveBlankToNeverExpire" = "Jätä tyhjäksi, jotta se ei vanhene."
+"noRecommendKeepDefault" = "Ei suositella jättämään oletusasetuksia."
+"certificatePath" = "Tiedostopolku"
+"certificateContent" = "Tiedoston sisältö"
+"publicKey" = "Julkinen avain"
+"privatekey" = "Yksityinen avain"
+"clickOnQRcode" = "Napsauta QR-koodia kopioidaksesi"
+"client" = "Asiakas"
+"export" = "Vie avaimet"
+"clone" = "Kloonaa"
+"cloneInbound" = "Kloonaa"
+"cloneInboundContent" = "Kaikki tämän yhteyden asetukset, paitsi portti, kuuntelu-IP ja asiakkaat, kloonataan."
+"cloneInboundOk" = "Kloonattu"
+"resetAllTraffic" = "Nollaa kaikkien yhteyksien liikenne"
+"resetAllTrafficTitle" = "Kaikkien yhteyksien liikenteen nollaus"
+"resetAllTrafficContent" = "Haluatko varmasti nollata kaikkien yhteyksien liikenteen?"
+"resetInboundClientTraffics" = "Nollaa käyttäjien liikenne"
+"resetInboundClientTrafficTitle" = "Käyttäjien liikenteen nollaus"
+"resetInboundClientTrafficContent" = "Haluatko varmasti nollata kaikkien näiden käyttäjien liikenteen?"
+"resetAllClientTraffics" = "Nollaa kaikkien käyttäjien liikenne"
+"resetAllClientTrafficTitle" = "Kaikkien käyttäjien liikenteen nollaus"
+"resetAllClientTrafficContent" = "Haluatko varmasti nollata kaikkien käyttäjien liikenteen?"
+"delDepletedClients" = "Poista poistetut käyttäjät"
+"delDepletedClientsTitle" = "Poistettujen käyttäjien poisto"
+"delDepletedClientsContent" = "Haluatko varmasti poistaa kaikki poistetut käyttäjät?"
+"email" = "Sähköposti"
+"emailDesc" = "Anna yksilöllinen sähköpostiosoite."
+"IPLimit" = "IP-rajoitus"
+"IPLimitDesc" = "Katkaise yhteys, jos yhdistettyjen IP-osoitteiden määrä ylittää tämän arvon (anna 0 poistaaksesi IP-rajoituksen käytöstä)."
+"IPLimitlog" = "IP-loki"
+"IPLimitlogDesc" = "IP-lokitiedot (IP-lokin käyttöönottamiseksi on tyhjennettävä lista)."
+"IPLimitlogclear" = "Tyhjennä loki"
+"setDefaultCert" = "Aseta paneelin sertifikaatti"
+"telegramDesc" = "Anna Telegram-chatin tunnus. (käytä '/id'-komentoa botissa) tai (@userinfobot)."
+"subscriptionDesc" = "Löydät tilauslinkkisi kohdasta 'Tiedot'. Voit käyttää samaa nimeä useille määrityksille."
+"info" = "Tiedot"
+"same" = "Sama"
+"inboundData" = "Saapuva data"
+"exportInbound" = "Vie saapuva"
+"import" = "Tuo"
+"importInbound" = "Tuo yhteys"
+
+[pages.client]
+"add" = "Lisää käyttäjä"
+"edit" = "Muokkaa käyttäjää"
+"submitAdd" = "Lisää käyttäjä"
+"submitEdit" = "Tallenna muutokset"
+"clientCount" = "Käyttäjien määrä"
+"bulk" = "Lisää useita"
+"method" = "Menetelmä"
+"first" = "Ensimmäinen"
+"last" = "Viimeinen"
+"prefix" = "Etuliite"
+"postfix" = "Jälkiliite"
+"delayedStart" = "Käytön aloitus"
+"expireDays" = "Kesto"
+"days" = "päivää"
+"renew" = "Automaattinen uusiminen"
+"renewDesc" = "Uusii automaattisesti käyttöoikeuden umpeutumisen jälkeen. (0 = pois käytöstä) (yksikkö: päivä)"
+
+[pages.inbounds.toasts]
+"obtain" = "Hanki"
+
+[pages.inbounds.stream.general]
+"request" = "Pyyntö"
+"response" = "Vastaus"
+"name" = "Nimi"
+"value" = "Arvo"
+
+[pages.inbounds.stream.tcp]
+"version" = "Versio"
+"method" = "Menetelmä"
+"path" = "Polku"
+"status" = "Tila"
+"statusDescription" = "Tilan kuvaus"
+"requestHeader" = "Pyynnön otsikko"
+"responseHeader" = "Vastauksen otsikko"
+
+[pages.settings]
+"title" = "Asetukset"
+"save" = "Tallenna"
+"infoDesc" = "Jokainen tehty muutos on tallennettava. Käynnistä paneeli uudelleen, jotta muutokset tulevat voimaan."
+"restartPanel" = "Käynnistä paneeli uudelleen"
+"restartPanelDesc" = "Haluatko varmasti käynnistää paneelin uudelleen? Paina OK, jotta paneeli käynnistyy uudelleen 3 sekunnin kuluttua. Jos et pääse paneeliin uudelleenkäynnistyksen jälkeen, tarkista paneelin lokit palvelimelta."
+"actions" = "Toiminnot"
+"resetDefaultConfig" = "Palauta oletusasetukset"
+"panelSettings" = "Paneelin asetukset"
+"securitySettings" = "Tietoturva-asetukset"
+"TGBotSettings" = "Telegram-botin asetukset"
+"panelListeningIP" = "Paneelin kuuntelu-IP-osoite"
+"panelListeningIPDesc" = "Jätä tyhjäksi, jos haluat hyväksyä yhteydet mistä tahansa IP-osoitteesta."
+"panelListeningDomain" = "Paneelin kuunteludomain"
+"panelListeningDomainDesc" = "Jätä oletusarvoisesti tyhjäksi, jotta kaikki domainit ja IP-osoitteet huomioidaan."
+"panelPort" = "Paneelin portti"
+"panelPortDesc" = "Portti, jota käytetään paneelin näyttämiseen."
+"publicKeyPath" = "Paneelin julkisen avaimen tiedoston polku"
+"publicKeyPathDesc" = "Anna koko polku, joka alkaa merkillä '/'."
+"privateKeyPath" = "Paneelin yksityisen avaimen tiedoston polku"
+"privateKeyPathDesc" = "Anna koko polku, joka alkaa merkillä '/'."
+"panelUrlPath" = "Paneelin URL-osoitteen juuripolku"
+"panelUrlPathDesc" = "Tulee alkaa merkillä '/' ja päättyä merkillä '/'."
+"pageSize" = "Sivunumeroinnin koko"
+"pageSizeDesc" = "Määritä sisääntulevien taulukon sivukoko. Aseta 0 poistaaksesi käytöstä."
+"remarkModel" = "Huomautusmalli ja erotusmerkki"
+"datepicker" = "Päivämäärän valitsin"
+"datepickerPlaceholder" = "Valitse päivämäärä"
+"datepickerDescription" = "Suunnitellut tehtävät suoritetaan tämän kalenterin mukaan."
+"sampleRemark" = "Esimerkki huomautuksesta"
+"oldUsername" = "Nykyinen käyttäjätunnus"
+"currentPassword" = "Nykyinen salasana"
+"newUsername" = "Uusi käyttäjätunnus"
+"newPassword" = "Uusi salasana"
+"telegramBotEnable" = "Ota käyttöön Telegram-botti"
+"telegramBotEnableDesc" = "Yhdistä tämän paneelin toimintoihin Telegram-botin avulla."
+"telegramToken" = "Telegram-botin token"
+"telegramTokenDesc" = "Sinun on hankittava token Telegramin bot-managerilta @botfather."
+"telegramProxy" = "Socks5-välityspalvelin"
+"telegramProxyDesc" = "Jos tarvitset Socks5-välityspalvelimen yhteyden muodostamiseen Telegramiin, määritä sen asetukset ohjeiden mukaan."
+"telegramAPIServer" = "Telegramin API-palvelin"
+"telegramAPIServerDesc" = "Käytettävä Telegramin API-palvelin. Jätä tyhjäksi käyttääksesi oletuspalvelinta."
+"telegramChatId" = "Telegram-botin ylläpitäjän tunniste"
+"telegramChatIdDesc" = "Yksi tai useampi botin ylläpitäjän tunniste. Saat tunnisteen käyttämällä @userinfobotia tai antamalla komennon '/id' botille."
+"telegramNotifyTime" = "Telegram-botin ilmoitusten tiheys"
+"telegramNotifyTimeDesc" = "Käytä Crontab-aikamuotoa."
+"tgNotifyBackup" = "Tietokannan varmuuskopiointi"
+"tgNotifyBackupDesc" = "Sisällytä tietokannan varmuuskopiotiedosto raportti-ilmoitukseen."
+"tgNotifyLogin" = "Kirjautumisilmoitus"
+"tgNotifyLoginDesc" = "Näyttää käyttäjänimen, IP-osoitteen ja ajan, kun joku yrittää kirjautua paneeliin."
+"sessionMaxAge" = "Istunnon kesto"
+"sessionMaxAgeDesc" = "Istunnon kesto järjestelmässä (yksikkö: minuutti)."
+"expireTimeDiff" = "Ilmoituksen istunnon umpeutumisen kynnys"
+"expireTimeDiffDesc" = "Ilmoitus istunnon umpeutumisesta ennen kynnyksen saavuttamista (yksikkö: päivä)."
+"trafficDiff" = "Liikennekynnyksen ilmoitus"
+"trafficDiffDesc" = "Ilmoitus liikenteen käytöstä ennen kynnyksen saavuttamista (yksikkö: GB)."
+"tgNotifyCpu" = "CPU-kuormituksen ilmoituskynnys"
+"tgNotifyCpuDesc" = "Ilmoitus, jos CPU-kuormitus ylittää tämän kynnyksen (yksikkö: %)."
+"timeZone" = "Aikavyöhyke"
+"timeZoneDesc" = "Suunnitellut tehtävät suoritetaan tämän aikavyöhykkeen mukaan."
+"subSettings" = "Tilaukset"
+"subEnable" = "Ota palvelu käyttöön"
+"subEnableDesc" = "Tilauksen toiminto erillisillä asetuksilla."
+"subListen" = "Kuunteleva IP-osoite"
+"subListenDesc" = "Jätä oletuksena tyhjäksi, jotta kaikki IP-osoitteet huomioidaan."
+"subPort" = "Tilauksen portti"
+"subPortDesc" = "Tilauksen palvelun portin numero ei saa olla käytössä palvelimella."
+"subCertPath" = "Tilauksen julkisen avaimen sertifikaattitiedoston polku"
+"subCertPathDesc" = "Anna koko polku, joka alkaa merkillä '/'."
+"subKeyPath" = "Tilauksen yksityisen avaimen sertifikaattitiedoston polku"
+"subKeyPathDesc" = "Anna koko polku, joka alkaa merkillä '/'."
+"subPath" = "Tilauksen URL-osoitteen juuripolku"
+"subPathDesc" = "Tulee alkaa merkillä '/' ja päättyä merkillä '/'."
+"subDomain" = "Kuunteludomain"
+"subDomainDesc" = "Jätä oletuksena tyhjäksi, jotta kaikki domainit ja IP-osoitteet huomioidaan."
+"subUpdates" = "Tilauksen päivitysvälit"
+"subUpdatesDesc" = "Aika asiakkaan sovelluksen päivitysten välillä (yksikkö: tunti)."
+"subEncrypt" = "Salaa kokoonpanot"
+"subEncryptDesc" = "Salaa palautetut kokoonpanot tilauksessa."
+"subShowInfo" = "Näytä käyttöä koskevat tiedot"
+"subShowInfoDesc" = "Näyttää jäljellä olevan liikenteen ja päivämäärän kokoonpanon nimen jälkeen."
+"subURI" = "Käänteisen välityspalvelimen URI"
+"subURIDesc" = "Muokkaa tilauksen URL-osoitteen perus-URI:ta käytettäväksi välityspalvelimien takana."
+"fragment" = "Paketin pirstominen"
+"fragmentDesc" = "Ota käyttöön TLS-tervehdysviestin pirstominen."
+"fragmentSett" = "Pirstomisasetukset"
+"noisesDesc" = "Ota käyttöön Noises."
+"noisesSett" = "Noises-asetukset"
+"mux" = "Mux"
+"muxDesc" = "Useiden itsenäisten tietovirtojen siirto yhden luodun tietovirran sisällä."
+"muxSett" = "Mux-asetukset"
+"direct" = "Suora yhteys"
+"directDesc" = "Luo suoria yhteyksiä tiettyjen maiden domaineihin tai IP-alueisiin."
+
+[pages.xray]
+"title" = "Xray-asetukset"
+"save" = "Tallenna asetukset"
+"restart" = "Käynnistä Xray uudelleen"
+"basicTemplate" = "Peruspohja"
+"advancedTemplate" = "Laajennettu pohja"
+"generalConfigs" = "Yleiset asetukset"
+"generalConfigsDesc" = "Nämä asetukset määrittävät yleiset asetukset."
+"logConfigs" = "Lokit"
+"logConfigsDesc" = "Lokit voivat vaikuttaa palvelimesi suorituskykyyn. Suositellaan ottamaan käyttöön vain tarvittaessa!"
+"blockConfigs" = "Konfiguraatioiden esto"
+"blockConfigsDesc" = "Nämä asetukset estävät käyttäjiä muodostamasta yhteyttä tiettyihin protokolliin ja verkkosivustoihin."
+"basicRouting" = "Perusyhteydet"
+"blockConnectionsConfigsDesc" = "Nämä asetukset estävät liikennettä pyydetyn maan perusteella."
+"directConnectionsConfigsDesc" = "Suora yhteys takaa, että tietty liikenne ei ohjaudu toisen palvelimen kautta."
+"blockips" = "Estä IP-osoitteet"
+"blockdomains" = "Estä verkkotunnukset"
+"directips" = "Suorat IP-osoitteet"
+"directdomains" = "Suorat verkkotunnukset"
+"ipv4Routing" = "IPv4-reitityssäännöt"
+"ipv4RoutingDesc" = "Nämä asetukset mahdollistavat käyttäjien reitittämisen kohteisiin vain IPv4:n kautta."
+"warpRouting" = "WARP-reitityssäännöt"
+"warpRoutingDesc" = "Huomio: Ennen näiden asetusten käyttöä asenna WARP socks5-välityspalvelintilassa palvelimellesi ohjeiden mukaan GitHub-paneelista. WARP reitittää liikenteen verkkosivuille Cloudflaren palvelimien kautta."
+"Template" = "Xray-konfiguraatiopohja"
+"TemplateDesc" = "Luo Xray-konfiguraatiotiedosto tämän pohjan perusteella."
+"FreedomStrategy" = "Freedom-protokollan strategia-asetukset"
+"FreedomStrategyDesc" = "Määritä verkon ulostulostrategia Freedom-protokollassa."
+"RoutingStrategy" = "Verkkotunnuksen reititysstrategia"
+"RoutingStrategyDesc" = "Määritä DNS-resoluution yleinen reititysstrategia."
+"Torrent" = "BitTorrentin käytön esto"
+"TorrentDesc" = "Muokkaa konfiguraatiopohjaa estääksesi käyttäjiä käyttämästä BitTorrentia."
+"Family" = "Estä haittaohjelmat ja aikuisviihdesisältö"
+"FamilyDesc" = "Cloudflaren DNS-resolverit estävät haittaohjelmat ja aikuisviihdesisällön perheen suojelemiseksi."
+"Inbounds" = "Sisääntulevat"
+"InboundsDesc" = "Muokkaa konfiguraatiopohjaa tiettyjen käyttäjien yhdistämiseen."
+"Outbounds" = "Ulospäin suuntautuvat"
+"Balancers" = "Kuormituksen tasaus"
+"OutboundsDesc" = "Muokkaa konfiguraatiopohjaa määrittääksesi tämän palvelimen ulospäin suuntautuvat polut."
+"Routings" = "Reitityssäännöt"
+"RoutingsDesc" = "Jokaisen säännön prioriteetti on tärkeä!"
+"completeTemplate" = "Kaikki"
+"logLevel" = "Lokitason asetus"
+"logLevelDesc" = "Virhelokien taso, joka määrittää, mitä tietoa tallennetaan."
+"accessLog" = "Pääsyloki"
+"accessLogDesc" = "Pääsylokitiedoston polku. Erityisarvo 'none' poistaa pääsylokit käytöstä."
+"errorLog" = "Virheloki"
+"errorLogDesc" = "Virhelokitiedoston polku. Erityisarvo 'none' poistaa virhelokit käytöstä."
+"dnsLog" = "DNS-loki"
+"dnsLogDesc" = "Ota käyttöön DNS-kyselyiden lokit."
+"maskAddress" = "Peitä osoite"
+"maskAddressDesc" = "IP-osoitteen maski, joka aktivoituna korvaa automaattisesti lokeissa näkyvän IP-osoitteen."
+
+[pages.xray.rules]
+"first" = "Ensimmäinen"
+"last" = "Viimeinen"
+"up" = "Ylös"
+"down" = "Alas"
+"source" = "Lähde"
+"dest" = "Kohde"
+"inbound" = "Sisääntuleva"
+"outbound" = "Ulospäin suuntautuva"
+"balancer" = "Kuormituksen tasaus"
+"info" = "Tieto"
+"add" = "Lisää sääntö"
+"edit" = "Muokkaa sääntöä"
+"useComma" = "Pilkulla erotetut kohteet"
+
+[pages.xray.outbound]
+"addOutbound" = "Lisää ulospäin suuntautuva"
+"addReverse" = "Lisää käänteinen"
+"editOutbound" = "Muokkaa ulospäin suuntautuvaa"
+"editReverse" = "Muokkaa käänteistä"
+"tag" = "Tunniste"
+"tagDesc" = "Ainutlaatuinen tunniste"
+"address" = "Osoite"
+"reverse" = "Käänteinen"
+"domain" = "Verkkotunnus"
+"type" = "Tyyppi"
+"bridge" = "Silta"
+"portal" = "Portaali"
+"intercon" = "Yhteys"
+"settings" = "Asetukset"
+"accountInfo" = "Tilin tiedot"
+"outboundStatus" = "Ulospäin suuntautuva tila"
+"sendThrough" = "Lähetä kautta"
+
+[pages.xray.balancer]
+"addBalancer" = "Lisää kuormituksen tasaaja"
+"editBalancer" = "Muokkaa kuormituksen tasaajaa"
+"balancerStrategy" = "Strategia"
+"balancerSelectors" = "Valitsimet"
+"tag" = "Tunniste"
+"tagDesc" = "Ainutlaatuinen tunniste"
+"balancerDesc" = "BalancerTagia ja outboundTagia ei voi käyttää samanaikaisesti. Jos niitä käytetään yhdessä, vain outboundTag toimii."
+
+[pages.xray.wireguard]
+"secretKey" = "Yksityinen avain"
+"publicKey" = "Julkinen avain"
+"allowedIPs" = "Sallitut IP-osoitteet"
+"endpoint" = "Päätepiste"
+"psk" = "Jaettu avain"
+"domainStrategy" = "Toimialuestrategia"
+
+[pages.xray.dns]
+"enable" = "Ota DNS käyttöön"
+"enableDesc" = "Ota sisäänrakennettu DNS-palvelin käyttöön"
+"tag" = "DNS-tulojen tunniste"
+"tagDesc" = "Tämä tunniste on käytettävissä reitityssääntöjen tulojen tunnisteena."
+"strategy" = "Kyselystrategia"
+"strategyDesc" = "Yleinen toimialueiden nimien selvitysstrategia"
+"add" = "Lisää palvelin"
+"edit" = "Muokkaa palvelinta"
+"domains" = "Toimialueet"
+"expectIPs" = "Odotetut IP-osoitteet"
+
+[pages.xray.fakedns]
+"add" = "Lisää väärennetty DNS"
+"edit" = "Muokkaa väärennettyä DNS:ää"
+"ipPool" = "IP-allas"
+"poolSize" = "Altaan koko"
+
+[pages.settings.security]
+"admin" = "Ylläpitäjä"
+"secret" = "Salainen tunnus"
+"loginSecurity" = "Kirjautumisen turvallisuus"
+"loginSecurityDesc" = "Ota käyttöön lisäturvatoimenpiteet käyttäjän kirjautumiselle"
+"secretToken" = "Salainen tunnus"
+"secretTokenDesc" = "Ole hyvä ja kopioi ja säilytä tämä tunnus turvallisessa paikassa. Tämä tunnus tarvitaan järjestelmään kirjautumiseen, eikä sitä voi palauttaa x-ui-työkalulla."
+
+[pages.settings.toasts]
+"modifySettings" = "Muuta asetuksia"
+"getSettings" = "Näytä asetukset"
+"modifyUser" = "Muokkaa käyttäjää"
+"originalUserPassIncorrect" = "Virheellinen käyttäjänimi tai salasana"
+"userPassMustBeNotEmpty" = "Uuden käyttäjänimen ja salasanan tulee olla täytettyinä"
+
+[tgbot]
+"keyboardClosed" = "❌ Mukautettu näppäimistö on suljettu!"
+"noResult" = "❗ Ei tuloksia!"
+"noQuery" = "❌ Pyyntöä ei löytynyt! Yritä uudelleen komentoa!"
+"wentWrong" = "❌ Jokin meni pieleen!"
+"noIpRecord" = "❗ Ei IP-osoitteen tietueita!"
+"noInbounds" = "❗ Sisääntulevia yhteyksiä ei löytynyt!"
+"unlimited" = "♾ Rajoittamaton"
+"add" = "Lisää"
+"month" = "Kuukausi"
+"months" = "Kuukautta"
+"day" = "Päivä"
+"days" = "Päivää"
+"hours" = "Tuntia"
+"unknown" = "Tuntematon"
+"inbounds" = "Sisääntulevat"
+"clients" = "Asiakkaat"
+"offline" = "🔴 Offline"
+"online" = "🟢 Online"
+
+[tgbot.commands]
+"unknown" = "❗ Tuntematon komento"
+"pleaseChoose" = "👇 Valitse seuraava:\r\n"
+"help" = "🤖 Tervetuloa tähän bottiin! Se on suunniteltu tarjoamaan sinulle tarkkoja tietoja palvelimelta ja mahdollistaa tarvittavien muutosten tekemisen.\r\n\r\n"
+"start" = "👋 Hei, {{ .Firstname }}.\r\n"
+"welcome" = "🤖 Tervetuloa hallintabottiin {{ .Hostname }}.\r\n"
+"status" = "✅ Botti toimii normaalisti!"
+"usage" = "❗ Ole hyvä ja anna hakuteksti!"
+"getID" = "🆔 ID:si: {{ .ID }}
"
+"helpAdminCommands" = "Xray Core -palvelimen uudelleenkäynnistämiseksi:\r\n/restart force
\r\n\r\nEtsimään asiakkaan sähköpostia:\r\n/usage [Email]
\r\n\r\nEtsimään sisääntulevia (asiakastilastojen kanssa):\r\n/inbound [Huomautus]
\r\n\r\nTelegramin chat-ID:\r\n/id
"
+"helpClientCommands" = "Etsimään tilastotietoja, käytä seuraavaa komentoa:\r\n/usage [Email]
\r\n\r\nTelegramin chat-ID:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Toiminto suoritettu onnistuneesti!"
+"restartFailed" = "❗ Toiminto epäonnistui.\r\n\r\nVirhe: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core ei ole käynnissä."
+
+[tgbot.messages]
+"cpuThreshold" = "🔴 Suorittimen kuormitus on {{ .Percent }}%, mikä ylittää rajan {{ .Threshold }}%"
+"selectUserFailed" = "❌ Virhe käyttäjän valinnassa!"
+"userSaved" = "✅ Telegram-käyttäjä tallennettu."
+"loginSuccess" = "✅ Kirjautuminen hallintapaneeliin onnistui.\r\n"
+"loginFailed" = "❗️ Kirjautumisvirhe hallintapaneeliin.\r\n"
+"report" = "🕰 Aikataulutetut raportit: {{ .RunTime }}\r\n"
+"datetime" = "⏰ Päivämäärä ja aika: {{ .DateTime }}\r\n"
+"hostname" = "💻 Isäntänimi: {{ .Hostname }}\r\n"
+"version" = "🚀 X-UI versio: {{ .Version }}\r\n"
+"xrayVersion" = "📡 Xray versio: {{ .XrayVersion }}\r\n"
+"ipv6" = "🌐 IPv6: {{ .IPv6 }}\r\n"
+"ipv4" = "🌐 IPv4: {{ .IPv4 }}\r\n"
+"ip" = "🌐 IP: {{ .IP }}\r\n"
+"ips" = "🔢 IP-osoitteet:\r\n{{ .IPs }}\r\n"
+"serverUpTime" = "⏳ Palvelimen käyttöaika: {{ .UpTime }} {{ .Unit }}\r\n"
+"serverLoad" = "📈 Palvelimen kuormitus: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n"
+"serverMemory" = "📋 Palvelimen muisti: {{ .Current }}/{{ .Total }}\r\n"
+"tcpCount" = "🔹 TCP-yhteyksien määrä: {{ .Count }}\r\n"
+"udpCount" = "🔸 UDP-yhteyksien määrä: {{ .Count }}\r\n"
+"traffic" = "🚦 Trafiikki: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n"
+"xrayStatus" = "ℹ️ Xray-tila: {{ .State }}\r\n"
+"username" = "👤 Käyttäjänimi: {{ .Username }}\r\n"
+"password" = "👤 Salasana: {{ .Password }}\r\n"
+"time" = "⏰ Aika: {{ .Time }}\r\n"
+"inbound" = "📍 Sisään tuleva liikenne: {{ .Remark }}\r\n"
+"port" = "🔌 Portti: {{ .Port }}\r\n"
+"expire" = "📅 Päättymisaika: {{ .Time }}\r\n"
+"expireIn" = "📅 Päättyy: {{ .Time }}\r\n"
+"active" = "💡 Aktiivinen: {{ .Enable }}\r\n"
+"enabled" = "🚨 Päällä: {{ .Enable }}\r\n"
+"online" = "🌐 Yhteyden tila: {{ .Status }}\r\n"
+"email" = "📧 Sähköposti: {{ .Email }}\r\n"
+"upload" = "🔼 Lataus: ↑{{ .Upload }}\r\n"
+"download" = "🔽 Lataus: ↓{{ .Download }}\r\n"
+"total" = "📊 Yhteensä: ↑↓{{ .UpDown }} / {{ .Total }}\r\n"
+"TGUser" = "👤 Telegram-käyttäjä: {{ .TelegramID }}\r\n"
+"exhaustedMsg" = "🚨 {{ .Type }} loppu:\r\n"
+"exhaustedCount" = "🚨 Loppuneiden {{ .Type }} määrä:\r\n"
+"onlinesCount" = "🌐 Asiakkaita online: {{ .Count }}\r\n"
+"disabled" = "🛑 Pois päältä: {{ .Disabled }}\r\n"
+"depleteSoon" = "🔜 Loppuminen pian: {{ .Deplete }}\r\n\r\n"
+"backupTime" = "🗄 Varmuuskopiointi aika: {{ .Time }}\r\n"
+"refreshedOn" = "\r\n📋🔄 Päivitetty: {{ .Time }}\r\n\r\n"
+"yes" = "✅ Kyllä"
+"no" = "❌ Ei"
+
+[tgbot.buttons]
+"closeKeyboard" = "❌ Sulje näppäimistö"
+"cancel" = "❌ Peruuta"
+"cancelReset" = "❌ Peruuta nollaus"
+"cancelIpLimit" = "❌ Peruuta IP-rajoitus"
+"confirmResetTraffic" = "✅ Vahvista liikenteen nollaus?"
+"confirmClearIps" = "✅ Vahvista IP-osoitteiden tyhjennys?"
+"confirmRemoveTGUser" = "✅ Vahvista Telegram-käyttäjän poistaminen?"
+"confirmToggle" = "✅ Vahvista käyttäjän päälle/pois kytkentä?"
+"dbBackup" = "Hanki DB varmuuskopio"
+"serverUsage" = "Palvelimen käyttö"
+"getInbounds" = "Hanki sisään tulevat yhteydet"
+"depleteSoon" = "Loppuu pian"
+"clientUsage" = "Hanki käyttötilasto"
+"onlines" = "Online-asiakkaat"
+"commands" = "Komennot"
+"refresh" = "🔄 Päivitä"
+"clearIPs" = "❌ Tyhjennä IP-osoitteet"
+"removeTGUser" = "❌ Poista Telegram-käyttäjä"
+"selectTGUser" = "👤 Valitse Telegram-käyttäjä"
+"selectOneTGUser" = "👤 Valitse Telegram-käyttäjä:"
+"resetTraffic" = "📈 Nollaa liikenne"
+"resetExpire" = "📅 Muuta vanhenemispäivämäärä"
+"ipLog" = "🔢 IP-loki"
+"ipLimit" = "🔢 IP-rajoitus"
+"setTGUser" = "👤 Aseta Telegram-käyttäjä"
+"toggle" = "🔘 Päällä/Pois"
+"custom" = "🔢 Räätälöity"
+"confirmNumber" = "✅ Vahvista: {{ .Num }}"
+"confirmNumberAdd" = "✅ Vahvista lisäys: {{ .Num }}"
+"limitTraffic" = "🚧 Liikenteen rajoitus"
+"getBanLogs" = "Bannien lokit"
+"allClients" = "Kaikki asiakkaat"
+
+[tgbot.answers]
+"successfulOperation" = "✅ Onnistunut!"
+"errorOperation" = "❗ Virhe operaatiossa."
+"getInboundsFailed" = "❌ Ei saatu sisään tulevia yhteyksiä."
+"getClientsFailed" = "❌ Ei saatu asiakkaita."
+"canceled" = "❌ {{ .Email }}: Toiminto peruutettu."
+"clientRefreshSuccess" = "✅ {{ .Email }}: Asiakas päivitetty onnistuneesti."
+"IpRefreshSuccess" = "✅ {{ .Email }}: IP-osoitteet päivitetty onnistuneesti."
+"TGIdRefreshSuccess" = "✅ {{ .Email }}: Asiakkaan Telegram-käyttäjä päivitetty onnistuneesti."
+"resetTrafficSuccess" = "✅ {{ .Email }}: Liikenne nollattu onnistuneesti."
+"setTrafficLimitSuccess" = "✅ {{ .Email }}: Liikenteen rajoitus tallennettu onnistuneesti."
+"expireResetSuccess" = "✅ {{ .Email }}: Vanhenemispäivä nollattu onnistuneesti."
+"resetIpSuccess" = "✅ {{ .Email }}: IP-rajoitus ({{ .Count }}) tallennettu onnistuneesti."
+"clearIpSuccess" = "✅ {{ .Email }}: IP-osoitteet tyhjennetty onnistuneesti."
+"getIpLog" = "✅ {{ .Email }}: Saatiin IP-loki."
+"getUserInfo" = "✅ {{ .Email }}: Saatiin Telegram-käyttäjän tiedot."
+"removedTGUserSuccess" = "✅ {{ .Email }}: Telegram-käyttäjä poistettu onnistuneesti."
+"enableSuccess" = "✅ {{ .Email }}: Käynnistetty onnistuneesti."
+"disableSuccess" = "✅ {{ .Email }}: Sammutettu onnistuneesti."
+"askToAddUserId" = "Konfiguraatiotasi ei löytynyt!\r\nOle hyvä ja pyydä ylläpitäjää lisäämään Telegram-käyttäjäsi ID konfiguraatioihisi.\r\n\r\nSinun käyttäjä-ID:si: {{ .TgUserID }}
"
+"chooseClient" = "Valitse asiakas yhdistettäväksi {{ .Inbound }}"
+"chooseInbound" = "Valitse sisään tuleva yhteys"
diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml
index 85f8f967..f3c2938c 100644
--- a/web/translation/translate.id_ID.toml
+++ b/web/translation/translate.id_ID.toml
@@ -44,6 +44,7 @@
"monitor" = "IP Pemantauan"
"certificate" = "Sertifikat Digital"
"fail" = "Gagal"
+"comment" = "Komentar"
"success" = "Berhasil"
"getVersion" = "Dapatkan Versi"
"install" = "Instal"
diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml
index 01413171..4d6fc5d3 100644
--- a/web/translation/translate.ja_JP.toml
+++ b/web/translation/translate.ja_JP.toml
@@ -44,6 +44,7 @@
"monitor" = "監視"
"certificate" = "証明書"
"fail" = "失敗"
+"comment" = "コメント"
"success" = "成功"
"getVersion" = "バージョン取得"
"install" = "インストール"
diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml
index 5effdecb..ac16f160 100644
--- a/web/translation/translate.pt_BR.toml
+++ b/web/translation/translate.pt_BR.toml
@@ -44,6 +44,7 @@
"monitor" = "IP de Escuta"
"certificate" = "Certificado Digital"
"fail" = "Falhou"
+"comment" = "Comentário"
"success" = "Com Sucesso"
"getVersion" = "Obter Versão"
"install" = "Instalar"
diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml
index a995f29c..680c8663 100644
--- a/web/translation/translate.ru_RU.toml
+++ b/web/translation/translate.ru_RU.toml
@@ -44,13 +44,14 @@
"monitor" = "Слушать IP"
"certificate" = "Цифровой сертификат"
"fail" = "Неудачно"
+"comment" = "Комментарий"
"success" = "Успешно"
"getVersion" = "Узнать версию"
"install" = "Установка"
"clients" = "Клиенты"
"usage" = "Использование"
"secretToken" = "Секретный токен"
-"remained" = "остались"
+"remained" = "Остаток"
"security" = "Безопасность"
"secAlertTitle" = "Предупреждение системы безопасности"
"secAlertSsl" = "Это соединение не защищено. Пожалуйста, воздержитесь от ввода конфиденциальной информации до тех пор, пока не будет активирован TLS для защиты данных"
diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml
index bee64b0f..fe70bd53 100644
--- a/web/translation/translate.tr_TR.toml
+++ b/web/translation/translate.tr_TR.toml
@@ -44,6 +44,7 @@
"monitor" = "Dinleme IP"
"certificate" = "Dijital Sertifika"
"fail" = "Başarısız"
+"comment" = "Yorum"
"success" = "Başarılı"
"getVersion" = "Sürümü Al"
"install" = "Yükle"
diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml
index 791d2154..2ad92f5b 100644
--- a/web/translation/translate.uk_UA.toml
+++ b/web/translation/translate.uk_UA.toml
@@ -44,6 +44,7 @@
"monitor" = "Слухати IP"
"certificate" = "Цифровий сертифікат"
"fail" = "Помилка"
+"comment" = "Коментар"
"success" = "Успішно"
"getVersion" = "Отримати версію"
"install" = "Встановити"
diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml
index cd750891..507caf41 100644
--- a/web/translation/translate.vi_VN.toml
+++ b/web/translation/translate.vi_VN.toml
@@ -44,6 +44,7 @@
"monitor" = "Listening IP"
"certificate" = "Chứng chỉ số"
"fail" = "Thất bại"
+"comment" = "Bình luận"
"success" = "Thành công"
"getVersion" = "Lấy phiên bản"
"install" = "Cài đặt"
diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml
index b5f5cce1..d79522d1 100644
--- a/web/translation/translate.zh_CN.toml
+++ b/web/translation/translate.zh_CN.toml
@@ -44,6 +44,7 @@
"monitor" = "监听"
"certificate" = "数字证书"
"fail" = "失败"
+"comment" = "评论"
"success" = "成功"
"getVersion" = "获取版本"
"install" = "安装"
diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml
index 466b2b82..6c08d9e2 100644
--- a/web/translation/translate.zh_TW.toml
+++ b/web/translation/translate.zh_TW.toml
@@ -44,6 +44,7 @@
"monitor" = "監聽"
"certificate" = "憑證"
"fail" = "失敗"
+"comment" = "評論"
"success" = "成功"
"getVersion" = "獲取版本"
"install" = "安裝"