From 6c9ac635083cd9d18c90cc971bdad016734ae33a Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Fri, 4 Apr 2025 09:51:08 +0200 Subject: [PATCH] Editor: Split sending e-mails to a plugin --- CHANGELOG.md | 1 + adminer/lang/ar.inc.php | 6 -- adminer/lang/bg.inc.php | 7 -- adminer/lang/bn.inc.php | 6 -- adminer/lang/bs.inc.php | 7 -- adminer/lang/ca.inc.php | 6 -- adminer/lang/cs.inc.php | 7 -- adminer/lang/da.inc.php | 6 -- adminer/lang/de.inc.php | 6 -- adminer/lang/el.inc.php | 7 -- adminer/lang/en.inc.php | 1 - adminer/lang/es.inc.php | 6 -- adminer/lang/et.inc.php | 6 -- adminer/lang/fa.inc.php | 7 -- adminer/lang/fi.inc.php | 7 -- adminer/lang/fr.inc.php | 6 -- adminer/lang/gl.inc.php | 6 -- adminer/lang/he.inc.php | 6 -- adminer/lang/hu.inc.php | 6 -- adminer/lang/id.inc.php | 7 -- adminer/lang/it.inc.php | 6 -- adminer/lang/ja.inc.php | 6 -- adminer/lang/ka.inc.php | 6 -- adminer/lang/ko.inc.php | 6 -- adminer/lang/lt.inc.php | 7 -- adminer/lang/lv.inc.php | 6 -- adminer/lang/ms.inc.php | 7 -- adminer/lang/nl.inc.php | 6 -- adminer/lang/no.inc.php | 6 -- adminer/lang/pl.inc.php | 7 -- adminer/lang/pt-br.inc.php | 6 -- adminer/lang/pt.inc.php | 6 -- adminer/lang/ro.inc.php | 6 -- adminer/lang/ru.inc.php | 6 -- adminer/lang/sk.inc.php | 6 -- adminer/lang/sl.inc.php | 7 -- adminer/lang/sr.inc.php | 7 -- adminer/lang/sv.inc.php | 7 -- adminer/lang/ta.inc.php | 6 -- adminer/lang/th.inc.php | 6 -- adminer/lang/tr.inc.php | 7 -- adminer/lang/uk.inc.php | 7 -- adminer/lang/uz.inc.php | 7 -- adminer/lang/vi.inc.php | 7 -- adminer/lang/xx.inc.php | 7 -- adminer/lang/zh-tw.inc.php | 7 -- adminer/lang/zh.inc.php | 8 -- editor/include/adminer.inc.php | 45 ---------- plugins/select-email.php | 154 +++++++++++++++++++++++++++++++++ 49 files changed, 155 insertions(+), 337 deletions(-) create mode 100644 plugins/select-email.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c163939..4356a573 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - MySQL: Display number of found rows in group queries (regression from 5.1.1) - non-MySQL: Parse '--' without trailing space as comment in SQL command (bug SF-842) - CSS: Add logo +- Editor: Move mass sending e-mails to a plugin - Plugins: Allow formatting translations using Adminer\lang_format() - New plugin: Set up driver, server and database in Adminer Editor diff --git a/adminer/lang/ar.inc.php b/adminer/lang/ar.inc.php index 5c640223..09f4af2a 100644 --- a/adminer/lang/ar.inc.php +++ b/adminer/lang/ar.inc.php @@ -212,11 +212,6 @@ Lang::$translations = array( 'Binary' => 'ثنائية', 'Lists' => 'قوائم', 'Editor' => 'المحرر', - 'E-mail' => 'البريد الإلكتروني', - 'From' => 'من', - 'Subject' => 'الموضوع', - 'Send' => 'إرسال', - '%d e-mail(s) have been sent.' => 'تم إرسال %d رسالة.', 'Webserver file %s' => 'ملف %s من خادم الويب', 'File does not exist.' => 'الملف غير موجود.', '%d in total' => '%d في المجموع', @@ -251,7 +246,6 @@ Lang::$translations = array( 'Network' => 'شبكة', 'Geometry' => 'هندسة', 'File exists.' => 'الملف موجود.', - 'Attachments' => 'ملفات مرفقة', 'Item%s has been inserted.' => '%sتم إدراج العنصر.', 'now' => 'الآن', '%d query(s) executed OK.' => array('تم تنفيذ الاستعلام %d بنجاح.', 'تم تنفيذ الاستعلامات %d بنجاح.'), diff --git a/adminer/lang/bg.inc.php b/adminer/lang/bg.inc.php index 37c5443f..7ad1b8dc 100644 --- a/adminer/lang/bg.inc.php +++ b/adminer/lang/bg.inc.php @@ -279,13 +279,6 @@ Lang::$translations = array( 'Delete' => 'Изтриване', 'You have no privileges to update this table.' => 'Нямате праве за обновяване на таблицата.', - 'E-mail' => 'E-mail', - 'From' => 'От', - 'Subject' => 'Тема', - 'Attachments' => 'Прикачени', - 'Send' => 'Изпращане', - '%d e-mail(s) have been sent.' => array('%d писмо беше изпратено.', '%d писма бяха изпратени.'), - // data type descriptions 'Numbers' => 'Числа', 'Date and time' => 'Дата и час', diff --git a/adminer/lang/bn.inc.php b/adminer/lang/bn.inc.php index 452d9b5c..76ce7481 100644 --- a/adminer/lang/bn.inc.php +++ b/adminer/lang/bn.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'বাইনারি', 'Lists' => 'তালিকা', 'Editor' => 'সম্পাদক', - 'E-mail' => '​​ই-মেইল', - 'From' => 'থেকে', - 'Subject' => 'বিষয়', - 'Send' => 'পাঠান', - '%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'), 'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s', 'File does not exist.' => 'ফাইলটির কোন অস্তিত্ব নেই।', '%d in total' => 'সর্বমোটঃ %d টি', @@ -252,7 +247,6 @@ Lang::$translations = array( 'Network' => 'নেটওয়ার্ক', 'Geometry' => 'জ্যামিতি', 'File exists.' => 'ফাইল রয়েছে।', - 'Attachments' => 'সংযুক্তিগুলো', '%d query(s) executed OK.' => array('SQL-অনুসন্ধান সফলভাবে সম্পন্ন হয়েছে।', '%d SQL-অনুসন্ধানসমূহ সফলভাবে সম্পন্ন হয়েছে।'), 'Show only errors' => 'শুধুমাত্র ত্রুটিগুলো দেখান', 'Refresh' => 'রিফ্রেশ', diff --git a/adminer/lang/bs.inc.php b/adminer/lang/bs.inc.php index c1f7e587..56a73365 100644 --- a/adminer/lang/bs.inc.php +++ b/adminer/lang/bs.inc.php @@ -264,13 +264,6 @@ Lang::$translations = array( 'Delete' => 'Izbriši', 'Modify' => 'Izmjene', - 'E-mail' => 'El. pošta', - 'From' => 'Od', - 'Subject' => 'Naslov', - 'Attachments' => 'Prilozi', - 'Send' => 'Pošalji', - '%d e-mail(s) have been sent.' => array('%d poruka el. pošte je poslata.', '%d poruke el. pošte su poslate.', '%d poruka el. pošte je poslato.'), - // data type descriptions 'Numbers' => 'Broj', 'Date and time' => 'Datum i vrijeme', diff --git a/adminer/lang/ca.inc.php b/adminer/lang/ca.inc.php index f64607bf..94f2b9ec 100644 --- a/adminer/lang/ca.inc.php +++ b/adminer/lang/ca.inc.php @@ -206,11 +206,6 @@ Lang::$translations = array( 'History' => 'Història', 'Variables' => 'Variables', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes d\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\'estar indexada i les dades referenciades han d\'existir.', - 'E-mail' => 'Correu electrònic', - 'From' => 'De', - 'Subject' => 'Assumpte', - 'Send' => 'Envia', - '%d e-mail(s) have been sent.' => array('S\'ha enviat %d correu electrònic.', 'S\'han enviat %d correus electrònics.'), 'Run file' => 'Executa el fitxer', 'Numbers' => 'Nombres', 'Date and time' => 'Data i hora', @@ -225,7 +220,6 @@ Lang::$translations = array( 'File does not exist.' => 'El fitxer no existeix.', 'Permanent login' => 'Sessió permanent', '%d in total' => '%d en total', - 'Attachments' => 'Adjuncions', 'System' => 'Sistema', 'last' => 'darrera', 'Network' => 'Xarxa', diff --git a/adminer/lang/cs.inc.php b/adminer/lang/cs.inc.php index 0973e419..ff945c6d 100644 --- a/adminer/lang/cs.inc.php +++ b/adminer/lang/cs.inc.php @@ -295,13 +295,6 @@ Lang::$translations = array( 'Delete' => 'Smazat', 'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.', - 'E-mail' => 'E-mail', - 'From' => 'Odesílatel', - 'Subject' => 'Předmět', - 'Attachments' => 'Přílohy', - 'Send' => 'Odeslat', - '%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.'), - // data type descriptions 'Numbers' => 'Čísla', 'Date and time' => 'Datum a čas', diff --git a/adminer/lang/da.inc.php b/adminer/lang/da.inc.php index 2543febe..3c695150 100644 --- a/adminer/lang/da.inc.php +++ b/adminer/lang/da.inc.php @@ -238,12 +238,6 @@ Lang::$translations = array( 'Clone' => 'Klon', 'Delete' => 'Slet', 'You have no privileges to update this table.' => 'Du mangler rettigheder til at ændre denne tabellen.', - 'E-mail' => 'E-mail', - 'From' => 'Fra', - 'Subject' => 'Titel', - 'Attachments' => 'Vedhæft', - 'Send' => 'Send', - '%d e-mail(s) have been sent.' => array('%d email sendt.', '%d emails sendt.'), 'Numbers' => 'Nummer', 'Date and time' => 'Dato og tid', 'Strings' => 'Strenge', diff --git a/adminer/lang/de.inc.php b/adminer/lang/de.inc.php index 27d95e67..bcd152b2 100644 --- a/adminer/lang/de.inc.php +++ b/adminer/lang/de.inc.php @@ -215,11 +215,6 @@ Lang::$translations = array( 'Binary' => 'Binär', 'Lists' => 'Listen', 'Editor' => 'Editor', - 'E-mail' => 'E-Mail', - 'From' => 'Von', - 'Subject' => 'Betreff', - 'Send' => 'Abschicken', - '%d e-mail(s) have been sent.' => array('%d E-Mail abgeschickt.', '%d E-Mails abgeschickt.'), 'Webserver file %s' => 'Webserver Datei %s', 'File does not exist.' => 'Datei existiert nicht.', '%d in total' => '%d insgesamt', @@ -254,7 +249,6 @@ Lang::$translations = array( 'Network' => 'Netzwerk', 'Geometry' => 'Geometrie', 'File exists.' => 'Datei existiert schon.', - 'Attachments' => 'Anhänge', '%d query(s) executed OK.' => array('SQL-Abfrage erfolgreich ausgeführt.', '%d SQL-Abfragen erfolgreich ausgeführt.'), 'Show only errors' => 'Nur Fehler anzeigen', 'Refresh' => 'Aktualisieren', diff --git a/adminer/lang/el.inc.php b/adminer/lang/el.inc.php index 98cefc1d..1923ebe2 100644 --- a/adminer/lang/el.inc.php +++ b/adminer/lang/el.inc.php @@ -279,13 +279,6 @@ Lang::$translations = array( 'Delete' => 'Διαγραφή', 'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.', - 'E-mail' => 'E-mail', - 'From' => 'Από', - 'Subject' => 'Θέμα', - 'Attachments' => 'Συνημμένα', - 'Send' => 'Αποστολή', - '%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'), - // data type descriptions 'Numbers' => 'Αριθμοί', 'Date and time' => 'Ημερομηνία και ώρα', diff --git a/adminer/lang/en.inc.php b/adminer/lang/en.inc.php index 3dcd6355..7796a9c2 100644 --- a/adminer/lang/en.inc.php +++ b/adminer/lang/en.inc.php @@ -11,7 +11,6 @@ Lang::$translations = array( '%d row(s)' => array('%d row', '%d rows'), '%d item(s) have been affected.' => array('%d item has been affected.', '%d items have been affected.'), '%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'), - '%d e-mail(s) have been sent.' => array('%d e-mail has been sent.', '%d e-mails have been sent.'), '%d in total' => '%d in total', '%d query(s) executed OK.' => array('%d query executed OK.', '%d queries executed OK.'), ); diff --git a/adminer/lang/es.inc.php b/adminer/lang/es.inc.php index 1b2733e1..308f04a1 100644 --- a/adminer/lang/es.inc.php +++ b/adminer/lang/es.inc.php @@ -222,11 +222,6 @@ Lang::$translations = array( 'Binary' => 'Binario', 'Lists' => 'Listas', 'Editor' => 'Editor', - 'E-mail' => 'Email', - 'From' => 'De', - 'Subject' => 'Asunto', - 'Send' => 'Enviar', - '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Webserver file %s' => 'Archivo de servidor web %s', 'File does not exist.' => 'Ese archivo no existe.', '%d in total' => '%d en total', @@ -261,7 +256,6 @@ Lang::$translations = array( 'Network' => 'Red', 'Geometry' => 'Geometría', 'File exists.' => 'Ese archivo ya existe.', - 'Attachments' => 'Adjuntos', '%d query(s) executed OK.' => array('%d sentencia SQL ejecutada correctamente.', '%d sentencias SQL ejecutadas correctamente.'), 'Show only errors' => 'Mostrar solamente errores', 'Refresh' => 'Actualizar', diff --git a/adminer/lang/et.inc.php b/adminer/lang/et.inc.php index 099194c0..ebd3da00 100644 --- a/adminer/lang/et.inc.php +++ b/adminer/lang/et.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binaar', 'Lists' => 'Listid', 'Editor' => 'Redaktor', - 'E-mail' => 'E-post', - 'From' => 'Kellelt', - 'Subject' => 'Pealkiri', - 'Send' => 'Saada', - '%d e-mail(s) have been sent.' => 'Saadetud kirju: %d.', 'Webserver file %s' => 'Fail serveris: %s', 'File does not exist.' => 'Faili ei leitud.', '%d in total' => 'Kokku: %d', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Võrk (network)', 'Geometry' => 'Geomeetria', 'File exists.' => 'Fail juba eksisteerib.', - 'Attachments' => 'Manused', '%d query(s) executed OK.' => array('%d päring edukalt käivitatud.', '%d päringut edukalt käivitatud.'), 'Show only errors' => 'Kuva vaid veateateid', 'Refresh' => 'Uuenda', diff --git a/adminer/lang/fa.inc.php b/adminer/lang/fa.inc.php index 13586eb7..3c44fe85 100644 --- a/adminer/lang/fa.inc.php +++ b/adminer/lang/fa.inc.php @@ -277,13 +277,6 @@ Lang::$translations = array( 'Delete' => 'حذف', 'You have no privileges to update this table.' => 'شما اختیار ویرایش این جدول را ندارید.', - 'E-mail' => 'پست الکترونیک', - 'From' => 'فرستنده', - 'Subject' => 'موضوع', - 'Attachments' => 'پیوست ها', - 'Send' => 'ارسال', - '%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.'), - // data type descriptions 'Numbers' => 'اعداد', 'Date and time' => 'تاریخ و زمان', diff --git a/adminer/lang/fi.inc.php b/adminer/lang/fi.inc.php index bd11f9ce..b9b534c8 100644 --- a/adminer/lang/fi.inc.php +++ b/adminer/lang/fi.inc.php @@ -279,13 +279,6 @@ Lang::$translations = array( 'Delete' => 'Poista', 'You have no privileges to update this table.' => 'Sinulla ei ole oikeutta päivittää tätä taulua.', - 'E-mail' => 'S-posti', - 'From' => 'Lähettäjä', - 'Subject' => 'Aihe', - 'Attachments' => 'Liitteet', - 'Send' => 'Lähetä', - '%d e-mail(s) have been sent.' => array('% sähköpostiviestiä lähetetty.', '% sähköpostiviestiä lähetetty.'), - // data type descriptions 'Numbers' => 'Numerot', 'Date and time' => 'Päiväys ja aika', diff --git a/adminer/lang/fr.inc.php b/adminer/lang/fr.inc.php index 5f84a065..a0b4a1ab 100644 --- a/adminer/lang/fr.inc.php +++ b/adminer/lang/fr.inc.php @@ -212,11 +212,6 @@ Lang::$translations = array( 'Binary' => 'Binaires', 'Lists' => 'Listes', 'Editor' => 'Éditeur', - 'E-mail' => 'Courriel', - 'From' => 'De', - 'Subject' => 'Sujet', - 'Send' => 'Envoyer', - '%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'), 'Webserver file %s' => 'Fichier %s du serveur Web', 'File does not exist.' => 'Le fichier est introuvable.', '%d in total' => '%d au total', @@ -252,7 +247,6 @@ Lang::$translations = array( 'Network' => 'Réseau', 'Geometry' => 'Géométrie', 'File exists.' => 'Le fichier existe.', - 'Attachments' => 'Pièces jointes', 'Item%s has been inserted.' => 'L\'élément%s a été inséré.', 'now' => 'maintenant', '%d query(s) executed OK.' => array('%d requête exécutée avec succès.', '%d requêtes exécutées avec succès.'), diff --git a/adminer/lang/gl.inc.php b/adminer/lang/gl.inc.php index 726eea77..00b6735a 100644 --- a/adminer/lang/gl.inc.php +++ b/adminer/lang/gl.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binario', 'Lists' => 'Listas', 'Editor' => 'Editor', - 'E-mail' => 'Email', - 'From' => 'De', - 'Subject' => 'Asunto', - 'Send' => 'Enviar', - '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Webserver file %s' => 'Ficheiro de servidor web %s', 'File does not exist.' => 'O ficheiro non existe.', '%d in total' => '%d en total', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Rede', 'Geometry' => 'Xeometría', 'File exists.' => 'O ficheiro xa existe.', - 'Attachments' => 'Adxuntos', '%d query(s) executed OK.' => array('%d consulta executada correctamente.', '%d consultas executadas correctamente.'), 'Show only errors' => 'Amosar só erros', 'Refresh' => 'Refrescar', diff --git a/adminer/lang/he.inc.php b/adminer/lang/he.inc.php index 97489126..d59f08f8 100644 --- a/adminer/lang/he.inc.php +++ b/adminer/lang/he.inc.php @@ -212,11 +212,6 @@ Lang::$translations = array( 'Binary' => 'בינארי', 'Lists' => 'רשימות', 'Editor' => 'עורך', - 'E-mail' => 'דוא"ל', - 'From' => 'מ:', - 'Subject' => 'נושא', - 'Send' => 'שלח', - '%d e-mail(s) have been sent.' => '%d הודעות דוא"ל נשלחו', 'Webserver file %s' => 'קובץ השרת %s', 'File does not exist.' => 'הקובץ אינו קיים', '%d in total' => '%d בסך הכל', @@ -251,7 +246,6 @@ Lang::$translations = array( 'Network' => 'רשת', 'Geometry' => 'גיאומטריה', 'File exists.' => 'קובץ קיים', - 'Attachments' => 'קבצים מצורפים', 'Item%s has been inserted.' => 'הפריט %s הוזן בהצלחה', 'now' => 'כעת', '%d query(s) executed OK.' => '%d שאילתות בוצעו בהצלחה', diff --git a/adminer/lang/hu.inc.php b/adminer/lang/hu.inc.php index 881a4961..902d50d0 100644 --- a/adminer/lang/hu.inc.php +++ b/adminer/lang/hu.inc.php @@ -206,11 +206,6 @@ Lang::$translations = array( 'History' => 'Történet', 'Variables' => 'Változók', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'A forrás és cél oszlopoknak azonos típusúak legyenek, a cél oszlopok indexeltek legyenek, és a hivatkozott adatnak léteznie kell.', - 'E-mail' => 'E-mail', - 'From' => 'Feladó', - 'Subject' => 'Tárgy', - 'Send' => 'Küldés', - '%d e-mail(s) have been sent.' => array('%d e-mail elküldve.', '%d e-mail elküldve.', '%d e-mail elküldve.'), 'Run file' => 'Fájl futtatása', 'Numbers' => 'Szám', 'Date and time' => 'Dátum és idő', @@ -225,7 +220,6 @@ Lang::$translations = array( 'File does not exist.' => 'A fájl nem létezik.', 'Permanent login' => 'Emlékezz rám', '%d in total' => 'összesen %d', - 'Attachments' => 'Csatolmány', 'System' => 'Adatbázis', 'last' => 'utolsó', 'Network' => 'Hálózat', diff --git a/adminer/lang/id.inc.php b/adminer/lang/id.inc.php index 5537b6f6..8debc378 100644 --- a/adminer/lang/id.inc.php +++ b/adminer/lang/id.inc.php @@ -259,13 +259,6 @@ Lang::$translations = array( 'Clone' => 'Gandakan', 'Delete' => 'Hapus', - 'E-mail' => 'Surel', - 'From' => 'Dari', - 'Subject' => 'Judul', - 'Attachments' => 'Lampiran', - 'Send' => 'Kirim', - '%d e-mail(s) have been sent.' => '%d surel berhasil dikirim.', - // data type descriptions 'Numbers' => 'Angka', 'Date and time' => 'Tanggal dan waktu', diff --git a/adminer/lang/it.inc.php b/adminer/lang/it.inc.php index 81287e21..b3f08d02 100644 --- a/adminer/lang/it.inc.php +++ b/adminer/lang/it.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binari', 'Lists' => 'Liste', 'Editor' => 'Editor', - 'E-mail' => 'E-mail', - 'From' => 'Da', - 'Subject' => 'Oggetto', - 'Send' => 'Invia', - '%d e-mail(s) have been sent.' => array('%d e-mail inviata.', '%d e-mail inviate.'), 'Webserver file %s' => 'Webserver file %s', 'File does not exist.' => 'Il file non esiste.', '%d in total' => '%d in totale', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Rete', 'Geometry' => 'Geometria', 'File exists.' => 'Il file esiste già.', - 'Attachments' => 'Allegati', '%d query(s) executed OK.' => array('%d query eseguita con successo.', '%d query eseguite con successo.'), 'Show only errors' => 'Mostra solo gli errori', 'Refresh' => 'Aggiorna', diff --git a/adminer/lang/ja.inc.php b/adminer/lang/ja.inc.php index 029b7b33..99c78b7c 100644 --- a/adminer/lang/ja.inc.php +++ b/adminer/lang/ja.inc.php @@ -243,11 +243,6 @@ Lang::$translations = array( 'Binary' => 'バイナリ', 'Lists' => 'リスト', 'Editor' => 'エディタ', - 'E-mail' => 'メール', - 'From' => '差出人', - 'Subject' => '題名', - 'Send' => '送信', - '%d e-mail(s) have been sent.' => '%d メールを送信しました。', 'Webserver file %s' => 'Webサーバファイル %s', 'File does not exist.' => 'ファイルは存在しません。', '%d in total' => '合計 %d', @@ -280,7 +275,6 @@ Lang::$translations = array( 'Network' => 'ネットワーク型', 'Geometry' => 'ジオメトリ型', 'File exists.' => 'ファイルが既に存在します。', - 'Attachments' => '添付ファイル', 'Item%s has been inserted.' => '%s項目を挿入しました。', 'now' => '現在の日時', '%d query(s) executed OK.' => '%d クエリーを実行しました。', diff --git a/adminer/lang/ka.inc.php b/adminer/lang/ka.inc.php index 97cc9666..e4d87c17 100644 --- a/adminer/lang/ka.inc.php +++ b/adminer/lang/ka.inc.php @@ -210,11 +210,6 @@ Lang::$translations = array( 'Binary' => 'ორობითი', 'Lists' => 'სია', 'Editor' => 'რედაქტორი', - 'E-mail' => 'ელ. ფოსტა', - 'From' => 'ავტორი:', - 'Subject' => 'თემა', - 'Send' => 'გაგზავნა', - '%d e-mail(s) have been sent.' => 'გაიგზავნა %d წერილი.', 'Webserver file %s' => 'ფაილი %s ვებსერვერზე', 'File does not exist.' => 'ასეთი ფაილი არ არსებობს.', '%d in total' => 'სულ %d', @@ -249,7 +244,6 @@ Lang::$translations = array( 'Network' => 'ქსელი', 'Geometry' => 'გეომეტრია', 'File exists.' => 'ფაილი უკვე არსებობს.', - 'Attachments' => 'მიმაგრებული ფაილები', '%d query(s) executed OK.' => '%d მოთხოვნა შესრულდა.', 'Show only errors' => 'მხოლოდ შეცდომები', 'Refresh' => 'განახლება', diff --git a/adminer/lang/ko.inc.php b/adminer/lang/ko.inc.php index 28e20738..53b87ee6 100644 --- a/adminer/lang/ko.inc.php +++ b/adminer/lang/ko.inc.php @@ -5,7 +5,6 @@ Lang::$translations = array( '$1-$3-$5' => '$1-$3-$5', '%.3f s' => '%.3f 초', '%d byte(s)' => '%d 바이트', - '%d e-mail(s) have been sent.' => '%d개 메일을 보냈습니다.', '%d in total' => '총 %d개', '%d item(s) have been affected.' => '%d개 항목을 갱신했습니다.', '%d process(es) have been killed.' => '%d개 프로세스를 강제 종료하였습니다.', @@ -38,7 +37,6 @@ Lang::$translations = array( 'anywhere' => '모든', 'Are you sure?' => '실행 하시겠습니까?', 'At given time' => '지정 시간', - 'Attachments' => '첨부 파일', 'Auto Increment' => '자동 증가', 'Binary' => '이진', 'Call' => '호출', @@ -80,7 +78,6 @@ Lang::$translations = array( 'Delete' => '삭제', 'descending' => '역순', 'Drop' => '삭제', - 'E-mail' => '메일', 'Edit all' => '모두 편집', 'Edit' => '편집', 'edit' => '편집', @@ -109,7 +106,6 @@ Lang::$translations = array( 'Foreign keys' => '외부 키', 'Format' => '형식', 'From server' => '서버에서 실행', - 'From' => '보낸 사람', 'Functions' => '함수', 'Geometry' => '기하 형', 'Grant' => '권한 부여', @@ -211,7 +207,6 @@ Lang::$translations = array( 'Select' => '선택', 'select' => '선택', 'Selected' => '선택됨', - 'Send' => '보내기', 'Sequence has been altered.' => '시퀀스를 변경했습니다.', 'Sequence has been created.' => '시퀀스를 추가했습니다.', 'Sequence has been dropped.' => '시퀀스를 제거했습니다.', @@ -230,7 +225,6 @@ Lang::$translations = array( 'Status' => '상태', 'Stop on error' => '오류의 경우 중지', 'Strings' => '문자열', - 'Subject' => '제목', 'System' => '데이터베이스 형식', 'Table has been altered.' => '테이블을 변경했습니다.', 'Table has been created.' => '테이블을 만들었습니다.', diff --git a/adminer/lang/lt.inc.php b/adminer/lang/lt.inc.php index e37b2e3b..64b2870c 100644 --- a/adminer/lang/lt.inc.php +++ b/adminer/lang/lt.inc.php @@ -257,13 +257,6 @@ Lang::$translations = array( 'Clone' => 'Klonuoti', 'Delete' => 'Trinti', - 'E-mail' => 'El. paštas', - 'From' => 'Nuo', - 'Subject' => 'Antraštė', - 'Attachments' => 'Priedai', - 'Send' => 'Siųsti', - '%d e-mail(s) have been sent.' => array('Išsiųstas %d laiškas.', 'Išsiųsti %d laiškai.', 'Išsiųsta %d laiškų.'), - // data type descriptions 'Numbers' => 'Skaičiai', 'Date and time' => 'Data ir laikas', diff --git a/adminer/lang/lv.inc.php b/adminer/lang/lv.inc.php index 72591236..38ec3ef1 100644 --- a/adminer/lang/lv.inc.php +++ b/adminer/lang/lv.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binārie', 'Lists' => 'Saraksti', 'Editor' => 'Redaktors', - 'E-mail' => 'Epasts', - 'From' => 'No', - 'Subject' => 'Tēma', - 'Send' => 'Sūtīt', - '%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'), 'Webserver file %s' => 'Fails %s uz servera', 'File does not exist.' => 'Fails neeksistē.', '%d in total' => 'Kopā %d', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Tīkls', 'Geometry' => 'Ģeometrija', 'File exists.' => 'Fails eksistē.', - 'Attachments' => 'Pielikumi', '%d query(s) executed OK.' => array('%d pieprasījums veiksmīgs.', '%d pieprasījumi veiksmīgi.', '%d pieprasījumi veiksmīgi.'), 'Show only errors' => 'Rādīt tikai kļūdas', 'Refresh' => 'Atjaunot', diff --git a/adminer/lang/ms.inc.php b/adminer/lang/ms.inc.php index 245d8dfd..c39c0e21 100644 --- a/adminer/lang/ms.inc.php +++ b/adminer/lang/ms.inc.php @@ -283,13 +283,6 @@ Lang::$translations = array( 'Delete' => 'Padam', 'You have no privileges to update this table.' => 'Anda tidak mempunyai keistimewaan untuk mengemaskini jadual ini.', - 'E-mail' => 'Emel', - 'From' => 'Dari', - 'Subject' => 'Subjek', - 'Attachments' => 'Lampiran', - 'Send' => 'Hantar', - '%d e-mail(s) have been sent.' => '%d emel telah dihantar.', - // data type descriptions 'Numbers' => 'Nombor', 'Date and time' => 'Tarikh dan masa', diff --git a/adminer/lang/nl.inc.php b/adminer/lang/nl.inc.php index 44428d77..7f10995a 100644 --- a/adminer/lang/nl.inc.php +++ b/adminer/lang/nl.inc.php @@ -215,11 +215,6 @@ Lang::$translations = array( 'Binary' => 'Binaire gegevens', 'Lists' => 'Lijsten', 'Editor' => 'Editor', - 'E-mail' => 'E-mail', - 'From' => 'Van', - 'Subject' => 'Onderwerp', - 'Send' => 'Verzenden', - '%d e-mail(s) have been sent.' => array('%d e-mail verzonden.', '%d e-mails verzonden.'), 'Webserver file %s' => 'Webserver bestand %s', 'File does not exist.' => 'Bestand niet gevonden.', '%d in total' => '%d in totaal', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Netwerk', 'Geometry' => 'Geometrie', 'File exists.' => 'Bestand bestaat reeds.', - 'Attachments' => 'Bijlagen', '%d query(s) executed OK.' => array('%d query succesvol uitgevoerd.', '%d querys succesvol uitgevoerd.'), 'Show only errors' => 'Enkel fouten tonen', 'Refresh' => 'Vernieuwen', diff --git a/adminer/lang/no.inc.php b/adminer/lang/no.inc.php index 6996a250..f7610d90 100644 --- a/adminer/lang/no.inc.php +++ b/adminer/lang/no.inc.php @@ -238,12 +238,6 @@ Lang::$translations = array( 'Clone' => 'Klon', 'Delete' => 'Slett', 'You have no privileges to update this table.' => 'Du mangler rettighetene som trengs for å endre denne tabellen.', - 'E-mail' => 'E-post', - 'From' => 'Fra', - 'Subject' => 'Tittel', - 'Attachments' => 'Vedlegg', - 'Send' => 'Send', - '%d e-mail(s) have been sent.' => array('%d epost sendt.', '%d eposter sendt.'), 'Numbers' => 'Nummer', 'Date and time' => 'Dato og tid', 'Strings' => 'Strenger', diff --git a/adminer/lang/pl.inc.php b/adminer/lang/pl.inc.php index b32b2c29..f9b0c3e0 100644 --- a/adminer/lang/pl.inc.php +++ b/adminer/lang/pl.inc.php @@ -295,13 +295,6 @@ Lang::$translations = array( 'Delete' => 'Usuń', 'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli.', - 'E-mail' => 'E-mail', - 'From' => 'Nadawca', - 'Subject' => 'Temat', - 'Attachments' => 'Załączniki', - 'Send' => 'Wyślij', - '%d e-mail(s) have been sent.' => array('Wysłano %d e-mail.', 'Wysłano %d e-maile.', 'Wysłano %d e-maili.'), - // data type descriptions 'Numbers' => 'Numeryczne', 'Date and time' => 'Data i czas', diff --git a/adminer/lang/pt-br.inc.php b/adminer/lang/pt-br.inc.php index 536315f9..5e729334 100644 --- a/adminer/lang/pt-br.inc.php +++ b/adminer/lang/pt-br.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binário', 'Lists' => 'Listas', 'Editor' => 'Editor', - 'E-mail' => 'E-mail', - 'From' => 'De', - 'Subject' => 'Assunto', - 'Send' => 'Enviar', - '%d e-mail(s) have been sent.' => array('%d email foi enviado.', '%d emails foram enviados.'), 'Webserver file %s' => 'Arquivo do servidor web %s', 'File does not exist.' => 'Arquivo não existe.', '%d in total' => '%d no total', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Rede', 'Geometry' => 'Geometria', 'File exists.' => 'Arquivo já existe.', - 'Attachments' => 'Anexos', '%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'), 'Show only errors' => 'Mostrar somente erros', 'Refresh' => 'Atualizar', diff --git a/adminer/lang/pt.inc.php b/adminer/lang/pt.inc.php index dd40fc76..8c81c3d8 100644 --- a/adminer/lang/pt.inc.php +++ b/adminer/lang/pt.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Binário', 'Lists' => 'Listas', 'Editor' => 'Editor', - 'E-mail' => 'E-mail', - 'From' => 'De', - 'Subject' => 'Assunto', - 'Send' => 'Enviar', - '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Webserver file %s' => 'Ficheiro do servidor web %s', 'File does not exist.' => 'Ficheiro não existe.', '%d in total' => '%d no total', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Rede', 'Geometry' => 'Geometria', 'File exists.' => 'Ficheiro já existe.', - 'Attachments' => 'Anexos', '%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'), 'Show only errors' => 'Mostrar somente erros', 'Refresh' => 'Atualizar', diff --git a/adminer/lang/ro.inc.php b/adminer/lang/ro.inc.php index 36f75212..7fac7d7c 100644 --- a/adminer/lang/ro.inc.php +++ b/adminer/lang/ro.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Tip binar', 'Lists' => 'Liste', 'Editor' => 'Editor', - 'E-mail' => 'Poșta electronică', - 'From' => 'De la', - 'Subject' => 'Pentru', - 'Send' => 'Trimite', - '%d e-mail(s) have been sent.' => array('A fost trimis %d mail.', 'Au fost trimise %d mail-uri.'), 'Webserver file %s' => 'Fișierul %s pe server', 'File does not exist.' => 'Acest fișier nu există.', '%d in total' => 'În total %d', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Rețea', 'Geometry' => 'Geometrie', 'File exists.' => 'Fișierul există deja.', - 'Attachments' => 'Fișiere atașate', '%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'), 'Show only errors' => 'Arată doar greșeli', 'Refresh' => 'Împrospătează', diff --git a/adminer/lang/ru.inc.php b/adminer/lang/ru.inc.php index 9461d9eb..ac68b642 100644 --- a/adminer/lang/ru.inc.php +++ b/adminer/lang/ru.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'Двоичный тип', 'Lists' => 'Списки', 'Editor' => 'Редактор', - 'E-mail' => 'Эл. почта', - 'From' => 'От', - 'Subject' => 'Тема', - 'Send' => 'Послать', - '%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'), 'Webserver file %s' => 'Файл %s на вебсервере', 'File does not exist.' => 'Такого файла не существует.', '%d in total' => 'Всего %d', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Сеть', 'Geometry' => 'Геометрия', 'File exists.' => 'Файл уже существует.', - 'Attachments' => 'Прикреплённые файлы', '%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'), 'Show only errors' => 'Только ошибки', 'Refresh' => 'Обновить', diff --git a/adminer/lang/sk.inc.php b/adminer/lang/sk.inc.php index 064f6451..f5438edc 100644 --- a/adminer/lang/sk.inc.php +++ b/adminer/lang/sk.inc.php @@ -205,11 +205,6 @@ Lang::$translations = array( 'History' => 'História', 'Variables' => 'Premenné', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cieľové stĺpce musia mať rovnaký datový typ, nad cieľovými stĺpcami musí byť definovaný index a odkazované dáta musia existovať.', - 'E-mail' => 'E-mail', - 'From' => 'Odosielateľ', - 'Subject' => 'Predmet', - 'Send' => 'Odoslať', - '%d e-mail(s) have been sent.' => array('Bol odoslaný %d e-mail.', 'Boli odoslané %d e-maily.', 'Bolo odoslaných %d e-mailov.'), 'Run file' => 'Spustiť súbor', 'Numbers' => 'Čísla', 'Date and time' => 'Dátum a čas', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'Sieť', 'Geometry' => 'Geometria', 'File exists.' => 'Súbor existuje.', - 'Attachments' => 'Prílohy', '%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'), 'Show only errors' => 'Zobraziť iba chyby', 'Refresh' => 'Obnoviť', diff --git a/adminer/lang/sl.inc.php b/adminer/lang/sl.inc.php index 4b20bef8..6b81096b 100644 --- a/adminer/lang/sl.inc.php +++ b/adminer/lang/sl.inc.php @@ -254,13 +254,6 @@ Lang::$translations = array( 'Clone' => 'Kloniraj', 'Delete' => 'Izbriši', - 'E-mail' => 'E-mail', - 'From' => 'Od', - 'Subject' => 'Zadeva', - 'Attachments' => 'Priponke', - 'Send' => 'Pošlji', - '%d e-mail(s) have been sent.' => array('Poslan je %d e-mail.', 'Poslana sta %d e-maila.', 'Poslani so %d e-maili.', 'Poslanih je %d e-mailov.'), - // data type descriptions 'Numbers' => 'Števila', 'Date and time' => 'Datum in čas', diff --git a/adminer/lang/sr.inc.php b/adminer/lang/sr.inc.php index db98d24e..908049f7 100644 --- a/adminer/lang/sr.inc.php +++ b/adminer/lang/sr.inc.php @@ -262,13 +262,6 @@ Lang::$translations = array( 'Clone' => 'Дуплирај', 'Delete' => 'Избриши', - 'E-mail' => 'Ел. пошта', - 'From' => 'Од', - 'Subject' => 'Наслов', - 'Attachments' => 'Прилози', - 'Send' => 'Пошаљи', - '%d e-mail(s) have been sent.' => array('%d порука ел. поште је послата.', '%d поруке ел. поште су послате.', '%d порука ел. поште је послато.'), - // data type descriptions 'Numbers' => 'Број', 'Date and time' => 'Датум и време', diff --git a/adminer/lang/sv.inc.php b/adminer/lang/sv.inc.php index e96943dc..70ddaaff 100644 --- a/adminer/lang/sv.inc.php +++ b/adminer/lang/sv.inc.php @@ -292,13 +292,6 @@ Lang::$translations = array( 'Delete' => 'Ta bort', 'You have no privileges to update this table.' => 'Du har inga privilegier för att uppdatera den här tabellen.', - 'E-mail' => 'Email', - 'From' => 'Från', - 'Subject' => 'Ämne', - 'Attachments' => 'Bilagor', - 'Send' => 'Skicka', - '%d e-mail(s) have been sent.' => array('%d email har blivit skickat.', '%d email har blivit skickade.'), - // data type descriptions 'Numbers' => 'Nummer', 'Date and time' => 'Datum och tid', diff --git a/adminer/lang/ta.inc.php b/adminer/lang/ta.inc.php index 87cfc54b..e0a3208b 100644 --- a/adminer/lang/ta.inc.php +++ b/adminer/lang/ta.inc.php @@ -212,11 +212,6 @@ Lang::$translations = array( 'Binary' => 'பைன‌ரி', 'Lists' => 'ப‌ட்டிய‌ல்', 'Editor' => 'தொகுப்பாளர்', - 'E-mail' => 'மின்ன‌ஞ்ச‌ல்', - 'From' => 'அனுப்புனர்', - 'Subject' => 'பொருள்', - 'Send' => 'அனுப்பு', - '%d e-mail(s) have been sent.' => array('%d மின்ன‌ஞ்ச‌ல் அனுப்ப‌ப‌ட்ட‌து.', '%d மின்ன‌ஞ்ச‌ல்க‌ள் அனுப்ப‌ப்ப‌ட்ட‌ன‌.'), 'Webserver file %s' => 'வெப் ச‌ர்வ‌ர் கோப்பு %s', 'File does not exist.' => 'கோப்பு இல்லை.', '%d in total' => 'மொத்தம் %d ', @@ -252,7 +247,6 @@ Lang::$translations = array( 'Network' => 'நெட்வொர்க்', 'Geometry' => 'வ‌டிவ‌விய‌ல் (Geometry)', 'File exists.' => 'கோப்பு உள்ள‌து.', - 'Attachments' => 'இணைப்புக‌ள்', 'now' => 'இப்பொழுது', '%d query(s) executed OK.' => array('%d வின‌வ‌ல் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌து.', '%d வின‌வ‌ல்க‌ள் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌ன‌.'), 'Show only errors' => 'பிழைக‌ளை ம‌ட்டும் காண்பிக்க‌வும்', diff --git a/adminer/lang/th.inc.php b/adminer/lang/th.inc.php index f278ce8f..4e4b50bd 100644 --- a/adminer/lang/th.inc.php +++ b/adminer/lang/th.inc.php @@ -214,11 +214,6 @@ Lang::$translations = array( 'Binary' => 'เลขฐานสอง', 'Lists' => 'รายการ', 'Editor' => 'ผู้แก้ไข', - 'E-mail' => 'อีเมล์', - 'From' => 'จาก', - 'Subject' => 'หัวข้อ', - 'Send' => 'ส่ง', - '%d e-mail(s) have been sent.' => 'มี %d อีเมล์ ถูกส่งออกแล้ว.', 'Webserver file %s' => 'Webserver file %s', 'File does not exist.' => 'ไม่มีไฟล์.', '%d in total' => '%d ของทั้งหมด', @@ -253,7 +248,6 @@ Lang::$translations = array( 'Network' => 'เครื่องข่าย', 'Geometry' => 'เรขาคณิต', 'File exists.' => 'มีไฟล์นี้อยู่แล้ว.', - 'Attachments' => 'ไฟล์แนบ', '%d query(s) executed OK.' => '%d คำสั่งถูกดำเนินการแล้ว.', 'Show only errors' => 'แสดงเฉพาะเออเรอ', 'Refresh' => 'โหลดใหม่', diff --git a/adminer/lang/tr.inc.php b/adminer/lang/tr.inc.php index b1c93fea..b14bc1e3 100644 --- a/adminer/lang/tr.inc.php +++ b/adminer/lang/tr.inc.php @@ -286,13 +286,6 @@ Lang::$translations = array( 'Delete' => 'Sil', 'You have no privileges to update this table.' => 'Bu tabloyu güncellemek için yetkiniz yok.', - 'E-mail' => 'E-posta', - 'From' => 'Gönderen', - 'Subject' => 'Konu', - 'Attachments' => 'Ekler', - 'Send' => 'Gönder', - '%d e-mail(s) have been sent.' => array('%d e-posta gönderildi.', '%d adet e-posta gönderildi.'), - // data type descriptions 'Numbers' => 'Sayılar', 'Date and time' => 'Tarih ve zaman', diff --git a/adminer/lang/uk.inc.php b/adminer/lang/uk.inc.php index ba5ff9dd..0095df6b 100644 --- a/adminer/lang/uk.inc.php +++ b/adminer/lang/uk.inc.php @@ -259,13 +259,6 @@ Lang::$translations = array( 'Clone' => 'Клонувати', 'Delete' => 'Видалити', - 'E-mail' => 'E-mail', - 'From' => 'Від', - 'Subject' => 'Заголовок', - 'Attachments' => 'Додатки', - 'Send' => 'Надіслати', - '%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.'), - // data type descriptions 'Numbers' => 'Числа', 'Date and time' => 'Дата і час', diff --git a/adminer/lang/uz.inc.php b/adminer/lang/uz.inc.php index b87b42e5..677c3f3a 100644 --- a/adminer/lang/uz.inc.php +++ b/adminer/lang/uz.inc.php @@ -297,13 +297,6 @@ Lang::$translations = array( 'Delete' => 'O\'chirish', 'You have no privileges to update this table.' => 'Bu jadvalni yangilash uchun sizda huquqlar yo\'q.', - 'E-mail' => 'E-pochta', - 'From' => 'Kimdan', - 'Subject' => 'Mavzu', - 'Attachments' => 'Ilovalar', - 'Send' => 'Yuborish', - '%d e-mail(s) have been sent.' => array('%d e-pochta yuborildi.', '%d e-pochtalar yuborildi.'), - // data type descriptions 'Numbers' => 'Raqamlar', 'Date and time' => 'Sana va vaqt', diff --git a/adminer/lang/vi.inc.php b/adminer/lang/vi.inc.php index 2302f379..d014868e 100644 --- a/adminer/lang/vi.inc.php +++ b/adminer/lang/vi.inc.php @@ -271,13 +271,6 @@ Lang::$translations = array( 'Delete' => 'Xoá', 'You have no privileges to update this table.' => 'Bạn không có quyền sửa bảng này.', - 'E-mail' => 'Địa chỉ email', - 'From' => 'Người gửi', - 'Subject' => 'Chủ đề', - 'Attachments' => 'Đính kèm', - 'Send' => 'Gửi', - '%d e-mail(s) have been sent.' => '%d thư đã gửi.', - // data type descriptions 'Numbers' => 'Số', 'Date and time' => 'Ngày giờ', diff --git a/adminer/lang/xx.inc.php b/adminer/lang/xx.inc.php index fcd6e31c..edea4521 100644 --- a/adminer/lang/xx.inc.php +++ b/adminer/lang/xx.inc.php @@ -297,13 +297,6 @@ Lang::$translations = array( 'Delete' => 'Xx', 'You have no privileges to update this table.' => 'Xx.', - 'E-mail' => 'Xx', - 'From' => 'Xx', - 'Subject' => 'Xx', - 'Attachments' => 'Xx', - 'Send' => 'Xx', - '%d e-mail(s) have been sent.' => array('%d xx.', '%d xx.'), - // data type descriptions 'Numbers' => 'Xx', 'Date and time' => 'Xx', diff --git a/adminer/lang/zh-tw.inc.php b/adminer/lang/zh-tw.inc.php index 1bf1d2e6..0b01b42e 100644 --- a/adminer/lang/zh-tw.inc.php +++ b/adminer/lang/zh-tw.inc.php @@ -292,13 +292,6 @@ Lang::$translations = array( 'Delete' => '刪除', 'You have no privileges to update this table.' => '您沒有許可權更新這個資料表。', - 'E-mail' => '電子郵件', - 'From' => '來自', - 'Subject' => '主旨', - 'Attachments' => '附件', - 'Send' => '寄出', - '%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。', - // data type descriptions 'Numbers' => '數字', 'Date and time' => '日期時間', diff --git a/adminer/lang/zh.inc.php b/adminer/lang/zh.inc.php index 81fcfc13..5956077e 100644 --- a/adminer/lang/zh.inc.php +++ b/adminer/lang/zh.inc.php @@ -208,7 +208,6 @@ Lang::$translations = array( 'Alter indexes' => '修改索引', 'Add next' => '下一行插入', 'Index Type' => '索引类型', - // 'Column (length)' => '列(长度)', 'Foreign keys' => '外键', 'Foreign key' => '外键', @@ -292,13 +291,6 @@ Lang::$translations = array( 'Delete' => '删除', 'You have no privileges to update this table.' => '您没有权限更新这个表。', - 'E-mail' => '电子邮件', - 'From' => '来自', - 'Subject' => '主题', - 'Attachments' => '附件', - 'Send' => '发送', - '%d e-mail(s) have been sent.' => '%d 封邮件已发送。', - // data type descriptions 'Numbers' => '数字', 'Date and time' => '日期时间', diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index 65ed681e..03e5ed5f 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -332,20 +332,6 @@ ORDER BY ORDINAL_POSITION", null, "") as $row } function selectEmailPrint($emailFields, $columns) { - if ($emailFields) { - print_fieldset("email", lang('E-mail'), $_POST["email_append"]); - echo "
"; - echo script("qsl('div').onkeydown = partialArg(bodyKeydown, 'email');"); - echo "

" . lang('From') . ": \n"; - echo lang('Subject') . ": \n"; - echo "

\n"; - echo "

" . script("qsl('p').onkeydown = partialArg(bodyKeydown, 'email_append');", "") . html_select("email_addition", $columns, $_POST["email_addition"]) . "\n"; //! JavaScript - echo "

" . lang('Attachments') . ": " . script("qsl('input').onchange = emailFileChange;"); - echo "

" . (count($emailFields) == 1 ? input_hidden("email_field", key($emailFields)) : html_select("email_field", $emailFields)); - echo "" . confirm(); - echo "

\n"; - echo "\n"; - } } function selectColumnsProcess($columns, $indexes) { @@ -422,37 +408,6 @@ ORDER BY ORDINAL_POSITION", null, "") as $row } function selectEmailProcess($where, $foreignKeys) { - if ($_POST["email_append"]) { - return true; - } - if ($_POST["email"]) { - $sent = 0; - if ($_POST["all"] || $_POST["check"]) { - $field = idf_escape($_POST["email_field"]); - $subject = $_POST["email_subject"]; - $message = $_POST["email_message"]; - preg_match_all('~\{\$([a-z0-9_]+)\}~i', "$subject.$message", $matches); // allows {$name} in subject or message - $rows = get_rows( - "SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('Adminer\idf_escape', array_unique($matches[1]))) : "") . " FROM " . table($_GET["select"]) - . " WHERE $field IS NOT NULL AND $field != ''" - . ($where ? " AND " . implode(" AND ", $where) : "") - . ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('Adminer\where_check', (array) $_POST["check"])) . "))") - ); - $fields = fields($_GET["select"]); - foreach (adminer()->rowDescriptions($rows, $foreignKeys) as $row) { - $replace = array('{\\' => '{'); // allow literal {$name} - foreach ($matches[1] as $val) { - $replace['{$' . "$val}"] = adminer()->editVal($row[$val], $fields[$val]); - } - $email = $row[$_POST["email_field"]]; - if (is_mail($email) && send_mail($email, strtr($subject, $replace), strtr($message, $replace), $_POST["email_from"], $_FILES["email_files"])) { - $sent++; - } - } - } - cookie("adminer_email", $_POST["email_from"]); - redirect(remove_from_uri(), lang('%d e-mail(s) have been sent.', $sent)); - } return false; } diff --git a/plugins/select-email.php b/plugins/select-email.php new file mode 100644 index 00000000..6a908a28 --- /dev/null +++ b/plugins/select-email.php @@ -0,0 +1,154 @@ +lang('E-mail'), $_POST["email_append"]); + echo "
"; + echo Adminer\script("qsl('div').onkeydown = partialArg(bodyKeydown, 'email');"); + echo Adminer\script("function emailFileChange() { const el = this.cloneNode(true); this.onchange = null; el.onchange = emailFileChange; el.value = ''; this.parentNode.appendChild(el); }"); + echo "

" . $this->lang('From') . ": \n"; + echo $this->lang('Subject') . ": \n"; + echo "

\n"; + echo "

" . Adminer\script("qsl('p').onkeydown = partialArg(bodyKeydown, 'email_append');", "") . Adminer\html_select("email_addition", $columns, $_POST["email_addition"]) + . " \n"; //! JavaScript + echo "

" . $this->lang('Attachments') . ": " . Adminer\script("qsl('input').onchange = emailFileChange;"); + echo "

" . (count($emailFields) == 1 ? Adminer\input_hidden("email_field", key($emailFields)) : Adminer\html_select("email_field", $emailFields)); + echo "" . Adminer\confirm(); + echo "

\n"; + echo "\n"; + return true; + } + } + + function selectEmailProcess($where, $foreignKeys) { + if ($_POST["email_append"]) { + return true; + } + if ($_POST["email"]) { + $sent = 0; + if ($_POST["all"] || $_POST["check"]) { + $field = Adminer\idf_escape($_POST["email_field"]); + $subject = $_POST["email_subject"]; + $message = $_POST["email_message"]; + preg_match_all('~\{\$([a-z0-9_]+)\}~i', "$subject.$message", $matches); // allows {$name} in subject or message + $rows = Adminer\get_rows( + "SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('Adminer\idf_escape', array_unique($matches[1]))) : "") . " FROM " . Adminer\table($_GET["select"]) + . " WHERE $field IS NOT NULL AND $field != ''" + . ($where ? " AND " . implode(" AND ", $where) : "") + . ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('Adminer\where_check', (array) $_POST["check"])) . "))") + ); + $fields = Adminer\fields($_GET["select"]); + foreach (Adminer\adminer()->rowDescriptions($rows, $foreignKeys) as $row) { + $replace = array('{\\' => '{'); // allow literal {$name} + foreach ($matches[1] as $val) { + $replace['{$' . "$val}"] = Adminer\adminer()->editVal($row[$val], $fields[$val]); + } + $email = $row[$_POST["email_field"]]; + if (Adminer\is_mail($email) && $this->sendMail($email, strtr($subject, $replace), strtr($message, $replace), $_POST["email_from"], $_FILES["email_files"])) { + $sent++; + } + } + } + Adminer\cookie("adminer_email", $_POST["email_from"]); + Adminer\redirect(Adminer\remove_from_uri(), $this->lang('%d e-mail(s) have been sent.', $sent)); + } + return false; + } + + /** Encode e-mail header in UTF-8 */ + private function emailHeader($header) { + // iconv_mime_encode requires iconv, imap_8bit requires IMAP extension + return "=?UTF-8?B?" . base64_encode($header) . "?="; //! split long lines + } + + /** Send e-mail in UTF-8 + * @param array{error?:list, type?:list, name?:list, tmp_name?:list} $files + */ + private function sendMail($email, $subject, $message, $from = "", array $files = array()) { + $eol = PHP_EOL; + $message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n"))); + $boundary = uniqid("boundary"); + $attachments = ""; + foreach ((array) $files["error"] as $key => $val) { + if (!$val) { + $attachments .= "--$boundary$eol" + . "Content-Type: " . str_replace("\n", "", $files["type"][$key]) . $eol + . "Content-Disposition: attachment; filename=\"" . preg_replace('~["\n]~', '', $files["name"][$key]) . "\"$eol" + . "Content-Transfer-Encoding: base64$eol$eol" + . chunk_split(base64_encode(file_get_contents($files["tmp_name"][$key])), 76, $eol) . $eol + ; + } + } + $beginning = ""; + $headers = "Content-Type: text/plain; charset=utf-8$eol" . "Content-Transfer-Encoding: 8bit"; + if ($attachments) { + $attachments .= "--$boundary--$eol"; + $beginning = "--$boundary$eol$headers$eol$eol"; + $headers = "Content-Type: multipart/mixed; boundary=\"$boundary\""; + } + $headers .= $eol . "MIME-Version: 1.0$eol" . "X-Mailer: Adminer Editor" + . ($from ? $eol . "From: " . str_replace("\n", "", $from) : "") //! should escape display name + ; + 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( + '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' => 'সংযুক্তিগুলো'), + 'bs' => array('E-mail' => 'El. pošta', 'From' => 'Od', 'Subject' => 'Naslov', 'Attachments' => 'Prilozi', 'Send' => 'Pošalji', '%d e-mail(s) have been sent.' => array('%d poruka el. pošte je poslata.', '%d poruke el. pošte su poslate.', '%d poruka el. pošte je poslato.')), + 'ca' => array('E-mail' => 'Correu electrònic', 'From' => 'De', 'Subject' => 'Assumpte', 'Send' => 'Envia', '%d e-mail(s) have been sent.' => array('S\'ha enviat %d correu electrònic.', 'S\'han enviat %d correus electrònics.'), 'Attachments' => 'Adjuncions'), + 'cs' => array('E-mail' => 'E-mail', 'From' => 'Odesílatel', 'Subject' => 'Předmět', 'Attachments' => 'Přílohy', 'Send' => 'Odeslat', '%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.')), + 'da' => array('E-mail' => 'E-mail', 'From' => 'Fra', 'Subject' => 'Titel', 'Attachments' => 'Vedhæft', 'Send' => 'Send', '%d e-mail(s) have been sent.' => array('%d email sendt.', '%d emails sendt.')), + 'de' => array('E-mail' => 'E-Mail', 'From' => 'Von', 'Subject' => 'Betreff', 'Send' => 'Abschicken', '%d e-mail(s) have been sent.' => array('%d E-Mail abgeschickt.', '%d E-Mails abgeschickt.'), 'Attachments' => 'Anhänge'), + 'el' => array('E-mail' => 'E-mail', 'From' => 'Από', 'Subject' => 'Θέμα', 'Attachments' => 'Συνημμένα', 'Send' => 'Αποστολή', '%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.')), + 'en' => array('%d e-mail(s) have been sent.' => array('%d e-mail has been sent.', '%d e-mails have been sent.')), + 'es' => array('E-mail' => 'Email', 'From' => 'De', 'Subject' => 'Asunto', 'Send' => 'Enviar', '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Attachments' => 'Adjuntos'), + 'et' => array('E-mail' => 'E-post', 'From' => 'Kellelt', 'Subject' => 'Pealkiri', 'Send' => 'Saada', '%d e-mail(s) have been sent.' => 'Saadetud kirju: %d.', 'Attachments' => 'Manused'), + 'fa' => array('E-mail' => 'پست الکترونیک', 'From' => 'فرستنده', 'Subject' => 'موضوع', 'Attachments' => 'پیوست ها', 'Send' => 'ارسال', '%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.')), + 'fi' => array('E-mail' => 'S-posti', 'From' => 'Lähettäjä', 'Subject' => 'Aihe', 'Attachments' => 'Liitteet', 'Send' => 'Lähetä', '%d e-mail(s) have been sent.' => array('% sähköpostiviestiä lähetetty.', '% sähköpostiviestiä lähetetty.')), + 'fr' => array('E-mail' => 'Courriel', 'From' => 'De', 'Subject' => 'Sujet', 'Send' => 'Envoyer', '%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'), 'Attachments' => 'Pièces jointes'), + 'gl' => array('E-mail' => 'Email', 'From' => 'De', 'Subject' => 'Asunto', 'Send' => 'Enviar', '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Attachments' => 'Adxuntos'), + 'he' => array('E-mail' => 'דוא"ל', 'From' => 'מ:', 'Subject' => 'נושא', 'Send' => 'שלח', '%d e-mail(s) have been sent.' => '%d הודעות דוא"ל נשלחו', 'Attachments' => 'קבצים מצורפים'), + 'hu' => array('E-mail' => 'E-mail', 'From' => 'Feladó', 'Subject' => 'Tárgy', 'Send' => 'Küldés', '%d e-mail(s) have been sent.' => array('%d e-mail elküldve.', '%d e-mail elküldve.', '%d e-mail elküldve.'), 'Attachments' => 'Csatolmány'), + 'id' => array('E-mail' => 'Surel', 'From' => 'Dari', 'Subject' => 'Judul', 'Attachments' => 'Lampiran', 'Send' => 'Kirim', '%d e-mail(s) have been sent.' => '%d surel berhasil dikirim.'), + 'it' => array('E-mail' => 'E-mail', 'From' => 'Da', 'Subject' => 'Oggetto', 'Send' => 'Invia', '%d e-mail(s) have been sent.' => array('%d e-mail inviata.', '%d e-mail inviate.'), 'Attachments' => 'Allegati'), + 'ja' => array('E-mail' => 'メール', 'From' => '差出人', 'Subject' => '題名', 'Send' => '送信', '%d e-mail(s) have been sent.' => '%d メールを送信しました。', 'Attachments' => '添付ファイル'), + 'ka' => array('E-mail' => 'ელ. ფოსტა', 'From' => 'ავტორი:', 'Subject' => 'თემა', 'Send' => 'გაგზავნა', '%d e-mail(s) have been sent.' => 'გაიგზავნა %d წერილი.', 'Attachments' => 'მიმაგრებული ფაილები'), + 'ko' => array('%d e-mail(s) have been sent.' => '%d개 메일을 보냈습니다.', 'Attachments' => '첨부 파일', 'E-mail' => '메일', 'From' => '보낸 사람', 'Send' => '보내기', 'Subject' => '제목'), + 'lt' => array('E-mail' => 'El. paštas', 'From' => 'Nuo', 'Subject' => 'Antraštė', 'Attachments' => 'Priedai', 'Send' => 'Siųsti', '%d e-mail(s) have been sent.' => array('Išsiųstas %d laiškas.', 'Išsiųsti %d laiškai.', 'Išsiųsta %d laiškų.')), + 'lv' => array('E-mail' => 'Epasts', 'From' => 'No', 'Subject' => 'Tēma', 'Send' => 'Sūtīt', '%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'), 'Attachments' => 'Pielikumi'), + 'ms' => array('E-mail' => 'Emel', 'From' => 'Dari', 'Subject' => 'Subjek', 'Attachments' => 'Lampiran', 'Send' => 'Hantar', '%d e-mail(s) have been sent.' => '%d emel telah dihantar.'), + 'nl' => array('E-mail' => 'E-mail', 'From' => 'Van', 'Subject' => 'Onderwerp', 'Send' => 'Verzenden', '%d e-mail(s) have been sent.' => array('%d e-mail verzonden.', '%d e-mails verzonden.'), 'Attachments' => 'Bijlagen'), + 'no' => array('E-mail' => 'E-post', 'From' => 'Fra', 'Subject' => 'Tittel', 'Attachments' => 'Vedlegg', 'Send' => 'Send', '%d e-mail(s) have been sent.' => array('%d epost sendt.', '%d eposter sendt.')), + 'pl' => array('E-mail' => 'E-mail', 'From' => 'Nadawca', 'Subject' => 'Temat', 'Attachments' => 'Załączniki', 'Send' => 'Wyślij', '%d e-mail(s) have been sent.' => array('Wysłano %d e-mail.', 'Wysłano %d e-maile.', 'Wysłano %d e-maili.')), + 'pt-br' => array('E-mail' => 'E-mail', 'From' => 'De', 'Subject' => 'Assunto', 'Send' => 'Enviar', '%d e-mail(s) have been sent.' => array('%d email foi enviado.', '%d emails foram enviados.'), 'Attachments' => 'Anexos'), + 'pt' => array('E-mail' => 'E-mail', 'From' => 'De', 'Subject' => 'Assunto', 'Send' => 'Enviar', '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), 'Attachments' => 'Anexos'), + 'ro' => array('E-mail' => 'Poșta electronică', 'From' => 'De la', 'Subject' => 'Pentru', 'Send' => 'Trimite', '%d e-mail(s) have been sent.' => array('A fost trimis %d mail.', 'Au fost trimise %d mail-uri.'), 'Attachments' => 'Fișiere atașate'), + 'ru' => array('E-mail' => 'Эл. почта', 'From' => 'От', 'Subject' => 'Тема', 'Send' => 'Послать', '%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'), 'Attachments' => 'Прикреплённые файлы'), + 'sk' => array('E-mail' => 'E-mail', 'From' => 'Odosielateľ', 'Subject' => 'Predmet', 'Send' => 'Odoslať', '%d e-mail(s) have been sent.' => array('Bol odoslaný %d e-mail.', 'Boli odoslané %d e-maily.', 'Bolo odoslaných %d e-mailov.'), 'Attachments' => 'Prílohy'), + 'sl' => array('E-mail' => 'E-mail', 'From' => 'Od', 'Subject' => 'Zadeva', 'Attachments' => 'Priponke', 'Send' => 'Pošlji', '%d e-mail(s) have been sent.' => array('Poslan je %d e-mail.', 'Poslana sta %d e-maila.', 'Poslani so %d e-maili.', 'Poslanih je %d e-mailov.')), + 'sr' => array('E-mail' => 'Ел. пошта', 'From' => 'Од', 'Subject' => 'Наслов', 'Attachments' => 'Прилози', 'Send' => 'Пошаљи', '%d e-mail(s) have been sent.' => array('%d порука ел. поште је послата.', '%d поруке ел. поште су послате.', '%d порука ел. поште је послато.')), + 'sv' => array('E-mail' => 'Email', 'From' => 'Från', 'Subject' => 'Ämne', 'Attachments' => 'Bilagor', 'Send' => 'Skicka', '%d e-mail(s) have been sent.' => array('%d email har blivit skickat.', '%d email har blivit skickade.')), + 'ta' => array('E-mail' => 'மின்ன‌ஞ்ச‌ல்', 'From' => 'அனுப்புனர்', 'Subject' => 'பொருள்', 'Send' => 'அனுப்பு', '%d e-mail(s) have been sent.' => array('%d மின்ன‌ஞ்ச‌ல் அனுப்ப‌ப‌ட்ட‌து.', '%d மின்ன‌ஞ்ச‌ல்க‌ள் அனுப்ப‌ப்ப‌ட்ட‌ன‌.'), 'Attachments' => 'இணைப்புக‌ள்'), + 'th' => array('E-mail' => 'อีเมล์', 'From' => 'จาก', 'Subject' => 'หัวข้อ', 'Send' => 'ส่ง', '%d e-mail(s) have been sent.' => 'มี %d อีเมล์ ถูกส่งออกแล้ว.', 'Attachments' => 'ไฟล์แนบ'), + 'tr' => array('E-mail' => 'E-posta', 'From' => 'Gönderen', 'Subject' => 'Konu', 'Attachments' => 'Ekler', 'Send' => 'Gönder', '%d e-mail(s) have been sent.' => array('%d e-posta gönderildi.', '%d adet e-posta gönderildi.')), + 'uk' => array('E-mail' => 'E-mail', 'From' => 'Від', 'Subject' => 'Заголовок', 'Attachments' => 'Додатки', 'Send' => 'Надіслати', '%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.')), + 'uz' => array('E-mail' => 'E-pochta', 'From' => 'Kimdan', 'Subject' => 'Mavzu', 'Attachments' => 'Ilovalar', 'Send' => 'Yuborish', '%d e-mail(s) have been sent.' => array('%d e-pochta yuborildi.', '%d e-pochtalar yuborildi.')), + 'vi' => array('E-mail' => 'Địa chỉ email', 'From' => 'Người gửi', 'Subject' => 'Chủ đề', 'Attachments' => 'Đính kèm', 'Send' => 'Gửi', '%d e-mail(s) have been sent.' => '%d thư đã gửi.'), + 'zh-tw' => array('E-mail' => '電子郵件', 'From' => '來自', 'Subject' => '主旨', 'Attachments' => '附件', 'Send' => '寄出', '%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。'), + 'zh' => array('E-mail' => '电子邮件', 'From' => '来自', 'Subject' => '主题', 'Attachments' => '附件', 'Send' => '发送', '%d e-mail(s) have been sent.' => '%d 封邮件已发送。'), + ); +}