diff --git a/CHANGELOG.md b/CHANGELOG.md index bbd56273..0288b6d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ - MS SQL: Limit one INSERT in export to 1000 rows (bug #983) - CSS: Add logo - Editor: Move mass sending e-mails to a plugin -- Plugins: Allow formatting translations using Adminer\lang_format() +- Plugins: Support translations by extending Adminer\Plugin - New plugin: Configure options by end-users and store them to a cookie - New plugin: Configure menu table links - New plugin: Set up driver, server and database in Adminer Editor diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index fbd21d41..4b851137 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -79,14 +79,13 @@ include "../adminer/drivers/oracle.inc.php"; include "../adminer/drivers/mssql.inc.php"; include "./include/adminer.inc.php"; include "../adminer/include/plugins.inc.php"; +include "../adminer/include/plugin.inc.php"; -if (function_exists('adminer_object')) { - Adminer::$instance = adminer_object(); -} elseif (is_dir("adminer-plugins") || file_exists("adminer-plugins.php")) { - Adminer::$instance = new Plugins(null); -} else { - Adminer::$instance = new Adminer; -} +Adminer::$instance = + (function_exists('adminer_object') ? adminer_object() : + (is_dir("adminer-plugins") || file_exists("adminer-plugins.php") ? new Plugins(null) : + new Adminer +)); // this is matched by compile.php include "../adminer/drivers/mysql.inc.php"; // must be included as last driver diff --git a/adminer/include/plugin.inc.php b/adminer/include/plugin.inc.php new file mode 100644 index 00000000..7b78b5d2 --- /dev/null +++ b/adminer/include/plugin.inc.php @@ -0,0 +1,16 @@ +>[] */ protected static $translations = array(); // key is language code + + /** Translate a string from static::$translations; use Adminer\lang() for strings used by Adminer + * @param literal-string $idf + * @param float|string $number + */ + protected function lang(string $idf, $number = null) { + $args = func_get_args(); + $args[0] = idx(static::$translations[LANG], $idf) ?: $idf; + return call_user_func_array('Adminer\lang_format', $args); + } +} diff --git a/adminer/include/version.inc.php b/adminer/include/version.inc.php index bc354f40..4415f8e3 100644 --- a/adminer/include/version.inc.php +++ b/adminer/include/version.inc.php @@ -1,4 +1,4 @@ array( 'Configuration' => 'Konfigurace', diff --git a/plugins/menu-links.php b/plugins/menu-links.php index 4ba89f0d..e9b53580 100644 --- a/plugins/menu-links.php +++ b/plugins/menu-links.php @@ -6,7 +6,7 @@ * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) */ -class AdminerMenuLinks { +class AdminerMenuLinks extends Adminer\Plugin { private $menu; /** @param ''|'table'|'select'|'auto' $menu see config() for explanation */ @@ -65,10 +65,6 @@ class AdminerMenuLinks { return true; } - protected function lang($idf, $number = null) { - return Adminer\lang_format(Adminer\idx(self::$translations[Adminer\LANG], $idf) ?: $idf, $number); - } - protected static $translations = array( 'cs' => array( 'Menu table links' => 'Odkazy na tabulky v menu', diff --git a/plugins/select-email.php b/plugins/select-email.php index 6a908a28..acef4676 100644 --- a/plugins/select-email.php +++ b/plugins/select-email.php @@ -6,7 +6,7 @@ * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) */ -class AdminerSelectEmail { +class AdminerSelectEmail extends Adminer\Plugin { function selectEmailPrint($emailFields, $columns) { if ($emailFields) { @@ -100,11 +100,7 @@ class AdminerSelectEmail { return mail($email, $this->emailHeader($subject), $beginning . $message . $attachments, $headers); } - private function lang($idf, $number = null) { - return Adminer\lang_format(Adminer\idx(self::$translations[Adminer\LANG], $idf) ?: $idf, $number); - } - - private static $translations = array( + protected static $translations = array( 'ar' => array('E-mail' => 'البريد الإلكتروني', 'From' => 'من', 'Subject' => 'الموضوع', 'Send' => 'إرسال', '%d e-mail(s) have been sent.' => 'تم إرسال %d رسالة.', 'Attachments' => 'ملفات مرفقة'), 'bg' => array('E-mail' => 'E-mail', 'From' => 'От', 'Subject' => 'Тема', 'Attachments' => 'Прикачени', 'Send' => 'Изпращане', '%d e-mail(s) have been sent.' => array('%d писмо беше изпратено.', '%d писма бяха изпратени.')), 'bn' => array('E-mail' => '​​ই-মেইল', 'From' => 'থেকে', 'Subject' => 'বিষয়', 'Send' => 'পাঠান', '%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'), 'Attachments' => 'সংযুক্তিগুলো'), diff --git a/plugins/sql-gemini.php b/plugins/sql-gemini.php index 23cd27ed..6ec113d7 100644 --- a/plugins/sql-gemini.php +++ b/plugins/sql-gemini.php @@ -9,7 +9,7 @@ * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) */ -class AdminerSqlGemini { +class AdminerSqlGemini extends Adminer\Plugin { private $apiKey; private $model; @@ -92,11 +92,7 @@ geminiText.onkeydown = event => { array( 'Ask Gemini' => 'Zeptat se Gemini', 'Just a sec...' => 'Chviličku...',