]> git.joonet.de Git - adminer.git/commitdiff
Move $langs to langs()
authorJakub Vrana <jakub@vrana.cz>
Fri, 28 Mar 2025 17:26:48 +0000 (18:26 +0100)
committerJakub Vrana <jakub@vrana.cz>
Fri, 28 Mar 2025 17:39:30 +0000 (18:39 +0100)
adminer/include/bootstrap.inc.php
adminer/include/lang.inc.php
compile.php
lang.php
phpstan.neon

index cf1ae9f499f0ffa5469dfb9a3cd31f871bc467ca..050e6a455d8bfbbb3ad3cf420ddeeba83c28bca8 100644 (file)
@@ -39,7 +39,7 @@ if ($_GET["script"] == "version") {
        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
        $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
index 40a3da5c18cbc447c8e94103c53293433412cea7..e4f2a92058dd0f8f53b55f5af76e0e6024f893fc 100644 (file)
@@ -3,53 +3,58 @@ namespace Adminer;
 
 // not used in a single language version
 
-$langs = array(
-       'en' => 'English', // Jakub Vrána - https://www.vrana.cz
-       'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
-       'bg' => 'Български', // Deyan Delchev
-       'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com
-       'bs' => 'Bosanski', // Emir Kurtovic
-       'ca' => 'Català', // Joan Llosas
-       'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
-       'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
-       'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
-       'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
-       'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
-       'et' => 'Eesti', // Priit Kallas
-       'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com
-       'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
-       'fr' => 'Français', // Francis Gagné, Aurélien Royer
-       'gl' => 'Galego', // Eduardo Penabad Ramos
-       'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/
-       'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
-       'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
-       'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
-       'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
-       'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
-       'ko' => '한국어', // dalli - skcha67@gmail.com
-       'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
-       'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
-       'ms' => 'Bahasa Melayu', // Pisyek
-       'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
-       'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
-       'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
-       'pt' => 'Português', // André Dias
-       'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
-       'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
-       'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/
-       'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
-       'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
-       'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
-       'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle
-       'ta' => 'த‌மிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
-       'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
-       'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.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
-);
+/** Get available languages
+* @return string[]
+*/
+function langs(): array {
+       return array(
+               'en' => 'English', // Jakub Vrána - https://www.vrana.cz
+               'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
+               'bg' => 'Български', // Deyan Delchev
+               'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com
+               'bs' => 'Bosanski', // Emir Kurtovic
+               'ca' => 'Català', // Joan Llosas
+               'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
+               'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
+               'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
+               'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
+               'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
+               'et' => 'Eesti', // Priit Kallas
+               'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com
+               'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
+               'fr' => 'Français', // Francis Gagné, Aurélien Royer
+               'gl' => 'Galego', // Eduardo Penabad Ramos
+               'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/
+               'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
+               'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
+               'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
+               'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
+               'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
+               'ko' => '한국어', // dalli - skcha67@gmail.com
+               'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
+               'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
+               'ms' => 'Bahasa Melayu', // Pisyek
+               'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
+               'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
+               'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
+               'pt' => 'Português', // André Dias
+               'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
+               'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
+               'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/
+               'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
+               'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
+               'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
+               'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle
+               'ta' => 'த‌மிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
+               'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
+               'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.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
 * @param literal-string $idf
@@ -84,9 +89,8 @@ function lang(string $idf, $number = null): string {
 }
 
 function switch_lang(): void {
-       global $langs;
        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_token(get_token()); // $token may be empty in auth.inc.php
        echo "</div>\n</form>\n";
@@ -100,10 +104,10 @@ if (isset($_POST["lang"]) && verify_token()) { // $error not yet available
 }
 
 $LANG = "en";
-if (isset($langs[$_COOKIE["adminer_lang"]])) {
+if (idx(langs(), $_COOKIE["adminer_lang"])) {
        cookie("adminer_lang", $_COOKIE["adminer_lang"]);
        $LANG = $_COOKIE["adminer_lang"];
-} elseif (isset($langs[$_SESSION["lang"]])) {
+} elseif (idx(langs(), $_SESSION["lang"])) {
        $LANG = $_SESSION["lang"];
 } else {
        $accept_language = array();
@@ -113,12 +117,12 @@ if (isset($langs[$_COOKIE["adminer_lang"]])) {
        }
        arsort($accept_language);
        foreach ($accept_language as $key => $q) {
-               if (isset($langs[$key])) {
+               if (idx(langs(), $key)) {
                        $LANG = $key;
                        break;
                }
                $key = preg_replace('~-.*~', '', $key);
-               if (!isset($accept_language[$key]) && isset($langs[$key])) {
+               if (!isset($accept_language[$key]) && idx(langs(), $key)) {
                        $LANG = $key;
                        break;
                }
index c9e8274aab105158162185cb81a72eae585b2fa5..c8d27602fb18fa215177c0d02fe71b808236416c 100755 (executable)
@@ -161,12 +161,12 @@ function lzw_compress($string) {
 }
 
 function put_file_lang($match) {
-       global $lang_ids, $project, $langs;
+       global $lang_ids, $project;
        if ($_SESSION["lang"]) {
                return "";
        }
        $return = "";
-       foreach ($langs as $lang => $val) {
+       foreach (Adminer\langs() as $lang => $val) {
                include __DIR__ . "/adminer/lang/$lang.inc.php"; // assign $translations
                $translation_ids = array_flip($lang_ids); // default translation
                foreach ($translations as $key => $val) {
@@ -269,8 +269,9 @@ if (file_exists(__DIR__ . $driver_path)) {
 
 unset($_COOKIE["adminer_lang"]);
 $_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";
-if (isset($langs[$_SESSION["lang"]])) {
+if (Adminer\idx(Adminer\langs(), $_SESSION["lang"])) {
        include __DIR__ . "/adminer/lang/$_SESSION[lang].inc.php";
        array_shift($_SERVER["argv"]);
 }
index 972d96c36a78063dad3d4471e58ccca11efd01f3..72b35802c6440b48f5063a3b350ea4e47d4f2633 100755 (executable)
--- a/lang.php
+++ b/lang.php
@@ -6,7 +6,7 @@ unset($_COOKIE["adminer_lang"]);
 $_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session
 if (isset($_SESSION["lang"])) {
        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";
                exit(1);
        }
index 0e1c05a2f63423b169e5af4c9802013d7900808b..5b5195507d4ee2d24996ec96a215bdd0247b3929 100644 (file)
@@ -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|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 bool~" # truthy values
                - "~fread expects int<1, max>, 100000~" # 1e6