translation.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. // Translation system - Based on feedback system approach
  3. require_once 'config.php';
  4. class Translation {
  5. private static $translations = [];
  6. private static $current_lang = DEFAULT_LANGUAGE;
  7. public static function init($lang = 'en') {
  8. self::$current_lang = $lang;
  9. $lang_file = __DIR__ . "/../languages/{$lang}.php";
  10. if (file_exists($lang_file)) {
  11. self::$translations = require $lang_file;
  12. } else {
  13. // Fallback to English
  14. self::$current_lang = 'en';
  15. self::$translations = require __DIR__ . '/../languages/en.php';
  16. }
  17. }
  18. public static function get($key, $params = []) {
  19. if (!isset(self::$translations[$key])) {
  20. return $key; // Return key if translation not found
  21. }
  22. $translation = self::$translations[$key];
  23. if (!empty($params)) {
  24. foreach ($params as $placeholder => $value) {
  25. $translation = str_replace('{' . $placeholder . '}', $value, $translation);
  26. }
  27. }
  28. return $translation;
  29. }
  30. public static function getCurrentLang() {
  31. return self::$current_lang;
  32. }
  33. public static function getAvailableLanguages() {
  34. return [
  35. 'en' => 'English',
  36. 'fi' => 'Suomi'
  37. ];
  38. }
  39. public static function setLanguage($lang) {
  40. if (in_array($lang, array_keys(self::getAvailableLanguages()))) {
  41. self::init($lang);
  42. return true;
  43. }
  44. return false;
  45. }
  46. public static function getLanguageSwitcher($currentPath = '') {
  47. $current_lang = self::getCurrentLang();
  48. $languages = self::getAvailableLanguages();
  49. $switcher = '<div class="language-switcher">';
  50. $switcher .= '<span class="language-label">' . self::get('language') . ':</span>';
  51. foreach ($languages as $code => $name) {
  52. $separator = strpos($currentPath, '?') !== false ? '&' : '?';
  53. $switcherUrl = $currentPath . $separator . 'lang=' . $code;
  54. $class = $code === $current_lang ? 'active' : '';
  55. $switcher .= '<a href="' . htmlspecialchars($switcherUrl) . '" class="language-link ' . $class . '">' . $name . '</a>';
  56. }
  57. $switcher .= '</div>';
  58. return $switcher;
  59. }
  60. }
  61. // Helper function for easier translation access
  62. function t($key, $params = []) {
  63. return Translation::get($key, $params);
  64. }
  65. // Auto-initialize with session language or default from config
  66. if (session_status() === PHP_SESSION_NONE) {
  67. session_start();
  68. }
  69. // Handle language switching
  70. if (isset($_GET['lang']) && in_array($_GET['lang'], array_keys(Translation::getAvailableLanguages()))) {
  71. $_SESSION['language'] = $_GET['lang'];
  72. Translation::setLanguage($_GET['lang']);
  73. // Redirect back to referring page or remove lang parameter
  74. $currentUrl = $_SERVER['REQUEST_URI'];
  75. $parsedUrl = parse_url($currentUrl);
  76. // Build URL without lang parameter
  77. $redirectUrl = $parsedUrl['path'];
  78. if (isset($parsedUrl['query'])) {
  79. parse_str($parsedUrl['query'], $queryParams);
  80. unset($queryParams['lang']); // Remove lang parameter
  81. if (!empty($queryParams)) {
  82. $redirectUrl .= '?' . http_build_query($queryParams);
  83. }
  84. }
  85. // Only redirect if not in CLI mode
  86. if (php_sapi_name() !== 'cli') {
  87. header('Location: ' . $redirectUrl);
  88. exit;
  89. }
  90. }
  91. // Initialize translation
  92. $language = $_SESSION['language'] ?? DEFAULT_LANGUAGE;
  93. Translation::init($language);
  94. ?>