Helpers - Source Excerpt 29
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'] ?? '')
);
}