$rules Правила ядра и других плагинов. * @return array */ public function filterRules( $rules ): array { if ( ! is_array( $rules ) ) { return $rules; } $slugs = array(); foreach ( $this->settings->published() as $language ) { if ( ! $language->isDefault ) { $slugs[] = $language->slug; } } return self::buildRules( $rules, $slugs ); } /** * Собирает итоговый набор правил. Чистая функция — её проверяют тесты. * * @param array $rules Исходные правила. * @param list $slugs Слаги дополнительных языков. * @return array */ public static function buildRules( array $rules, array $slugs ): array { if ( array() === $slugs ) { return $rules; } $languageRules = array(); foreach ( $slugs as $slug ) { // Главная страница языка: /en/ и /en. $languageRules[ $slug . '/?$' ] = 'index.php'; foreach ( $rules as $pattern => $query ) { $languageRules[ $slug . '/' . $pattern ] = $query; } } // Языковые правила должны проверяться раньше исходных. return $languageRules + $rules; } }