WebOrbiton
v1.3.0

AtheraStudio SyncDrop

52 lines · 1.5 KB
  1. <?php
  2. declare(strict_types=1);
  3. ​
  4. defined('SD_BOOT') || exit;
  5. ​
  6. const SD_LANGS = ['pl' => 'Polski', 'en' => 'English', 'de' => 'Deutsch'];
  7. ​
  8. function sd_lang(): string
  9. {
  10. static $lang = null;
  11. if ($lang !== null) return $lang;
  12. $cookie = (string)($_COOKIE['syncdrop_lang'] ?? '');
  13. if (isset(SD_LANGS[$cookie])) return $lang = $cookie;
  14. $env = sd_env();
  15. if ($env && isset(SD_LANGS[(string)($env['SD_LANG'] ?? '')])) return $lang = (string)$env['SD_LANG'];
  16. $accept = strtolower((string)($_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''));
  17. foreach (explode(',', $accept) as $part) {
  18. $code = substr(trim(explode(';', $part)[0]), 0, 2);
  19. if (isset(SD_LANGS[$code])) return $lang = $code;
  20. }
  21. return $lang = 'en';
  22. }
  23. ​
  24. function sd_set_lang(string $lang): void
  25. {
  26. if (!isset(SD_LANGS[$lang])) return;
  27. setcookie('syncdrop_lang', $lang, [
  28. 'expires' => time() + 31536000,
  29. 'path' => '/',
  30. 'secure' => sd_https(),
  31. 'httponly' => true,
  32. 'samesite' => 'Strict',
  33. ]);
  34. }
  35. ​
  36. function sd_strings(string $lang): array
  37. {
  38. static $cache = [];
  39. if (!isset($cache[$lang])) {
  40. $file = SD_ROOT . '/translate/' . $lang . '.php';
  41. $cache[$lang] = is_file($file) ? (array)require $file : [];
  42. }
  43. return $cache[$lang];
  44. }
  45. ​
  46. function t(string $key, array $vars = []): string
  47. {
  48. $text = sd_strings(sd_lang())[$key] ?? sd_strings('en')[$key] ?? $key;
  49. foreach ($vars as $name => $value) $text = str_replace('{' . $name . '}', (string)$value, $text);
  50. return $text;
  51. }
  52. ​