Tłumaczenia - poprawki.

This commit is contained in:
2026-09-25 18:16:53 +02:00
parent 4fde92d323
commit 80e1aa12ed
6 changed files with 178 additions and 49 deletions
+31 -13
View File
@@ -3,25 +3,24 @@
declare(strict_types=1);
/**
* Odświeża cache menu raz na dobę (cron) lub ręcznie.
* Odświeża cache menu ręcznie (tylko CLI / terminal).
*
* 1) Upstream PL/EN/DE → api/cache/menu_{lang}.json
* 2) Języki source=ai (ES/IT/KO): tłumaczenie OpenAI ChatGPT z PL
* tylko gdy fingerprint PL się zmienił (lub brak cache AI).
* (z --force-ai zawsze; bez flagi tylko gdy zmienił się fingerprint PL)
*
* Użycie:
* php scripts/refresh_menu_cache.php
* php scripts/refresh_menu_cache.php --force-ai
*
* Cron (raz dziennie, np. 04:15):
* 15 4 * * * php /path/to/scripts/refresh_menu_cache.php >> /var/log/menu_refresh.log 2>&1
*
* Klucz OpenAI: skopiuj config/menu_ai.local.php.example → config/menu_ai.local.php
* Klucz OpenAI: config/menu_ai.local.php
* Instrukcja: README.md → „Odświeżanie cache menu”
*/
require_once __DIR__ . '/../api/menu_helpers.php';
$forceAi = in_array('--force-ai', $argv ?? [], true);
$hadError = false;
$config = require __DIR__ . '/../config/menu.php';
$languages = is_array($config['languages'] ?? null) ? $config['languages'] : [];
@@ -33,6 +32,13 @@ function logLine(string $msg): void
echo '[' . date('Y-m-d H:i:s') . '] ' . $msg . PHP_EOL;
}
try {
assertMenuCacheWritable();
} catch (Throwable $e) {
logLine('ERROR: ' . $e->getMessage());
exit(1);
}
function targetLanguageName(string $code): string
{
return match ($code) {
@@ -325,11 +331,17 @@ foreach ($languages as $code => $meta) {
$raw = fetchUpstreamMenu($url, $timeout);
if ($raw === null) {
logLine("Upstream {$code}: FAILED — keeping old cache if any");
$hadError = true;
continue;
}
$mapped = mapUpstreamMenu($raw, $code, 'upstream');
writeMenuCache(menuCachePath($code), $mapped);
logLine("Upstream {$code}: OK (" . count($mapped['sections'] ?? []) . ' sections)');
try {
$mapped = mapUpstreamMenu($raw, $code, 'upstream');
writeMenuCache(menuCachePath($code), $mapped);
logLine("Upstream {$code}: OK (" . count($mapped['sections'] ?? []) . ' sections)');
} catch (Throwable $e) {
logLine("Upstream {$code}: ERROR " . $e->getMessage());
$hadError = true;
}
}
$plMenu = readMenuCache(menuCachePath('pl'));
@@ -343,13 +355,17 @@ $fpFile = menuFingerprintPath();
$prevFp = is_file($fpFile) ? trim((string) file_get_contents($fpFile)) : '';
$plChanged = $forceAi || $prevFp === '' || !hash_equals($prevFp, $fp);
file_put_contents($fpFile, $fp, LOCK_EX);
logLine('PL fingerprint: ' . substr($fp, 0, 12) . '… changed=' . ($plChanged ? 'yes' : 'no'));
if (@file_put_contents($fpFile, $fp, LOCK_EX) === false) {
logLine('ERROR: nie zapisano fingerprint: ' . $fpFile);
$hadError = true;
} else {
logLine('PL fingerprint: ' . substr($fp, 0, 12) . '… changed=' . ($plChanged ? 'yes' : 'no'));
}
$aiCfg = loadMenuAiConfig();
if ($aiCfg === null) {
logLine('No config/menu_ai.local.php — skip AI languages (copy from .example)');
exit(0);
logLine('No config/menu_ai.local.php — skip AI languages');
exit($hadError ? 1 : 0);
}
foreach ($languages as $code => $meta) {
@@ -371,7 +387,9 @@ foreach ($languages as $code => $meta) {
logLine("AI {$code}: wrote cache");
} catch (Throwable $e) {
logLine('AI ' . $code . ': ERROR ' . $e->getMessage());
$hadError = true;
}
}
logLine('Done.');
exit($hadError ? 1 : 0);