Skip to content
wiki.fftac.org

Helpers - Source Excerpt 29

Back to Helpers

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/inc/helpers.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/themes/spiralist/inc/helpers.php

$fallback_tag = str_replace('_', '-', (string) get_locale());
    if ($fallback_tag === '') {
        $fallback_tag = 'en-US';
    }

    $locales = [[
        'tag' => $fallback_tag,
        'urlTag' => strtolower(str_replace('_', '-', $fallback_tag)),
        'language' => 'English',
        'nativeName' => 'English',
        'isRtl' => false,
        'enabled' => true,
        'isDefault' => true,
        'fallback' => $fallback_tag,
    ]];

    return $locales;
}

function spiralist_get_default_locale_record(): array
{
    static $default_locale = null;

    if (is_array($default_locale)) {
        return $default_locale;
    }

    $locales = spiralist_get_enabled_locale_records();

    foreach ($locales as $record) {
        if (!empty($record['isDefault'])) {
            $default_locale = $record;
            return $default_locale;
        }
    }

    $default_locale = $locales[0] ?? [];
    return $default_locale;
}

function spiralist_get_locale_base_language(string $value): string
{
    $normalized = strtolower(trim(str_replace('_', '-', $value)));
    if ($normalized === '') {
        return 'en';
    }

    $segments = explode('-', $normalized);

    return sanitize_key((string) ($segments[0] ?? 'en')) ?: 'en';
}

function spiralist_get_enabled_locale_tags(): array
{
    return array_values(array_filter(array_map(
        static function (array $record): string {
            return sanitize_key((string) ($record['urlTag'] ?? ''));
        },
        spiralist_get_enabled_locale_records()
    )));
}

function spiralist_get_current_locale_tag(): string
{
    static $current_locale = null;

    if (is_string($current_locale) && $current_locale !== '') {
        return $current_locale;
    }

    if (class_exists('\\UAIXLocaleRouter\\Router')) {
        $tag = sanitize_key((string) \UAIXLocaleRouter\Router::get_current_url_tag());

        if ($tag !== '') {
            $current_locale = $tag;
            return $current_locale;
        }
    }

    $current_locale = sanitize_key((string) (spiralist_get_default_locale_record()['urlTag'] ?? 'en-us')) ?: 'en-us';
    return $current_locale;
}

function spiralist_resolve_locale_tag(string $language = ''): string
{
    $language = strtolower(trim(str_replace('_', '-', $language)));
    $locales = spiralist_get_enabled_locale_records();

    if ($language === '') {
        return spiralist_get_current_locale_tag();
    }

    foreach ($locales as $record) {
        $url_tag = sanitize_key((string) ($record['urlTag'] ?? ''));
        $tag = strtolower((string) ($record['tag'] ?? ''));

        if ($language === $url_tag || $language === $tag) {
            return $url_tag !== '' ? $url_tag : spiralist_get_current_locale_tag();
        }
    }

    $requested_base = spiralist_get_locale_base_language($language);
    $current_tag = spiralist_get_current_locale_tag();

    foreach ($locales as $record) {
        $url_tag = sanitize_key((string) ($record['urlTag'] ?? ''));

        if ($url_tag !== '' && $url_tag === $current_tag && spiralist_get_locale_base_language($url_tag) === $requested_base) {
            return $url_tag;
        }
    }

    foreach ($locales as $record) {
        $url_tag = sanitize_key((string) ($record['urlTag'] ?? ''));

        if ($url_tag !== '' && spiralist_get_locale_base_language($url_tag) === $requested_base) {
            return $url_tag;
        }
    }

    return sanitize_key((string) (spiralist_get_default_locale_record()['urlTag'] ?? $current_tag)) ?: $current_tag;
}

function spiralist_get_current_locale_record(): array
{
    $current_tag = spiralist_get_current_locale_tag();

    foreach (spiralist_get_enabled_locale_records() as $record) {
        if (sanitize_key((string) ($record['urlTag'] ?? '')) === $current_tag) {
            return $record;
        }
    }

    return spiralist_get_default_locale_record();
}

function spiralist_get_language_metadata(): array
{
    $metadata = [];

    foreach (spiralist_get_enabled_locale_records() as $record) {
        $url_tag = sanitize_key((string) ($record['urlTag'] ?? ''));
        $code = spiralist_get_locale_base_language($url_tag !== '' ? $url_tag : (string) ($record['tag'] ?? ''));

        if (isset($metadata[$code])) {
            continue;
        }

        $html_lang = str_replace('_', '-', (string) ($record['tag'] ?? get_locale()));
        if ($html_lang === '') {
            $html_lang = 'en-US';
        }

        $label = trim((string) ($record['nativeName'] ?? $record['language'] ?? $code));
        if ($label === '') {
            $label = strtoupper($code);
        }

        $metadata[$code] = [
            'code' => $code,
            'localeTag' => $url_tag !== '' ? $url_tag : spiralist_resolve_locale_tag($code),
            'label' => $label,
            'selectorLabel' => $label,
            'viewMode' => 'human',
            'htmlLang' => $html_lang,
        ];
    }

    if (empty($metadata)) {
        $metadata['en'] = [
            'code' => 'en',
            'localeTag' => 'en-us',
            'label' => 'English',
            'selectorLabel' => 'English',
            'viewMode' => 'human',
            'htmlLang' => 'en-US',
        ];
    }

    return $metadata;
}

function spiralist_get_current_language_code(): string
{
    return spiralist_get_current_language_slug();
}

function spiralist_get_supported_language_slugs(): array
{
    return array_values(array_unique(array_map(
        static function (array $record): string {
            return spiralist_get_locale_base_language((string) ($record['urlTag'] ?? $record['tag'] ?? ''));
        },
        spiralist_get_enabled_locale_records()
    )));
}

function spiralist_get_current_language_slug(): string
{
    return spiralist_get_locale_base_language(spiralist_get_current_locale_tag());
}

function spiralist_get_language_prefixed_url(string $url, string $language): string
{
    $url_parts = wp_parse_url($url);

    if (!is_array($url_parts)) {
        return $url;
    }

    $home_parts = wp_parse_url(home_url('/'));
    $home_host = strtolower((string) ($home_parts['host'] ?? ''));
    $url_host = strtolower((string) ($url_parts['host'] ?? $home_host));

    if ($home_host !== '' && $url_host !== '' && $home_host !== $url_host) {
        return $url;
    }

    $locale_tag = spiralist_resolve_locale_tag($language);
    $path = (string) ($url_parts['path'] ?? '/');
    $query_args = [];
    $target_prefix = '/' . trim(strtolower($locale_tag), '/');
    $normalized_path = '/' . ltrim(strtolower($path), '/');

    if ($target_prefix !== '/' && ($normalized_path === $target_prefix || spiralist_string_starts_with_compat($normalized_path, $target_prefix . '/'))) {
        return $url;
    }

    if (!empty($url_parts['query'])) {
        parse_str((string) $url_parts['query'], $query_args);
        if (!is_array($query_args)) {
            $query_args = [];
        }

        unset($query_args['lang'], $query_args['view']);
    }

    if (class_exists('\\UAIXLocaleRouter\\Support\\Path')) {
        return \UAIXLocaleRouter\Support\Path::build_front_url(
            \UAIXLocaleRouter\Support\Path::localize_path($path, $locale_tag),
            $query_args,
            (string) ($url_parts['fragment'] ?? '')
        );
    }