0 ] ); if ( is_array( $wpml ) ) { foreach ( $wpml as $code => $language ) { $languages[] = [ 'code' => (string) ( $language['code'] ?? $code ), 'tag' => self::tag( (string) ( $language['tag'] ?? $language['default_locale'] ?? $code ) ), 'name' => (string) ( $language['native_name'] ?? $code ), 'url' => (string) ( $language['url'] ?? '' ), 'current' => ! empty( $language['active'] ), 'flag' => (string) ( $language['country_flag_url'] ?? '' ), 'rtl' => in_array( (string) ( $language['code'] ?? $code ), [ 'ar', 'he', 'fa', 'ur', 'yi' ], true ), ]; } } elseif ( function_exists( 'pll_the_languages' ) ) { foreach ( (array) pll_the_languages( [ 'raw' => 1 ] ) as $language ) { $languages[] = [ 'code' => (string) ( $language['slug'] ?? '' ), 'tag' => self::tag( (string) ( $language['locale'] ?? $language['slug'] ?? '' ) ), 'name' => (string) ( $language['name'] ?? '' ), 'url' => (string) ( $language['url'] ?? '' ), 'current' => ! empty( $language['current_lang'] ), 'flag' => (string) ( $language['flag'] ?? '' ), 'rtl' => ! empty( $language['is_rtl'] ), ]; } } $languages = (array) apply_filters( 'rooster/languages', $languages ); return array_values( array_filter( $languages, static fn ( $language ) => is_array( $language ) && '' !== (string) ( $language['code'] ?? '' ) && '' !== (string) ( $language['url'] ?? '' ) ) ); } public static function tag( string $locale ): string { return str_replace( '_', '-', $locale ); } }