diff --git a/framework/messages/config.php b/framework/messages/config.php
index 4ce3dc0..299e2ef 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', 'et', 'fa-IR', 'fi', 'fr', 'hu', 'it', 'ja', 'kk', 'ko', 'lt', 'lv', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'th', 'uk', 'vi', 'zh-CN'],
+ 'languages' => ['ar', 'bg', 'ca', 'da', 'de', 'el', 'es', 'et', 'fa-IR', 'fi', 'fr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt', 'lv', 'nl', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sr', 'sr-Latn', 'th', '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/id/yii.php b/framework/messages/id/yii.php
new file mode 100644
index 0000000..b180195
--- /dev/null
+++ b/framework/messages/id/yii.php
@@ -0,0 +1,107 @@
+ 'View "{name}" yang diminta tidak ditemukan.',
+ 'You are requesting with an invalid access token.' => 'Anda melakukan permintaan dengan akses token yang invalid.',
+ '(not set)' => '(belum diset)',
+ 'An internal server error occurred.' => 'Terjadi kesalahan internal server.',
+ 'Are you sure you want to delete this item?' => 'Apakah Anda yakin ingin menghapus ini?',
+ 'Delete' => 'Hapus',
+ 'Error' => 'Kesalahan',
+ 'File upload failed.' => 'Mengunggah berkas gagal.',
+ 'Home' => 'Beranda',
+ 'Invalid data received for parameter "{param}".' => 'Data yang diterima invalid untuk parameter "{param}"',
+ 'Login Required' => 'Diperlukan login',
+ 'Missing required arguments: {params}' => 'Argumen yang diperlukan tidak ada: {params}',
+ 'Missing required parameters: {params}' => 'Parameter yang diperlukan tidak ada: {params}',
+ 'No' => 'Tidak',
+ 'No help for unknown command "{command}".' => 'Tidak ada bantuan untuk perintah yang tidak diketahui "{command}".',
+ 'No help for unknown sub-command "{command}".' => 'Tidak ada bantuan untuk sub perintah yang tidak diketahui "{command}".',
+ 'No results found.' => 'Tidak ada hasil yang ditemukan.',
+ 'Only files with these MIME types are allowed: {mimeTypes}.' => 'Hanya berkas dengan tipe MIME ini yang diperbolehkan: {mimeTypes}.',
+ 'Only files with these extensions are allowed: {extensions}.' => 'Hanya berkas dengan ekstensi ini yang diperbolehkan: {extensions}.',
+ 'Page not found.' => 'Halaman tidak ditemukan.',
+ 'Please fix the following errors:' => 'Silahkan perbaiki kesalahan berikut:',
+ 'Please upload a file.' => 'Silahkan mengunggah berkas.',
+ 'Showing {begin, number}-{end, number} of {totalCount, number} {totalCount, plural, one{item} other{items}}.' => 'Menampilkan {begin, number}-{end, number} dari {totalCount, number} {totalCount, plural, one{element} other{elements}}.',
+ 'The file "{file}" is not an image.' => 'File bukan berupa gambar.',
+ 'The file "{file}" is too big. Its size cannot exceed {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Berkas "{file}" terlalu besar. Ukurannya tidak boleh lebih besar dari {limit, number} {limit, plural, one{byte} other{bytes}}.',
+ 'The file "{file}" is too small. Its size cannot be smaller than {limit, number} {limit, plural, one{byte} other{bytes}}.' => 'Berkas "{file}" terlalu kecil. Ukurannya tidak boleh lebih kecil dari {limit, number} {limit, plural, one{byte} other{bytes}}.',
+ 'The format of {attribute} is invalid.' => 'Format dari {attribute} tidak valid.',
+ 'The image "{file}" is too large. The height cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Gambar "{file}" terlalu besar. Tingginya tidak boleh lebih besar dari {limit, number} {limit, plural, one{píxel} other{píxels}}.',
+ 'The image "{file}" is too large. The width cannot be larger than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Gambar "{file}" terlalu besar. Lebarnya tidak boleh lebih besar dari {limit, number} {limit, plural, one{píxel} other{píxels}}.',
+ 'The image "{file}" is too small. The height cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Gambar "{file}" terlalu kecil. Tingginya tidak boleh lebih kecil dari {limit, number} {limit, plural, one{píxel} other{píxels}}.',
+ 'The image "{file}" is too small. The width cannot be smaller than {limit, number} {limit, plural, one{pixel} other{pixels}}.' => 'Gambar "{file}" terlalu kecil. Lebarnya tidak boleh lebih kecil dari {limit, number} {limit, plural, one{píxel} other{píxels}}.',
+ 'The verification code is incorrect.' => 'Kode verifikasi tidak benar.',
+ 'Total {count, number} {count, plural, one{item} other{items}}.' => 'Total {count, number} {count, plural, one{element} other{elements}}.',
+ 'Unable to verify your data submission.' => 'Tidak dapat memverifikasi pengiriman data Anda.',
+ 'Unknown command "{command}".' => 'Perintah tidak dikenal "{command}".',
+ 'Unknown option: --{name}' => 'Opsi tidak dikenal: --{name}',
+ 'Update' => 'Ubah',
+ 'View' => 'Lihat',
+ 'Yes' => 'Ya',
+ 'You are not allowed to perform this action.' => 'Anda tidak diperbolehkan untuk melakukan aksi ini.',
+ 'You can upload at most {limit, number} {limit, plural, one{file} other{files}}.' => 'Anda dapat mengunggah paling banyak {limit, number} {limit, plural, one{arxiu} other{arxius}}.',
+ 'in {delta, plural, =1{a day} other{# days}}' => 'dalam {delta, plural, =1{un dia} other{# dies}}',
+ 'in {delta, plural, =1{a minute} other{# minutes}}' => 'dalam {delta, plural, =1{un minut} other{# minuts}}',
+ 'in {delta, plural, =1{a month} other{# months}}' => 'dalam {delta, plural, =1{un mes} other{# mesos}}',
+ 'in {delta, plural, =1{a second} other{# seconds}}' => 'dalam {delta, plural, =1{un segon} other{# segons}}',
+ 'in {delta, plural, =1{a year} other{# years}}' => 'dalam {delta, plural, =1{un any} other{# anys}}',
+ 'in {delta, plural, =1{an hour} other{# hours}}' => 'dalam {delta, plural, =1{una hora} other{# hores}}',
+ 'the input value' => 'nilai input',
+ '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" telah diambil.',
+ '{attribute} cannot be blank.' => '{attribute} tidak boleh kosong.',
+ '{attribute} is invalid.' => '{attribute} tidak valid.',
+ '{attribute} is not a valid URL.' => '{attribute} bukan URL yang valid.',
+ '{attribute} is not a valid email address.' => '{attribute} bukan alamat email yang valid.',
+ '{attribute} must be "{requiredValue}".' => '{attribute} harus berupa "{requiredValue}".',
+ '{attribute} must be a number.' => '{attribute} harus berupa angka.',
+ '{attribute} must be a string.' => '{attribute} harus berupa string.',
+ '{attribute} must be an integer.' => '{attribute} harus berupa integer.',
+ '{attribute} must be either "{true}" or "{false}".' => '{attribute} harus berupa "{true}" atau "{false}".',
+ '{attribute} must be greater than "{compareValue}".' => '{attribute} harus lebih besar dari "{compareValue}".',
+ '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} harus lebih besar dari atau sama dengan "{compareValue}".',
+ '{attribute} must be less than "{compareValue}".' => '{attribute} harus lebih kecil dari "{compareValue}".',
+ '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} harus lebih kecil dari atau sama dengan "{compareValue}".',
+ '{attribute} must be no greater than {max}.' => '{attribute} harus tidak boleh lebih besar dari {max}.',
+ '{attribute} must be no less than {min}.' => '{attribute} harus tidak boleh lebih kecil dari {min}.',
+ '{attribute} must be repeated exactly.' => '{attribute} harus diulang sama persis.',
+ '{attribute} must not be equal to "{compareValue}".' => '{attribute} harus tidak boleh sama dengan "{compareValue}".',
+ '{attribute} should contain at least {min, number} {min, plural, one{character} other{characters}}.' => '{attribute} harus memiliki paling sedikit {min, number} {min, plural, one{lletra} other{lletres}}.',
+ '{attribute} should contain at most {max, number} {max, plural, one{character} other{characters}}.' => '{attribute} harus memiliki paling banyak {max, number} {max, plural, one{lletra} other{lletres}}.',
+ '{attribute} should contain {length, number} {length, plural, one{character} other{characters}}.' => '{attribute} harus memiliki {length, number} {length, plural, one{lletra} other{lletres}}.',
+ '{delta, plural, =1{a day} other{# days}} ago' => '{delta, plural, =1{un dia} other{# dies}} yang lalu',
+ '{delta, plural, =1{a minute} other{# minutes}} ago' => '{delta, plural, =1{un minut} other{# minuts}} yang lalu',
+ '{delta, plural, =1{a month} other{# months}} ago' => '{delta, plural, =1{un mes} other{# mesos}} yang lalu',
+ '{delta, plural, =1{a second} other{# seconds}} ago' => '{delta, plural, =1{un segon} other{# segons}} yang lalu',
+ '{delta, plural, =1{a year} other{# years}} ago' => '{delta, plural, =1{un any} other{# anys}} yang lalu',
+ '{delta, plural, =1{an hour} other{# hours}} ago' => '{delta, plural, =1{una hora} other{# hores}} yang lalu',
+ '{n, plural, =1{# byte} other{# bytes}}' => '{n, plural, =1{# byte} other{# bytes}}',
+ '{n, plural, =1{# gigabyte} other{# gigabytes}}' => '{n, plural, =1{# gigabyte} other{# gigabytes}}',
+ '{n, plural, =1{# kilobyte} other{# kilobytes}}' => '{n, plural, =1{# kilobyte} other{# kilobytes}}',
+ '{n, plural, =1{# megabyte} other{# megabytes}}' => '{n, plural, =1{# megabyte} other{# megabytes}}',
+ '{n, plural, =1{# petabyte} other{# petabytes}}' => '{n, plural, =1{# petabyte} other{# petabytes}}',
+ '{n, plural, =1{# terabyte} other{# terabytes}}' => '{n, plural, =1{# terabyte} other{# terabytes}}',
+ '{n} B' => '{n} B',
+ '{n} GB' => '{n} GB',
+ '{n} KB' => '{n} KB',
+ '{n} MB' => '{n} MB',
+ '{n} PB' => '{n} PB',
+ '{n} TB' => '{n} TB',
+];