diff --git a/guide/id/caching/data.md b/guide/id/caching/data.md
new file mode 100644
index 00000000..f6c541f4
--- /dev/null
+++ b/guide/id/caching/data.md
@@ -0,0 +1,184 @@
+# Caching data
+
+Caching data adalah tentang menyimpan beberapa variabel PHP ke dalam cache dan mengambilnya kembali dari cache.
+Ini juga menjadi fondasi untuk fitur caching yang lebih lanjut, seperti [caching halaman](page.md).
+
+Untuk menggunakan cache, pasang paket [yiisoft/cache](https://github.com/yiisoft/cache):
+
+```shell
+composer require yiisoft/cache
+```
+
+Kode berikut adalah pola penggunaan umum caching data, di mana `$cache` merujuk ke
+instance `Cache` dari paket tersebut:
+
+```php
+public function getTopProducts(\Yiisoft\Cache\CacheInterface $cache): array
+{
+ $key = ['top-products', $count = 10];
+
+ // Try retrieving $data from cache.
+ $data = $cache->getOrSet($key, function (\Psr\SimpleCache\CacheInterface $cache) use ($count) {
+ // Can't find $data in cache, calculate it from scratch.
+ return getTopProductsFromDatabase($count);
+ }, 3600);
+
+ return $data;
+}
+```
+
+Ketika cache memiliki data yang terkait dengan `$key`, ia akan mengembalikan nilai yang di-cache.
+Jika tidak, ia akan mengeksekusi fungsi anonim yang diberikan untuk menghitung nilai yang akan di-cache dan dikembalikan.
+
+Jika fungsi anonim membutuhkan beberapa data dari scope luar, Anda dapat meneruskannya menggunakan pernyataan `use`.
+
+## Cache handlers
+
+Layanan cache menggunakan handler cache yang kompatibel dengan [PSR-16](https://www.php-fig.org/psr/psr-16/) yang merepresentasikan berbagai
+penyimpanan cache, seperti memori, berkas, dan basis data.
+
+Yii menyediakan handler berikut:
+
+- `NullCache` — placeholder cache yang tidak melakukan caching nyata. Tujuan handler ini adalah menyederhanakan
+ kode yang perlu memeriksa ketersediaan cache. Misalnya, selama pengembangan atau jika server tidak memiliki
+ dukungan cache, Anda dapat mengonfigurasi layanan cache untuk menggunakan handler ini.
+ Saat Anda mengaktifkan dukungan cache nyata, Anda dapat beralih menggunakan handler cache yang sesuai.
+ Pada kedua kasus, Anda dapat menggunakan kode yang sama tanpa pemeriksaan tambahan.
+- `ArrayCache` — menyediakan caching hanya untuk permintaan saat ini dengan menyimpan nilai dalam sebuah array.
+- [APCu](https://github.com/yiisoft/cache-apcu) — menggunakan ekstensi PHP [APC](https://secure.php.net/manual/en/book.apc.php).
+ Ini bisa dianggap sebagai opsi tercepat saat berurusan dengan cache untuk aplikasi terpusat (mis., satu
+ server, tanpa load balancer khusus, dll.).
+- [Database](https://github.com/yiisoft/cache-db) — menggunakan tabel basis data untuk menyimpan data yang di-cache.
+- [File](https://github.com/yiisoft/cache-file) — menggunakan berkas standar untuk menyimpan data yang di-cache. Ini sangat cocok
+ untuk menyimpan potongan data besar, seperti konten halaman.
+- [Memcached](https://github.com/yiisoft/cache-memcached) — menggunakan ekstensi PHP [memcached](https://secure.php.net/manual/en/book.memcached.php).
+ Ini bisa dianggap sebagai opsi tercepat saat berurusan dengan cache di aplikasi terdistribusi
+ (mis., beberapa server, load balancer, dll.)
+- [Wincache](https://github.com/yiisoft/cache-wincache) — menggunakan ekstensi PHP [WinCache](https://iis.net/downloads/microsoft/wincache-extension)
+ ([lihat juga](https://secure.php.net/manual/en/book.wincache.php)).
+
+[Anda dapat menemukan lebih banyak handler di packagist.org](https://packagist.org/providers/psr/simple-cache-implementation).
+
+> [!TIP]
+> Anda dapat menggunakan penyimpanan cache yang berbeda dalam aplikasi yang sama. Strategi umum adalah:
+> - Gunakan penyimpanan cache berbasis memori untuk menyimpan data kecil tetapi sering digunakan (mis., statistik)
+> - Gunakan penyimpanan cache berbasis berkas atau basis data untuk menyimpan data besar dan jarang digunakan (mis., konten halaman)
+
+Handler cache biasanya disetel dalam [dependency injection container](../concept/di-container.md) sehingga dapat
+dikonfigurasi dan diakses secara global.
+
+Karena semua handler cache mendukung kumpulan API yang sama, Anda dapat menukar handler cache yang digunakan
+dengan yang lain. Anda dapat melakukannya dengan mengonfigurasi ulang aplikasi tanpa mengubah kode yang menggunakan cache.
+
+### Cache keys
+
+Sebuah kunci mengidentifikasi secara unik setiap item data yang disimpan di cache. Saat Anda menyimpan sebuah item data,
+Anda harus menentukan kunci untuknya. Nantinya, ketika Anda mengambil item data tersebut, Anda perlu memberikan
+kunci yang sesuai.
+
+Anda dapat menggunakan string atau nilai arbitrer sebagai kunci cache. Ketika kunci bukan string, ia akan
+diserialisasi menjadi string secara otomatis.
+
+Strategi umum dalam mendefinisikan kunci cache adalah menyertakan semua faktor penentu dalam bentuk array.
+
+Ketika aplikasi yang berbeda menggunakan penyimpanan cache yang sama, Anda harus menentukan prefiks kunci cache yang unik
+untuk setiap aplikasi guna menghindari konflik kunci cache.
+Anda dapat melakukannya dengan menggunakan dekorator `\Yiisoft\Cache\PrefixedCache`:
+
+```php
+$arrayCacheWithPrefix = new \Yiisoft\Cache\PrefixedCache(new \Yiisoft\Cache\ArrayCache(), 'myapp_');
+$cache = new \Yiisoft\Cache\Cache($arrayCacheWithPrefix);
+```
+
+### Cache expiration
+
+Item data yang disimpan di cache akan tetap di sana selamanya kecuali dihapus karena beberapa kebijakan
+caching. Misalnya, ruang cache penuh dan penyimpanan cache menghapus data tertua.
+Untuk mengubah perilaku ini, Anda dapat menyetel parameter TTL saat memanggil metode untuk menyimpan item data:
+
+```php
+$ttl = 3600;
+$data = $cache->getOrSet($key, function (\Psr\SimpleCache\CacheInterface $cache) use ($count) {
+return getTopProductsFromDatabase($count);
+}, $ttl);
+```
+
+Parameter `$ttl` menunjukkan berapa detik item data dapat tetap valid di cache. Ketika Anda mengambil
+item data tersebut, jika waktu kedaluwarsanya telah lewat, metode akan mengeksekusi fungsi dan menyetel nilai yang dihasilkan
+ke dalam cache.
+
+Anda dapat menyetel TTL bawaan untuk cache:
+
+```php
+$cache = new \Yiisoft\Cache\Cache($arrayCache, 60 * 60); // 1 hour
+```
+
+Selain itu, Anda dapat menginvalidasi kunci cache secara eksplisit:
+
+```php
+$cache->remove($key);
+```
+
+### Invalidation dependencies
+
+Selain pengaturan kedaluwarsa, perubahan pada yang disebut sebagai **ketergantungan invalidasi** juga dapat menginvalidasi item data yang di-cache.
+Misalnya, `\Yiisoft\Cache\Dependency\FileDependency` merepresentasikan ketergantungan pada waktu modifikasi sebuah berkas.
+Ketika ketergantungan ini berubah, itu berarti ada sesuatu yang memodifikasi berkas terkait.
+Akibatnya, konten berkas yang usang yang ditemukan di cache harus diinvalidasi.
+
+Ketergantungan cache adalah objek dari kelas turunan `\Yiisoft\Cache\Dependency\Dependency`. Ketika Anda
+menyimpan sebuah item data ke cache, Anda dapat menyertakan objek ketergantungan cache terkait. Contohnya,
+
+```php
+/**
+ * @var callable $callable
+ * @var \Yiisoft\Cache\CacheInterface $cache
+ */
+
+use Yiisoft\Cache\Dependency\TagDependency;
+
+// Set many cache values marking both with a tag.
+$cache->getOrSet('item_42_price', $callable, null, new TagDependency('item_42'));
+$cache->getOrSet('item_42_total', $callable, 3600, new TagDependency('item_42'));
+
+// Trigger invalidation by tag.
+TagDependency::invalidate($cache, 'item_42');
+```
+
+Berikut ringkasan ketergantungan cache yang tersedia:
+
+- `\Yiisoft\Cache\Dependency\ValueDependency`: menginvalidasi cache ketika nilai yang ditentukan berubah.
+- `\Yiisoft\Cache\Dependency\CallbackDependency`: menginvalidasi cache ketika hasil dari callback PHP yang ditentukan
+ berbeda.
+- `\Yiisoft\Cache\Dependency\FileDependency`: menginvalidasi cache ketika waktu modifikasi terakhir berkas berbeda.
+- `\Yiisoft\Cache\Dependency\TagDependency`: mengaitkan item data yang di-cache dengan satu atau banyak tag. Anda dapat menginvalidasi
+ item data yang di-cache dengan tag tertentu dengan memanggil `TagDependency::invalidate()`.
+
+Anda dapat mengombinasikan banyak ketergantungan menggunakan `\Yiisoft\Cache\Dependency\AnyDependency` atau `\Yiisoft\Cache\Dependency\AllDependencies`.
+
+Untuk mengimplementasikan ketergantungan Anda sendiri, turunkan dari `\Yiisoft\Cache\Dependency\Dependency`.
+
+### Cache stampede prevention
+
+[Cache stampede](https://en.wikipedia.org/wiki/Cache_stampede) adalah jenis kegagalan berantai yang dapat terjadi ketika sistem komputasi paralel masif
+dengan mekanisme cache berada di bawah beban tinggi.
+Perilaku ini terkadang juga disebut dog-piling.
+
+`\Yiisoft\Cache\Cache` menggunakan algoritma bawaan "Probably early expiration" yang mencegah cache stampede.
+Algoritma ini secara acak memalsukan cache miss untuk satu pengguna sementara yang lain masih dilayani nilai dari cache.
+Anda dapat mengontrol perilakunya dengan parameter opsional kelima dari `getOrSet()`, yaitu nilai float bernama `$beta`.
+Secara bawaan, beta adalah `1.0`, yang biasanya sudah cukup.
+Semakin tinggi nilainya, semakin awal cache akan dibuat ulang.
+
+```php
+/**
+ * @var mixed $key
+ * @var callable $callable
+ * @var \DateInterval $ttl
+ * @var \Yiisoft\Cache\CacheInterface $cache
+ * @var \Yiisoft\Cache\Dependency\Dependency $dependency
+ */
+
+$beta = 2.0;
+$cache->getOrSet($key, $callable, $ttl, $dependency, $beta);
+```
diff --git a/guide/id/caching/overview.md b/guide/id/caching/overview.md
new file mode 100644
index 00000000..72f5d0bb
--- /dev/null
+++ b/guide/id/caching/overview.md
@@ -0,0 +1,18 @@
+# Caching
+
+Caching adalah cara yang murah dan efektif untuk meningkatkan performa aplikasi.
+Dengan menyimpan data yang relatif statis di cache dan menyajikannya dari cache saat diminta,
+aplikasi menghemat waktu yang sebaliknya diperlukan untuk menghasilkan data dari awal setiap kali.
+
+Caching dapat terjadi pada berbagai level dan lokasi dalam sebuah aplikasi. Di sisi server, pada level rendah,
+cache dapat digunakan untuk menyimpan data dasar, seperti daftar artikel terbaru yang diambil dari basis data;
+dan pada level yang lebih tinggi, cache dapat digunakan untuk menyimpan fragmen atau seluruh halaman web, seperti hasil rendering
+artikel terbaru. Di sisi klien, Anda dapat menggunakan HTTP caching untuk menyimpan konten halaman yang terakhir dikunjungi
+di cache browser.
+
+Yii mendukung semua mekanisme caching berikut:
+
+* [Data caching](data.md)
+* [Fragment caching](fragment.md)
+* [Page caching](page.md)
+* [HTTP caching](http.md)
diff --git a/guide/id/concept/aliases.md b/guide/id/concept/aliases.md
new file mode 100644
index 00000000..849f9adf
--- /dev/null
+++ b/guide/id/concept/aliases.md
@@ -0,0 +1,141 @@
+# Aliases
+
+Anda dapat menggunakan alias untuk merepresentasikan path file atau URL sehingga Anda tidak perlu menulis path absolut atau URL secara hard-code di
+proyek Anda. Sebuah alias harus diawali karakter `@` agar dapat dibedakan dari path file dan URL biasa. Alias yang
+didefinisikan tanpa `@` di awal akan diprefiks otomatis dengan karakter `@`.
+
+Aplikasi Yii bawaan memiliki beberapa alias yang sudah didefinisikan di `config/params.php`. Misalnya, alias `@public` merepresentasikan
+path web root; `@baseUrl` merepresentasikan URL dasar untuk aplikasi Web yang sedang berjalan.
+
+## Defining aliases
+
+Anda dapat mendefinisikan sebuah alias melalui `config/params.php` aplikasi:
+
+```php
+return [
+ // ...
+
+ 'yiisoft/aliases' => [
+ 'aliases' => [
+ // ...
+
+ // an alias of a file path
+ '@foo' => '/path/to/foo',
+
+ // an alias of a URL
+ '@bar' => 'https://www.example.com',
+
+ // an alias of a concrete file that contains a \foo\Bar class
+ '@foo/Bar.php' => '/definitely/not/foo/Bar.php',
+ ],
+ ],
+];
+```
+
+> [!NOTE]
+> Path file atau URL yang dialias tidak harus selalu merujuk pada file atau sumber daya yang benar-benar ada.
+
+Dengan alias yang telah didefinisikan, Anda dapat menurunkan alias baru dengan menambahkan garis miring `/` diikuti satu atau beberapa segmen path.
+Sebagai contoh, `@foo` adalah alias akar (root), sedangkan `@foo/bar/file.php` adalah alias turunan.
+
+Anda dapat mendefinisikan sebuah alias menggunakan alias lain (baik alias akar maupun turunan):
+
+
+```php
+'@foobar' => '@foo/bar',
+```
+
+Parameter `yiisoft/aliases` menginisialisasi layanan `Aliases` dari [paket `yiisoft/aliases`](https://github.com/yiisoft/aliases).
+Anda dapat menyetel alias tambahan saat runtime menggunakan layanan tersebut:
+
+```php
+use \Yiisoft\Aliases\Aliases;
+
+public function actionIndex(Aliases $aliases)
+{
+ $aliases->set('@uploads', '@root/uploads');
+}
+```
+
+## Menggunakan aliases di konfigurasi
+
+Disarankan untuk me-resolve alias pada level konfigurasi, sehingga service menerima URL dan path sebagai string siap pakai:
+
+```php
+ static fn (Aliases $aliases) => new FileCache(
+ $aliases->get($params['yiisoft/cache-file']['fileCache']['path'])
+ ),
+];
+```
+
+## Me-resolve alias
+
+Anda dapat menggunakan layanan `Aliases`
+
+```php
+use \Yiisoft\Aliases\Aliases;
+
+public function actionIndex(Aliases $aliases)
+{
+ $foo = $aliases->get('@foo'); // /path/to/foo
+ $bar = $aliases->get('@bar'); // https://www.example.com
+ $file = $aliases->get('@foo/bar/file.php'); // /path/to/foo/bar/file.php
+}
+```
+
+Path/URL yang direpresentasikan oleh alias turunan ditentukan dengan mengganti bagian alias akar dengan path/URL yang sesuai
+pada alias turunan tersebut.
+
+> [!NOTE]
+> Metode `get()` tidak memeriksa apakah path/URL hasilnya merujuk pada file atau sumber daya yang ada.
+
+
+Alias akar juga dapat berisi karakter garis miring `/`. Metode `get()` cukup cerdas untuk menentukan bagian mana
+dari sebuah alias yang merupakan alias akar, sehingga dapat menentukan path file atau URL yang sesuai dengan benar:
+
+```php
+use \Yiisoft\Aliases\Aliases;
+
+public function actionIndex(Aliases $aliases)
+{
+ $aliases->set('@foo', '/path/to/foo');
+ $aliases->set('@foo/bar', '/path2/bar');
+
+ $aliases->get('@foo/test/file.php'); // /path/to/foo/test/file.php
+ $aliases->get('@foo/bar/file.php'); // /path2/bar/file.php
+}
+```
+
+If `@foo/bar` isn't defined as a root alias, the last statement would display `/path/to/foo/bar/file.php`.
+
+
+Jika `@foo/bar` tidak didefinisikan sebagai alias akar, pernyataan terakhir akan menghasilkan `/path/to/foo/bar/file.php`.
+
+
+## Alias bawaan
+
+[Aplikasi Yii](https://github.com/yiisoft/app) mendefinisikan serangkaian alias untuk mereferensikan path file dan URL yang umum digunakan:
+
+- `@root` - direktori dasar dari aplikasi yang sedang berjalan.
+- `@assets` - direktori publik aplikasi tempat aset dipublikasikan.
+- `@assetsUrl` - URL direktori dasar tempat aset dipublikasikan.
+- `@baseUrl` - URL dasar aplikasi Web yang sedang berjalan. Bawaannya `/`.
+- `@npm` - direktori paket Node.
+- `@bower` - direktori paket bower.
+- `@vendor` - direktori `vendor` milik Composer.
+- `@public` - direktori publik aplikasi yang berisi `index.php`.
+- `@runtime` - path runtime aplikasi yang sedang berjalan. Bawaannya `@root/runtime`.
+- `@layout` - direktori berkas layout.
+- `@resources` - direktori yang berisi view, sumber aset, dan sumber daya lainnya.
+- `@views` - direktori dasar template view aplikasi.
+
diff --git a/guide/id/concept/autoloading.md b/guide/id/concept/autoloading.md
new file mode 100644
index 00000000..775b5a8f
--- /dev/null
+++ b/guide/id/concept/autoloading.md
@@ -0,0 +1,31 @@
+# Class autoloading
+
+Karena Yii menggunakan [Composer](https://getcomposer.org) untuk mengelola paket, Yii secara otomatis memuat kelas dari paket-paket tersebut
+tanpa perlu melakukan `require` file-nya secara eksplisit.
+Saat Composer memasang paket, ia menghasilkan sebuah [autoloader yang kompatibel PSR-4](https://www.php-fig.org/psr/psr-4/).
+Untuk menggunakannya, lakukan `require_once` terhadap autoloader `/vendor/autoload.php` di file entry point `index.php` Anda.
+
+Anda dapat menggunakan autoloader tidak hanya untuk paket yang diinstal, tetapi juga untuk aplikasi Anda sendiri karena aplikasi Anda juga merupakan sebuah paket.
+Untuk memuat kelas-kelas dari namespace tertentu, tambahkan berikut ini ke `composer.json`:
+
+```json
+{
+ "autoload": {
+ "psr-4": {
+ "App\\": "src/"
+ }
+ }
+}
+```
+
+Di mana `App\\` adalah namespace akar dan `src/` adalah direktori tempat kelas-kelas Anda berada. Anda dapat menambahkan lebih banyak sumber (source roots) jika
+diperlukan. Setelah selesai, jalankan `composer dump-autoload` atau cukup `composer du` dan kelas-kelas dari namespace terkait
+akan mulai dimuat secara otomatis.
+
+Jika Anda membutuhkan autoloading khusus lingkungan pengembangan yang tidak digunakan saat menjalankan Composer dengan flag `--no-dev`,
+tambahkan ke bagian `autoload-dev` alih-alih `autoload`.
+
+## Referensi
+
+- [PSR-4: Autoloader](https://www.php-fig.org/psr/psr-4/).
+- [Panduan Composer tentang autoloading](https://getcomposer.org/doc/01-basic-usage.md#autoloading).
diff --git a/guide/id/glossary.md b/guide/id/glossary.md
new file mode 100644
index 00000000..be99ef00
--- /dev/null
+++ b/guide/id/glossary.md
@@ -0,0 +1,76 @@
+# A
+
+## alias
+
+Alias adalah sebuah string yang digunakan oleh Yii untuk merujuk ke kelas atau direktori, misalnya `@app/vendor`.
+Baca lebih lanjut di ["Aliases"](concept/aliases.md).
+
+## asset
+
+Aset merujuk pada berkas sumber daya. Biasanya berisi kode JavaScript atau CSS, tetapi bisa berupa konten statis apa pun yang diakses melalui HTTP.
+
+# C
+
+## configuration
+
+Konfigurasi dapat merujuk pada proses mengatur properti suatu objek atau pada berkas konfigurasi yang menyimpan
+pengaturan untuk sebuah objek atau kelas objek. Baca lebih lanjut di ["Configuration"](concept/configuration.md).
+
+# D
+
+## DI
+
+Dependency Injection (Injeksi Dependensi) adalah teknik pemrograman di mana dependensi sebuah objek disediakan (disuntikkan) dari luar. ["DI"](concept/di-container.md)
+
+# I
+
+## installation
+
+Instalasi adalah proses menyiapkan sesuatu agar dapat bekerja, baik dengan mengikuti berkas readme maupun menjalankan skrip
+yang disiapkan khusus. Dalam konteks Yii, ini mencakup pengaturan izin dan pemenuhan persyaratan perangkat lunak.
+
+# M
+
+## middleware
+
+Middleware adalah pemroses dalam tumpukan pemrosesan permintaan (request). Diberikan sebuah request, ia dapat menghasilkan response
+atau melakukan suatu aksi dan meneruskan pemrosesan ke middleware berikutnya. Baca lebih lanjut di ["Middleware"](structure/middleware.md).
+
+## module
+
+Modul adalah sub-aplikasi yang mengelompokkan sejumlah kode berdasarkan suatu kasus penggunaan. Biasanya digunakan di dalam aplikasi utama
+dan dapat berisi handler URL atau perintah konsol.
+
+# N
+
+## namespace
+
+Namespace merujuk pada [fitur bahasa PHP](https://www.php.net/manual/en/language.namespaces.php).
+
+# P
+
+## package
+
+Paket biasanya merujuk pada [paket Composer](https://getcomposer.org/doc/). Ini adalah kode yang siap digunakan ulang dan
+didistribusikan, yang dapat diinstal secara otomatis melalui manajer paket.
+
+# R
+
+## rule
+
+Aturan biasanya merujuk pada aturan validasi dari paket [yiisoft/validator](https://github.com/yiisoft/validator).
+Aturan menyimpan serangkaian parameter untuk memeriksa apakah sebuah himpunan data valid.
+"Rule handler" melakukan pemrosesan sebenarnya.
+
+# Q
+
+## queue
+
+Antrian mirip dengan tumpukan (stack), tetapi mengikuti metodologi First-In-First-Out.
+
+# V
+
+## vendor
+
+Vendor adalah organisasi atau pengembang individu yang menyediakan kode dalam bentuk paket. Istilah ini juga dapat merujuk pada
+direktori `vendor` milik [Composer](https://getcomposer.org/doc/).