diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index f77d2461..cf1ae9f4 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -39,7 +39,7 @@ if ($_GET["script"] == "version") { exit; } -global $adminer, $connection, $driver, $drivers, $error, $HTTPS, $LANG, $langs, $permanent, $has_token, $token, $translations; // allows including Adminer inside a function +global $adminer, $connection, $driver, $drivers, $error, $HTTPS, $langs, $permanent, $has_token, $token, $translations; // allows including Adminer inside a function if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"]; @@ -69,7 +69,7 @@ if (function_exists("get_magic_quotes_runtime") && get_magic_quotes_runtime()) { @ini_set("precision", '15'); // @ - can be disabled, 15 - internal PHP precision include "../adminer/include/lang.inc.php"; -include "../adminer/lang/$LANG.inc.php"; +include "../adminer/lang/" . LANG . ".inc.php"; include "../adminer/include/db.inc.php"; include "../adminer/include/pdo.inc.php"; include "../adminer/include/driver.inc.php"; diff --git a/adminer/include/design.inc.php b/adminer/include/design.inc.php index 2c20b48c..916a9861 100644 --- a/adminer/include/design.inc.php +++ b/adminer/include/design.inc.php @@ -7,7 +7,7 @@ namespace Adminer; * @param string $title2 used after colon in title and heading, should be HTML escaped */ function page_header(string $title, string $error = "", $breadcrumb = array(), string $title2 = ""): void { - global $LANG, $adminer, $drivers; + global $adminer, $drivers; page_headers(); if (is_ajax() && $error) { page_messages($error); @@ -21,7 +21,7 @@ function page_header(string $title, string $error = "", $breadcrumb = array(), s // initial-scale=1 is the default but Chrome 134 on iOS is not able to zoom out without it ?> - + diff --git a/adminer/include/lang.inc.php b/adminer/include/lang.inc.php index 5ef1e9ee..40a3da5c 100644 --- a/adminer/include/lang.inc.php +++ b/adminer/include/lang.inc.php @@ -51,30 +51,24 @@ $langs = array( 'zh-tw' => '繁體中文', // http://tzangms.com ); -/** Get current language */ -function get_lang(): string { - global $LANG; - return $LANG; -} - /** Translate string * @param literal-string $idf * @param float|string $number */ function lang(string $idf, $number = null): string { // this is matched by compile.php - global $LANG, $translations; + global $translations; $translation = ($translations[$idf] ?: $idf); if (is_array($translation)) { // this is matched by compile.php $pos = ($number == 1 ? 0 - : ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other - : ($LANG == 'fr' ? (!$number ? 0 : 1) // different forms for 0-1, other - : ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4 except 12-14, other - : ($LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other - : ($LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other - : ($LANG == 'lv' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number ? 1 : 2)) // different forms for 1 except 11, other, 0 - : (in_array($LANG, array('bs', 'ru', 'sr', 'uk')) ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other + : (LANG == 'cs' || LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other + : (LANG == 'fr' ? (!$number ? 0 : 1) // different forms for 0-1, other + : (LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4 except 12-14, other + : (LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other + : (LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other + : (LANG == 'lv' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number ? 1 : 2)) // different forms for 1 except 11, other, 0 + : (in_array(LANG, array('bs', 'ru', 'sr', 'uk')) ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other : 1)))))))) // different forms for 1, other ; // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html $translation = $translation[$pos]; @@ -90,9 +84,9 @@ function lang(string $idf, $number = null): string { } function switch_lang(): void { - global $LANG, $langs; + global $langs; echo "
\n"; @@ -130,3 +124,5 @@ if (isset($langs[$_COOKIE["adminer_lang"]])) { } } } + +define('Adminer\LANG', $LANG); diff --git a/compile.php b/compile.php index 107ec169..c9e8274a 100755 --- a/compile.php +++ b/compile.php @@ -38,7 +38,7 @@ function lang_ids($match) { function put_file($match) { global $project, $vendor; - if (basename($match[2]) == '$LANG.inc.php') { + if (preg_match('~LANG~', $match[2])) { return $match[0]; // processed later } $return = file_get_contents(__DIR__ . "/$project/$match[2]"); @@ -195,7 +195,7 @@ function get_translations($lang) { } if (!$translations) { - $translations = get_translations($LANG); + $translations = get_translations(LANG); $_SESSION["translations"] = $translations; } '; @@ -342,13 +342,13 @@ if ($project == "editor") { $file = preg_replace('~compile_file\(\'\.\./(externals/jush/modules/jush\.js)[^)]+\)~', "''", $file); } $file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file); -$file = preg_replace_callback('~\b(include|require) "([^"]*\$LANG.inc.php)";~', 'put_file_lang', $file); +$file = preg_replace_callback('~\b(include|require) "([^"]*" . LANG . ".inc.php)";~', 'put_file_lang', $file); $file = str_replace("\r", "", $file); if ($_SESSION["lang"]) { // single language version $file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file); $file = str_replace("switch_lang();", "", $file); - $file = str_replace('', $_SESSION["lang"], $file); + $file = str_replace('', $_SESSION["lang"], $file); } $file = str_replace('echo script_src("static/editing.js");' . "\n", "", $file); // merged into functions.js $file = preg_replace('~\s+echo script_src\("\.\./externals/jush/modules/jush-(textarea|txt|js|" \. JUSH \. ")\.js"\);~', '', $file); // merged into jush.js diff --git a/phpstan.neon b/phpstan.neon index 60a27664..0e1c05a2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -12,7 +12,7 @@ parameters: - identifier: includeOnce.fileNotFound # ./adminer-plugins.php - "~^Function (set_magic_quotes_runtime|mysql_)~" # PHP < 7 functions - "~an unknown class OCI-?Lob~" # this looks like PHPStan bug - - "~^Variable \\$(adminer|connection|driver|drivers|error|HTTPS|LANG|langs|permanent|has_token|token|translations) might not be defined~" # declared in bootstrap.inc.php + - "~^Variable \\$(adminer|connection|driver|drivers|error|HTTPS|langs|permanent|has_token|token|translations) might not be defined~" # declared in bootstrap.inc.php - "~expects int, float given~" # this will work - "~expects bool~" # truthy values - "~fread expects int<1, max>, 100000~" # 1e6