$languageStatuses Status for each language (existing/creatable/unavailable) * @param array $existingTranslations Raw page translation records, keyed by language ID * @param int[] $creatableLanguageIds IDs of languages that can be created * @param bool $canUserCreateTranslations Whether user has permission to create translations * @param LanguageItem[] $languageItems UI-ready language items */ public function __construct( public int $pageId, public array $availableLanguages, public array $languageStatuses, public array $existingTranslations, public array $creatableLanguageIds, public bool $canUserCreateTranslations, public array $languageItems, ) {} /** * Check if a translation exists for a specific language. */ public function hasTranslation(int $languageId): bool { return array_key_exists($languageId, $this->existingTranslations); } /** * Check if a translation can be created for a specific language. */ public function canCreateTranslation(int $languageId): bool { return in_array($languageId, $this->creatableLanguageIds, true); } /** * Get the translation record for a specific language. * * @return array|null Translation record or null if not found */ public function getTranslationRecord(int $languageId): ?array { return $this->existingTranslations[$languageId] ?? null; } /** * Get the status of a specific language. */ public function getLanguageStatus(int $languageId): LanguageStatus { return $this->languageStatuses[$languageId] ?? LanguageStatus::Unavailable; } /** * Get all language IDs including default (0) and all translations. * * @return int[] */ public function getAllExistingLanguageIds(): array { return array_merge([0], array_keys($this->existingTranslations)); } }