1
0
mirror of https://github.com/vrana/adminer.git synced 2025-08-06 14:46:36 +02:00

Move $langs to langs()

This commit is contained in:
Jakub Vrana
2025-03-28 18:26:48 +01:00
parent adab18da78
commit f6d311457e
5 changed files with 64 additions and 59 deletions

View File

@@ -39,7 +39,7 @@ if ($_GET["script"] == "version") {
exit; exit;
} }
global $adminer, $connection, $driver, $drivers, $error, $HTTPS, $langs, $permanent, $has_token, $token, $translations; // allows including Adminer inside a function global $adminer, $connection, $driver, $drivers, $error, $HTTPS, $permanent, $has_token, $token, $translations; // allows including Adminer inside a function
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"]; $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];

View File

@@ -3,53 +3,58 @@ namespace Adminer;
// not used in a single language version // not used in a single language version
$langs = array( /** Get available languages
'en' => 'English', // Jakub Vrána - https://www.vrana.cz * @return string[]
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr */
'bg' => 'Български', // Deyan Delchev function langs(): array {
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com return array(
'bs' => 'Bosanski', // Emir Kurtovic 'en' => 'English', // Jakub Vrána - https://www.vrana.cz
'ca' => 'Català', // Joan Llosas 'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz 'bg' => 'Български', // Deyan Delchev
'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk 'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com 'bs' => 'Bosanski', // Emir Kurtovic
'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr 'ca' => 'Català', // Joan Llosas
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com 'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
'et' => 'Eesti', // Priit Kallas 'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com 'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/ 'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
'fr' => 'Français', // Francis Gagné, Aurélien Royer 'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
'gl' => 'Galego', // Eduardo Penabad Ramos 'et' => 'Eesti', // Priit Kallas
'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/ 'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu 'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org 'fr' => 'Français', // Francis Gagné, Aurélien Royer
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti 'gl' => 'Galego', // Eduardo Penabad Ramos
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/ 'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org 'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
'ko' => '한국어', // dalli - skcha67@gmail.com 'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt 'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com 'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
'ms' => 'Bahasa Melayu', // Pisyek 'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be 'ko' => '한국어', // dalli - skcha67@gmail.com
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com 'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/ 'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
'pt' => 'Português', // André Dias 'ms' => 'Bahasa Melayu', // Pisyek
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br 'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com 'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/ 'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz 'pt' => 'Português', // André Dias
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com 'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com 'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle 'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/
'ta' => 'த‌மிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com 'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/ 'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com 'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
'uk' => 'Українська', // Valerii Kryzhov 'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle
'uz' => 'Oʻzbekcha', // Junaydullaev Inoyatullokhon - https://av.uz/ 'ta' => 'த‌மிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail 'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com 'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
'zh-tw' => '繁體中文', // http://tzangms.com 'uk' => 'Українська', // Valerii Kryzhov
); 'uz' => 'Oʻzbekcha', // Junaydullaev Inoyatullokhon - https://av.uz/
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com
'zh-tw' => '繁體中文', // http://tzangms.com
);
}
/** Translate string /** Translate string
* @param literal-string $idf * @param literal-string $idf
@@ -84,9 +89,8 @@ function lang(string $idf, $number = null): string {
} }
function switch_lang(): void { function switch_lang(): void {
global $langs;
echo "<form action='' method='post'>\n<div id='lang'>"; echo "<form action='' method='post'>\n<div id='lang'>";
echo lang('Language') . ": " . html_select("lang", $langs, LANG, "this.form.submit();"); echo lang('Language') . ": " . html_select("lang", langs(), LANG, "this.form.submit();");
echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n"; echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n";
echo input_token(get_token()); // $token may be empty in auth.inc.php echo input_token(get_token()); // $token may be empty in auth.inc.php
echo "</div>\n</form>\n"; echo "</div>\n</form>\n";
@@ -100,10 +104,10 @@ if (isset($_POST["lang"]) && verify_token()) { // $error not yet available
} }
$LANG = "en"; $LANG = "en";
if (isset($langs[$_COOKIE["adminer_lang"]])) { if (idx(langs(), $_COOKIE["adminer_lang"])) {
cookie("adminer_lang", $_COOKIE["adminer_lang"]); cookie("adminer_lang", $_COOKIE["adminer_lang"]);
$LANG = $_COOKIE["adminer_lang"]; $LANG = $_COOKIE["adminer_lang"];
} elseif (isset($langs[$_SESSION["lang"]])) { } elseif (idx(langs(), $_SESSION["lang"])) {
$LANG = $_SESSION["lang"]; $LANG = $_SESSION["lang"];
} else { } else {
$accept_language = array(); $accept_language = array();
@@ -113,12 +117,12 @@ if (isset($langs[$_COOKIE["adminer_lang"]])) {
} }
arsort($accept_language); arsort($accept_language);
foreach ($accept_language as $key => $q) { foreach ($accept_language as $key => $q) {
if (isset($langs[$key])) { if (idx(langs(), $key)) {
$LANG = $key; $LANG = $key;
break; break;
} }
$key = preg_replace('~-.*~', '', $key); $key = preg_replace('~-.*~', '', $key);
if (!isset($accept_language[$key]) && isset($langs[$key])) { if (!isset($accept_language[$key]) && idx(langs(), $key)) {
$LANG = $key; $LANG = $key;
break; break;
} }

View File

@@ -161,12 +161,12 @@ function lzw_compress($string) {
} }
function put_file_lang($match) { function put_file_lang($match) {
global $lang_ids, $project, $langs; global $lang_ids, $project;
if ($_SESSION["lang"]) { if ($_SESSION["lang"]) {
return ""; return "";
} }
$return = ""; $return = "";
foreach ($langs as $lang => $val) { foreach (Adminer\langs() as $lang => $val) {
include __DIR__ . "/adminer/lang/$lang.inc.php"; // assign $translations include __DIR__ . "/adminer/lang/$lang.inc.php"; // assign $translations
$translation_ids = array_flip($lang_ids); // default translation $translation_ids = array_flip($lang_ids); // default translation
foreach ($translations as $key => $val) { foreach ($translations as $key => $val) {
@@ -269,8 +269,9 @@ if (file_exists(__DIR__ . $driver_path)) {
unset($_COOKIE["adminer_lang"]); unset($_COOKIE["adminer_lang"]);
$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session $_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session
include __DIR__ . "/adminer/include/functions.inc.php";
include __DIR__ . "/adminer/include/lang.inc.php"; include __DIR__ . "/adminer/include/lang.inc.php";
if (isset($langs[$_SESSION["lang"]])) { if (Adminer\idx(Adminer\langs(), $_SESSION["lang"])) {
include __DIR__ . "/adminer/lang/$_SESSION[lang].inc.php"; include __DIR__ . "/adminer/lang/$_SESSION[lang].inc.php";
array_shift($_SERVER["argv"]); array_shift($_SERVER["argv"]);
} }

View File

@@ -6,7 +6,7 @@ unset($_COOKIE["adminer_lang"]);
$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session $_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session
if (isset($_SESSION["lang"])) { if (isset($_SESSION["lang"])) {
include __DIR__ . "/adminer/include/lang.inc.php"; include __DIR__ . "/adminer/include/lang.inc.php";
if (isset($_SERVER["argv"][2]) || (!isset($langs[$_SESSION["lang"]]) && $_SESSION["lang"] != "xx")) { if (isset($_SERVER["argv"][2]) || (!idx(Adminer\langs(), $_SESSION["lang"]) && $_SESSION["lang"] != "xx")) {
echo "Usage: php lang.php [lang]\nPurpose: Update adminer/lang/*.inc.php from source code messages.\n"; echo "Usage: php lang.php [lang]\nPurpose: Update adminer/lang/*.inc.php from source code messages.\n";
exit(1); exit(1);
} }

View File

@@ -12,7 +12,7 @@ parameters:
- identifier: includeOnce.fileNotFound # ./adminer-plugins.php - identifier: includeOnce.fileNotFound # ./adminer-plugins.php
- "~^Function (set_magic_quotes_runtime|mysql_)~" # PHP < 7 functions - "~^Function (set_magic_quotes_runtime|mysql_)~" # PHP < 7 functions
- "~an unknown class OCI-?Lob~" # this looks like PHPStan bug - "~an unknown class OCI-?Lob~" # this looks like PHPStan bug
- "~^Variable \\$(adminer|connection|driver|drivers|error|HTTPS|langs|permanent|has_token|token|translations) might not be defined~" # declared in bootstrap.inc.php - "~^Variable \\$(adminer|connection|driver|drivers|error|HTTPS|permanent|has_token|token|translations) might not be defined~" # declared in bootstrap.inc.php
- "~expects int, float given~" # this will work - "~expects int, float given~" # this will work
- "~expects bool~" # truthy values - "~expects bool~" # truthy values
- "~fread expects int<1, max>, 100000~" # 1e6 - "~fread expects int<1, max>, 100000~" # 1e6