Fix Translator.php for new table structure

This commit is contained in:
infosave2007
2025-11-08 17:55:14 +03:00
parent 93a5ff8c83
commit 2106aa77e0
+24 -14
View File
@@ -80,7 +80,7 @@ class Translator {
*/
private static function loadTranslations(string $languageCode): void {
$pdo = DB::conn();
$stmt = $pdo->prepare('SELECT translation_key, translation_value FROM translations WHERE language_code = ?');
$stmt = $pdo->prepare('SELECT CONCAT(category, ".", key_name) as trans_key, translation FROM translations WHERE locale = ?');
$stmt->execute([$languageCode]);
$translations = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
@@ -178,13 +178,18 @@ class Translator {
// Save to database
$pdo = DB::conn();
// Split key into category and key_name (e.g., "common.speed" -> "common" + "speed")
$parts = explode('.', $key, 2);
$category = $parts[0] ?? 'common';
$keyName = $parts[1] ?? $key;
$stmt = $pdo->prepare('
INSERT INTO translations (language_code, translation_key, translation_value)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE translation_value = VALUES(translation_value)
INSERT INTO translations (locale, category, key_name, translation)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE translation = VALUES(translation)
');
return $stmt->execute([$targetLang, $key, $translatedText]);
return $stmt->execute([$targetLang, $category, $keyName, $translatedText]);
} catch (Exception $e) {
error_log("Auto-translation error: " . $e->getMessage());
@@ -307,11 +312,11 @@ class Translator {
$pdo = DB::conn();
// Get all English keys
$stmt = $pdo->query("SELECT translation_key, translation_value FROM translations WHERE language_code = 'en'");
$stmt = $pdo->query("SELECT CONCAT(category, '.', key_name) as trans_key, translation FROM translations WHERE locale = 'en'");
$englishKeys = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
// Get existing translations for target language
$stmt = $pdo->prepare("SELECT translation_key FROM translations WHERE language_code = ?");
$stmt = $pdo->prepare("SELECT CONCAT(category, '.', key_name) FROM translations WHERE locale = ?");
$stmt->execute([$targetLang]);
$existingKeys = $stmt->fetchAll(PDO::FETCH_COLUMN);
@@ -514,9 +519,9 @@ class Translator {
l.name,
l.native_name,
COUNT(t.id) as translated_count,
(SELECT COUNT(*) FROM translations WHERE language_code = 'en') as total_count
(SELECT COUNT(*) FROM translations WHERE locale = 'en') as total_count
FROM languages l
LEFT JOIN translations t ON l.code = t.language_code
LEFT JOIN translations t ON l.code = t.locale
WHERE l.is_active = 1
GROUP BY l.code, l.name, l.native_name
");
@@ -529,13 +534,18 @@ class Translator {
*/
public static function setTranslation(string $languageCode, string $key, string $value): bool {
$pdo = DB::conn();
// Split key into category and key_name
$parts = explode('.', $key, 2);
$category = $parts[0] ?? 'common';
$keyName = $parts[1] ?? $key;
$stmt = $pdo->prepare('
INSERT INTO translations (language_code, translation_key, translation_value)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE translation_value = VALUES(translation_value)
INSERT INTO translations (locale, category, key_name, translation)
VALUES (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE translation = VALUES(translation)
');
return $stmt->execute([$languageCode, $key, $value]);
return $stmt->execute([$languageCode, $category, $keyName, $value]);
}
/**
@@ -543,7 +553,7 @@ class Translator {
*/
public static function exportToJson(string $languageCode): string {
$pdo = DB::conn();
$stmt = $pdo->prepare('SELECT translation_key, translation_value FROM translations WHERE language_code = ?');
$stmt = $pdo->prepare('SELECT CONCAT(category, ".", key_name) as trans_key, translation FROM translations WHERE locale = ?');
$stmt->execute([$languageCode]);
$translations = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);