2; $contentDir = $hasUserContent ? realpath($userContentDir) : realpath($demoContentDir); // Extract request information $requestUri = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH) ?: '/'; $hasTrailingSlash = str_ends_with($requestUri, '/') && $requestUri !== '/'; $requestPath = trim($requestUri, '/'); // Extract language from URL $currentLang = $defaultLang; $pathParts = explode('/', $requestPath); if (!empty($pathParts[0]) && in_array($pathParts[0], $availableLangs) && $pathParts[0] !== $defaultLang) { $currentLang = $pathParts[0]; array_shift($pathParts); $requestPath = implode('/', $pathParts); } // Resolve templates with custom fallback to defaults $baseTemplate = resolveTemplate('base'); $pageTemplate = resolveTemplate('page'); $listTemplate = resolveTemplate('list');