'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 'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com 'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt '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 '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 current language * @return string */ function get_lang() { global $LANG; return $LANG; } /** Translate string * @param string * @param int * @return string */ function lang($idf, $number = null) { global $LANG, $translations; $translation = ($translations[$idf] ? $translations[$idf] : $idf); if (is_array($translation)) { $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 == 'bs' || $LANG == 'ru' || $LANG == 'sr' || $LANG == '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]; } $args = func_get_args(); array_shift($args); $format = str_replace("%d", "%s", $translation); if ($format != $translation) { $args[0] = format_number($number); } return vsprintf($format, $args); } function switch_lang() { global $LANG, $langs; echo "
\n
"; echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();"); echo " \n"; echo "\n"; // $token may be empty in auth.inc.php echo "
\n
\n"; } if (isset($_POST["lang"]) && verify_token()) { // $error not yet available cookie("adminer_lang", $_POST["lang"]); $_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled $_SESSION["translations"] = array(); // used in compiled version redirect(remove_from_uri()); } $LANG = "en"; if (isset($langs[$_COOKIE["adminer_lang"]])) { cookie("adminer_lang", $_COOKIE["adminer_lang"]); $LANG = $_COOKIE["adminer_lang"]; } elseif (isset($langs[$_SESSION["lang"]])) { $LANG = $_SESSION["lang"]; } else { $accept_language = array(); preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', str_replace("_", "-", strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])), $matches, PREG_SET_ORDER); foreach ($matches as $match) { $accept_language[$match[1]] = (isset($match[3]) ? $match[3] : 1); } arsort($accept_language); foreach ($accept_language as $key => $q) { if (isset($langs[$key])) { $LANG = $key; break; } $key = preg_replace('~-.*~', '', $key); if (!isset($accept_language[$key]) && isset($langs[$key])) { $LANG = $key; break; } } }