summaryrefslogtreecommitdiff
path: root/src/web/helpers/lang.php
blob: 72167fc101aa06aa495235afcbbb77285c2895c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php /* Copyright (c) 2024 Freya Murphy */
$__lang = array();

/**
 * @param ?array<string,mixed> $sub
 */
function lang(
	string  $key,
	?string $default = NULL,
	?array  $sub = NULL) {
	$lang = $GLOBALS['__lang'];
	if(array_key_exists($key, $lang)) {
		if ($sub) {
			return sprintf($lang[$key], ...$sub);
		} else {
			return $lang[$key];
		}
	} else if ($default !== NULL) {
		return $default;
	} else {
		trigger_error('Undefined lang string: ' . $key, E_USER_WARNING);
		return $key;
	}
}

/**
 * @param array<string,string> $attrs
 * @param ?array<string,mixed> $sub
 */
function ilang(
	string $key,
	?string $class = NULL,
	?string $id = NULL,
	?string $href = NULL,
	?string $click = NULL,
	array  $attrs = array(),
	?array $sub = NULL,
	bool   $button = FALSE,
	string $container = 'span'
) {
	$text = ucfirst(lang($key . "_text", FALSE, sub: $sub));
	$tip = lang($key . "_tip", FALSE, sub: $sub);
	$icon = lang($key . "_icon", FALSE);
	$content = lang($key . "_content", FALSE);

	if ($click || $button) {
		echo '<button ';
	} else {
		echo '<a ';
	}
	if ($tip) {
		echo 'title="' . $tip . '" ';
		echo 'aria-label="' . $tip . '" ';
	}
	if ($class) {
		echo 'class="' . $class . '" ';
	}
	if ($id) {
		echo 'id="' . $id . '" ';
	}
	if ($click) {
		echo 'onclick="' . $click . '" ';
	}
	if ($href) {
		echo 'href="' . $href . '" ';
	}
	foreach ($attrs as $key => $attr) {
		echo $key . '="' . $attr . '" ';
	}
	echo '> ';
	if ($icon) {
		echo '<i class="' . $icon . '">';
		if ($content) {
			echo $content;
		}
		echo '</i>';
	}
	if ($text) {
		echo '<' . $container;
		if ($icon) {
			echo ' class="ml-sm"';
		}
		echo '>' . $text . '</' . $container . '>';
	}
	if ($click || $button) {
		echo '</button>';
	} else {
		echo '</a>';
	}
}