diff --git a/README.md b/README.md index 047782b..67b649a 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,9 @@ resources/js/ └── pages/site/ # Halaman, tinggal menyusun section + data ``` -- **Ubah kontak, alamat, atau daftar jasa** cukup di `resources/js/data/site.ts`, otomatis berlaku di semua halaman. +- **Ubah kontak atau alamat kantor** cukup di `resources/js/data/site.ts`, otomatis berlaku di semua halaman. +- **Teks website (Bahasa Indonesia & Inggris)** ada di `resources/js/content/`: satu file per halaman (`home.ts`, `about.ts`, ...) plus `common.ts` untuk navbar, footer, form, dan 8 jasa. Setiap file berisi objek `id` dan `en`; TypeScript akan error bila versi `en` tidak lengkap. Gunakan `**teks**` untuk penekanan dan `==teks==` untuk highlight merah di judul. +- **Bahasa** dipilih lewat tombol ID/EN di navbar dan disimpan di cookie `locale` (default `id`), dibaca oleh middleware `app/Http/Middleware/HandleLocale.php`. - **Warna tema (light & dark)** ada di `resources/css/app.css`, pada blok `.probindo-site` (light) dan `.dark .probindo-site` (dark). ## Perintah yang Sering Dipakai diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index f4cc770..c60b03c 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -38,6 +38,7 @@ class HandleInertiaRequests extends Middleware return [ ...parent::share($request), 'name' => config('app.name'), + 'locale' => app()->getLocale(), 'auth' => [ 'user' => $request->user(), ], diff --git a/app/Http/Middleware/HandleLocale.php b/app/Http/Middleware/HandleLocale.php new file mode 100644 index 0000000..bba822b --- /dev/null +++ b/app/Http/Middleware/HandleLocale.php @@ -0,0 +1,33 @@ + + */ + public const SUPPORTED = ['id', 'en']; + + /** + * Apply the visitor's language choice, stored by the site's language + * toggle in the `locale` cookie. + * + * @param Closure(Request): (Response) $next + */ + public function handle(Request $request, Closure $next): Response + { + $locale = $request->cookie('locale'); + + App::setLocale(in_array($locale, self::SUPPORTED, true) ? $locale : self::SUPPORTED[0]); + + return $next($request); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index ba5cf4c..e1fe714 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,6 +2,7 @@ use App\Http\Middleware\HandleAppearance; use App\Http\Middleware\HandleInertiaRequests; +use App\Http\Middleware\HandleLocale; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; @@ -15,10 +16,11 @@ return Application::configure(basePath: dirname(__DIR__)) health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { - $middleware->encryptCookies(except: ['appearance', 'sidebar_state']); + $middleware->encryptCookies(except: ['appearance', 'locale', 'sidebar_state']); $middleware->web(append: [ HandleAppearance::class, + HandleLocale::class, HandleInertiaRequests::class, AddLinkHeadersForPreloadedAssets::class, ]); diff --git a/resources/js/components/site/brand.tsx b/resources/js/components/site/brand.tsx index 8448af3..d74763c 100644 --- a/resources/js/components/site/brand.tsx +++ b/resources/js/components/site/brand.tsx @@ -1,13 +1,17 @@ import { Link } from '@inertiajs/react'; +import { common } from '@/content/common'; import { company } from '@/data/site'; +import { useContent } from '@/hooks/use-locale'; import { home } from '@/routes'; /** Logo mark with company name, linking back to the home page. */ export default function Brand() { + const t = useContent(common); + return (
- {company.tagline} + {t.footer.tagline}
- © {new Date().getFullYear()} {company.name}. Hak Cipta - Dilindungi Undang-Undang. + © {new Date().getFullYear()} {company.name}.{' '} + {t.footer.rights}