diff --git a/framework/messages/config.php b/framework/messages/config.php
index c9f3279..1ddab5a 100644
--- a/framework/messages/config.php
+++ b/framework/messages/config.php
@@ -7,7 +7,7 @@ return [
     'messagePath' => __DIR__,
     // array, required, list of language codes that the extracted messages
     // should be translated to. For example, ['zh-CN', 'de'].
-    'languages' => ['ar', 'bg', 'ca', 'da', 'de', 'el', 'es', 'fa-IR', 'fi', 'fr', 'hu', 'it', 'ja', 'kk', 'lt', 'lv', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'uk', 'vi', 'zh-CN'],
+    'languages' => ['ar', 'bg', 'ca', 'da', 'de', 'el', 'es', 'et', 'fa-IR', 'fi', 'fr', 'hu', 'it', 'ja', 'kk', 'lt', 'lv', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'uk', 'vi', 'zh-CN'],
     // string, the name of the function for translating messages.
     // Defaults to 'Yii::t'. This is used as a mark to find the messages to be
     // translated. You may use a string for single function name or an array for
diff --git a/framework/messages/et/yii.php b/framework/messages/et/yii.php
new file mode 100644
index 0000000..901eae8
--- /dev/null
+++ b/framework/messages/et/yii.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Message translations.
+ *
+ * This file is automatically generated by 'yii message' command.
+ * It contains the localizable messages extracted from source code.
+ * You may modify this file by translating the extracted messages.
+ *
+ * Each array element represents the translation (value) of a message (key).
+ * If the value is empty, the message is considered as not translated.
+ * Messages that no longer need translation will have their translations
+ * enclosed between a pair of '@@' marks.
+ *
+ * Message string can be used with plural forms format. Check i18n section
+ * of the guide for details.
+ *
+ * NOTE: this file must be saved in UTF-8 encoding.
+ */
+return array (
+  '(not set)' => '(määramata)',
+  'An internal server error occurred.' => 'Ilmnes serveri sisemine viga.',
+  'Are you sure you want to delete this item?' => 'Kas olete kindel, et soovite seda kustutada?',
+  'Delete' => 'Kustuta',
+  'Error' => 'Viga',
+  'File upload failed.' => 'Faili üleslaadimine ebaõnnestus.',
+  'Home' => 'Avaleht',
+  'Invalid data received for parameter "{param}".' => 'Vastu võeti vigased andmed parameetri "{param}" jaoks.',
+  'Login Required' => 'Vajab sisselogimist',
+  'Missing required arguments: {params}' => 'Puuduvad nõutud argumendid: {params}',
+  'Missing required parameters: {params}' => 'Puuduvad nõutud parameetrid: {params}',
+  'No' => 'Ei',
+  'No help for unknown command "{command}".' => 'Abi puudub tundmatu käsu "{command}" jaoks.',
+  'No help for unknown sub-command "{command}".' => 'Abi puudub tundmatu alamkäsu "{command}" jaoks.',
+  'No results found.' => 'Ei leitud ühtegi tulemust.',
+  'Only files with these MIME types are allowed: {mimeTypes}.' => 'Lubatud on ainult nende MIME tüüpidega failid: {mimeTypes}.',
+  'Only files with these extensions are allowed: {extensions}.' => 'Lubatud on ainult nende faililaienditega failid: {extensions}.',
+  'Page not found.' => 'Lehekülge ei leitud.',
+  'Please fix the following errors:' => 'Palun parandage järgnevad vead:',
+  'Please upload a file.' => 'Palun laadige fail üles.',
+  'Showing <b>{begin, number}-{end, number}</b> of <b>{totalCount, number}</b> {totalCount, plural, one{item} other{items}}.' => 'Näitan <b>{begin, number}-{end, number}</b> / <b>{totalCount, number}</b>',
+  'The file "{file}" is not an image.' => 'Fail "{file}" ei ole pilt.',
+  'The file "{file}" is too big. Its size cannot exceed {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Fail "{file}" on liiga suur. Suurus ei tohi ületada {limit, number} {limit, plural, one{baiti} other{baiti}}.',
+  'The file "{file}" is too small. Its size cannot be smaller than {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Fail "{file}" on liiga väike. Suurus ei tohi olla väiksem kui {limit, number} {limit, plural, one{baiti} other{baiti}}.',
+  'The format of {attribute} is invalid.' => '{attribute} on sobimatus vormingus.',
+  'The image "{file}" is too large. The height cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Pilt "{file}" on liiga suur. Kõrgus ei tohi olla suurem kui {limit, number} {limit, plural, one{piksel} other{pikslit}}.',
+  'The image "{file}" is too large. The width cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Pilt "{file}" on liiga suur. Laius ei tohi olla suurem kui {limit, number} {limit, plural, one{piksel} other{pikslit}}.',
+  'The image "{file}" is too small. The height cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Pilt "{file}" on liiga väike. Kõrgus ei tohi olla väiksem kui {limit, number} {limit, plural, one{piksel} other{pikslit}}.',
+  'The image "{file}" is too small. The width cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Pilt "{file}" on liiga väike. Laius ei tohi olla väiksem kui {limit, number} {limit, plural, one{piksel} other{pikslit}}.',
+  'The requested view "{name}" was not found.' => 'Soovitud vaadet "{name}" ei leitud.',
+  'The verification code is incorrect.' => 'Kontrollkood ei ole õige.',
+  'Total <b>{count, number}</b> {count, plural, one{item} other{items}}.' => 'Kokku <b>{count, number}</b>.',
+  'Unable to verify your data submission.' => 'Ei suuda teie andmesööte õigsuses veenduda.',
+  'Unknown command "{command}".' => 'Tundmatu käsklus "{command}".',
+  'Unknown option: --{name}' => 'Tundmatu valik: --{name}',
+  'Update' => 'Muuda',
+  'View' => 'Vaata',
+  'Yes' => 'Jah',
+  'You are not allowed to perform this action.' => 'Teil pole õigust seda toimingut sooritada.',
+  'You can upload at most {limit, number} {limit, plural, one{file} other{files}}.' => 'Saate üles laadida kõige rohkem {limit, number} {limit, plural, one{faili} other{faili}}.',
+  'in {delta, plural, =1{a day} other{# days}}' => '{delta, plural, =1{ühe päeva} other{# päeva}} pärast',
+  'in {delta, plural, =1{a minute} other{# minutes}}' => '{delta, plural, =1{ühe minuti} other{# minuti}} pärast',
+  'in {delta, plural, =1{a month} other{# months}}' => '{delta, plural, =1{ühe kuu} other{# kuu}} pärast',
+  'in {delta, plural, =1{a second} other{# seconds}}' => '{delta, plural, =1{ühe sekundi} other{# sekundi}} pärast',
+  'in {delta, plural, =1{a year} other{# years}}' => '{delta, plural, =1{ühe aasta} other{# aasta}} pärast',
+  'in {delta, plural, =1{an hour} other{# hours}}' => '{delta, plural, =1{ühe tunni} other{# tunni}} pärast',
+  'the input value' => 'sisendväärtus',
+  '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" on juba kasutuses.',
+  '{attribute} cannot be blank.' => '{attribute} ei tohi olla tühi.',
+  '{attribute} is invalid.' => '{attribute} on vigane.',
+  '{attribute} is not a valid URL.' => '{attribute} ei ole korrektne URL.',
+  '{attribute} is not a valid email address.' => '{attribute} ei ole korrektne e-posti aadress.',
+  '{attribute} must be "{requiredValue}".' => '{attribute} peab olema "{requiredValue}".',
+  '{attribute} must be a number.' => '{attribute} peab olema number.',
+  '{attribute} must be a string.' => '{attribute} peab olema sõne.',
+  '{attribute} must be an integer.' => '{attribute} peab olema täisarv.',
+  '{attribute} must be either "{true}" or "{false}".' => '{attribute} peab olema kas "{true}" või "{false}".',
+  '{attribute} must be greater than "{compareValue}".' => '{attribute} peab olema suurem kui "{compareValue}".',
+  '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} peab olema suurem või võrdne "{compareValue}".',
+  '{attribute} must be less than "{compareValue}".' => '{attribute} peab olema väiksem kui "{compareValue}".',
+  '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} peab olema väiksem või võrdne "{compareValue}".',
+  '{attribute} must be no greater than {max}.' => '{attribute} ei tohi olla suurem kui {max}.',
+  '{attribute} must be no less than {min}.' => '{attribute} ei tohi olla väiksem kui {min}.',
+  '{attribute} must be repeated exactly.' => '{attribute} peab täpselt kattuma.',
+  '{attribute} must not be equal to "{compareValue}".' => '{attribute} ei tohi olla "{compareValue}".',
+  '{attribute} should contain at least {min, number} {min, plural, one{character} other{characters}}.' => '{attribute} peab sisaldama vähemalt {min, number} {min, plural, one{märki} other{märki}}.',
+  '{attribute} should contain at most {max, number} {max, plural, one{character} other{characters}}.' => '{attribute} tohib sisaldada maksimaalselt {max, number} {max, plural, one{märki} other{märki}}.',
+  '{attribute} should contain {length, number} {length, plural, one{character} other{characters}}.' => '{attribute} peab sisaldama {length, number} {length, plural, one{märki} other{märki}}.',
+  '{delta, plural, =1{a day} other{# days}} ago' => 'delta, plural, =1{üks päev} other{# päeva}} tagasi',
+  '{delta, plural, =1{a minute} other{# minutes}} ago' => '{delta, plural, =1{üks minut} other{# minutit}} tagasi',
+  '{delta, plural, =1{a month} other{# months}} ago' => '{delta, plural, =1{kuu aega} other{# kuud}} tagasi',
+  '{delta, plural, =1{a second} other{# seconds}} ago' => '{delta, plural, =1{üks sekund} other{# sekundit}} tagasi',
+  '{delta, plural, =1{a year} other{# years}} ago' => '{delta, plural, =1{aasta} other{# aastat}} tagasi',
+  '{delta, plural, =1{an hour} other{# hours}} ago' => '{delta, plural, =1{tund aega} other{# tundi}} tagasi',
+  '{n, plural, =1{# byte} other{# bytes}}' => '{n, plural, =1{# bait} other{# baiti}}',
+  '{n, plural, =1{# gigabyte} other{# gigabytes}}' => '{n, plural, =1{# gigabait} other{# gigabaiti}}',
+  '{n, plural, =1{# kilobyte} other{# kilobytes}}' => '{n, plural, =1{# kilobait} other{# kilobaiti}}',
+  '{n, plural, =1{# megabyte} other{# megabytes}}' => '{n, plural, =1{# megabait} other{# megabaiti}}',
+  '{n, plural, =1{# petabyte} other{# petabytes}}' => '{n, plural, =1{# petabait} other{# petabaiti}}',
+  '{n, plural, =1{# terabyte} other{# terabytes}}' => '{n, plural, =1{# terabait} other{# terabaiti}}',
+  '{n} B' => '{n} B',
+  '{n} GB' => '{n} GB',
+  '{n} KB' => '{n} KB',
+  '{n} MB' => '{n} MB',
+  '{n} PB' => '{n} PB',
+  '{n} TB' => '{n} TB',
+);