diff --git a/README.md b/README.md index 25ed59bb..1141288f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d - full graphical setup - User management with fine-grained per-user permissions - Admin interface -- User Interface in czech, dutch, english, finnish, french, german, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish, turkish, ukrainian +- User Interface in czech, dutch, english, finnish, french, german, greek, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish, turkish, ukrainian - OPDS feed for eBook reader apps - Filter and search by titles, authors, tags, series and language - Create a custom book collection (shelves) diff --git a/cps/admin.py b/cps/admin.py index ebe2fdff..c0d1f39c 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -799,7 +799,7 @@ def _handle_new_user(to_save, content,languages, translations, kobo_support): flash(_(u"Settings DB is not Writeable"), category="error") -def _handle_edit_user(to_save, content,languages, translations, kobo_support, downloads): +def _handle_edit_user(to_save, content,languages, translations, kobo_support): if "delete" in to_save: if ub.session.query(ub.User).filter(ub.User.role.op('&')(constants.ROLE_ADMIN) == constants.ROLE_ADMIN, ub.User.id != content.id).count(): @@ -858,7 +858,6 @@ def _handle_edit_user(to_save, content,languages, translations, kobo_support, do kobo_support=kobo_support, new_user=0, content=content, - downloads=downloads, registered_oauth=oauth_check, title=_(u"Edit User %(nick)s", nick=content.nickname), page="edituser") if "nickname" in to_save and to_save["nickname"] != content.nickname: @@ -872,7 +871,6 @@ def _handle_edit_user(to_save, content,languages, translations, kobo_support, do languages=languages, mail_configured=config.get_mail_server_configured(), new_user=0, content=content, - downloads=downloads, registered_oauth=oauth_check, kobo_support=kobo_support, title=_(u"Edit User %(nick)s", nick=content.nickname), @@ -961,28 +959,20 @@ def update_mailsettings(): @admin_required def edit_user(user_id): content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).first() # type: ub.User - if not content: + if not content or (not config.config_anonbrowse and content.nickname == "Guest"): flash(_(u"User not found"), category="error") return redirect(url_for('admin.admin')) - downloads = list() languages = calibre_db.speaking_language() translations = babel.list_translations() + [LC('en')] kobo_support = feature_support['kobo'] and config.config_kobo_sync - for book in content.downloads: - downloadbook = calibre_db.get_book(book.book_id) - if downloadbook: - downloads.append(downloadbook) - else: - ub.delete_download(book.book_id) if request.method == "POST": to_save = request.form.to_dict() - _handle_edit_user(to_save, content, languages, translations, kobo_support, downloads) + _handle_edit_user(to_save, content, languages, translations, kobo_support) return render_title_template("user_edit.html", translations=translations, languages=languages, new_user=0, content=content, - downloads=downloads, registered_oauth=oauth_check, mail_configured=config.get_mail_server_configured(), kobo_support=kobo_support, @@ -1039,7 +1029,8 @@ def send_logfile(logtype): @admi.route("/get_update_status", methods=['GET']) -@login_required_if_no_ano +@login_required +@admin_required def get_update_status(): log.info(u"Update status requested") return updater_thread.get_available_updates(request.method, locale=get_locale()) diff --git a/cps/config_sql.py b/cps/config_sql.py index d5c7b213..9dcb4528 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -19,7 +19,6 @@ from __future__ import division, print_function, unicode_literals import os -import json import sys from sqlalchemy import exc, Column, String, Integer, SmallInteger, Boolean, BLOB, JSON diff --git a/cps/converter.py b/cps/converter.py index 01a6fbc7..2ff73666 100644 --- a/cps/converter.py +++ b/cps/converter.py @@ -19,7 +19,6 @@ from __future__ import division, print_function, unicode_literals import os import re -import sys from flask_babel import gettext as _ from . import config, logger diff --git a/cps/db.py b/cps/db.py index b2ab257a..f648a794 100644 --- a/cps/db.py +++ b/cps/db.py @@ -147,7 +147,7 @@ class Identifiers(Base): elif format_type == "kobo": return u"https://www.kobo.com/ebook/{0}".format(self.val) elif format_type == "lubimyczytac": - return u" https://lubimyczytac.pl/ksiazka/{0}/ksiazka".format(self.val) + return u"https://lubimyczytac.pl/ksiazka/{0}/ksiazka".format(self.val) elif format_type == "litres": return u"https://www.litres.ru/{0}".format(self.val) elif format_type == "issn": @@ -687,9 +687,7 @@ class CalibreDB(): limit_all = result_count ub.store_ids(result) - - - return result[offset:limit_all], result_count, pagination, + return result[offset:limit_all], result_count, pagination # Creates for all stored languages a translated speaking name in the array for the UI def speaking_language(self, languages=None): diff --git a/cps/editbooks.py b/cps/editbooks.py index 7f7764e5..f2e52af4 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -27,7 +27,6 @@ import json from shutil import copyfile from uuid import uuid4 -from babel import Locale as LC from flask import Blueprint, request, flash, redirect, url_for, abort, Markup, Response from flask_babel import gettext as _ from flask_login import current_user, login_required @@ -930,6 +929,7 @@ def convert_bookformat(book_id): @editbook.route("/ajax/editbooks/", methods=['POST']) @login_required_if_no_ano +@edit_required def edit_list_book(param): vals = request.form.to_dict() # calibre_db.update_title_sort(config) @@ -989,6 +989,7 @@ def get_sorted_entry(field, bookid): @editbook.route("/ajax/simulatemerge", methods=['POST']) @login_required +@edit_required def simulate_merge_list_book(): vals = request.get_json().get('Merge_books') if vals: @@ -1004,6 +1005,7 @@ def simulate_merge_list_book(): @editbook.route("/ajax/mergebooks", methods=['POST']) @login_required +@edit_required def merge_list_book(): vals = request.get_json().get('Merge_books') to_file = list() diff --git a/cps/gdrive.py b/cps/gdrive.py index 74a45061..584c90cf 100644 --- a/cps/gdrive.py +++ b/cps/gdrive.py @@ -123,38 +123,36 @@ def revoke_watch_gdrive(): @gdrive.route("/gdrive/watch/callback", methods=['GET', 'POST']) def on_received_watch_confirmation(): + if request.headers.get('X-Goog-Channel-Token') != gdrive_watch_callback_token \ + or request.headers.get('X-Goog-Resource-State') != 'change' \ + or not request.data: + return redirect(url_for('admin.configuration')) + log.debug('%r', request.headers) - if request.headers.get('X-Goog-Channel-Token') == gdrive_watch_callback_token \ - and request.headers.get('X-Goog-Resource-State') == 'change' \ - and request.data: - - data = request.data - - def updateMetaData(): - log.info('Change received from gdrive') - log.debug('%r', data) - try: - j = json.loads(data) - log.info('Getting change details') - response = gdriveutils.getChangeById(gdriveutils.Gdrive.Instance().drive, j['id']) - log.debug('%r', response) - if response: - if sys.version_info < (3, 0): - dbpath = os.path.join(config.config_calibre_dir, "metadata.db") - else: - dbpath = os.path.join(config.config_calibre_dir, "metadata.db").encode() - if not response['deleted'] and response['file']['title'] == 'metadata.db' \ - and response['file']['md5Checksum'] != hashlib.md5(dbpath): - tmpDir = tempfile.gettempdir() - log.info('Database file updated') - copyfile(dbpath, os.path.join(tmpDir, "metadata.db_" + str(current_milli_time()))) - log.info('Backing up existing and downloading updated metadata.db') - gdriveutils.downloadFile(None, "metadata.db", os.path.join(tmpDir, "tmp_metadata.db")) - log.info('Setting up new DB') - # prevent error on windows, as os.rename does on exisiting files - move(os.path.join(tmpDir, "tmp_metadata.db"), dbpath) - calibre_db.reconnect_db(config, ub.app_DB_path) - except Exception as e: - log.exception(e) - updateMetaData() + log.debug('%r', request.data) + log.info('Change received from gdrive') + + try: + j = json.loads(request.data) + log.info('Getting change details') + response = gdriveutils.getChangeById(gdriveutils.Gdrive.Instance().drive, j['id']) + log.debug('%r', response) + if response: + if sys.version_info < (3, 0): + dbpath = os.path.join(config.config_calibre_dir, "metadata.db") + else: + dbpath = os.path.join(config.config_calibre_dir, "metadata.db").encode() + if not response['deleted'] and response['file']['title'] == 'metadata.db' \ + and response['file']['md5Checksum'] != hashlib.md5(dbpath): + tmpDir = tempfile.gettempdir() + log.info('Database file updated') + copyfile(dbpath, os.path.join(tmpDir, "metadata.db_" + str(current_milli_time()))) + log.info('Backing up existing and downloading updated metadata.db') + gdriveutils.downloadFile(None, "metadata.db", os.path.join(tmpDir, "tmp_metadata.db")) + log.info('Setting up new DB') + # prevent error on windows, as os.rename does on exisiting files + move(os.path.join(tmpDir, "tmp_metadata.db"), dbpath) + calibre_db.reconnect_db(config, ub.app_DB_path) + except Exception as e: + log.exception(e) return '' diff --git a/cps/helper.py b/cps/helper.py index f946a039..8561a95a 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -35,7 +35,7 @@ from babel.units import format_unit from flask import send_from_directory, make_response, redirect, abort, url_for from flask_babel import gettext as _ from flask_login import current_user -from sqlalchemy.sql.expression import true, false, and_, text, func +from sqlalchemy.sql.expression import true, false, and_, text from werkzeug.datastructures import Headers from werkzeug.security import generate_password_hash from . import calibre_db @@ -373,23 +373,26 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa new_name = get_valid_filename(localbook.title) + ' - ' + get_valid_filename(new_authordir) try: if orignal_filepath: - os.renames(os.path.normcase(path), - os.path.normcase(os.path.join(new_path, db_filename))) + if not os.path.isdir(new_path): + os.makedirs(new_path) + shutil.move(os.path.normcase(path), os.path.normcase(os.path.join(new_path, db_filename))) log.debug("Moving title: %s to %s/%s", path, new_path, new_name) - # Check new path is not valid path - elif not os.path.exists(new_path): - # move original path to new path - os.renames(os.path.normcase(path), os.path.normcase(new_path)) - log.debug("Moving title: %s to %s", path, new_path) - else: # path is valid copy only files to new location (merge) - log.info("Moving title: %s into existing: %s", path, new_path) - # Take all files and subfolder from old path (strange command) - for dir_name, __, file_list in os.walk(path): - for file in file_list: - os.renames(os.path.normcase(os.path.join(dir_name, file)), - os.path.normcase(os.path.join(new_path + dir_name[len(path):], file))) + # Check new path is not valid path + else: + if not os.path.exists(new_path): + # move original path to new path + log.debug("Moving title: %s to %s", path, new_path) + shutil.move(os.path.normcase(path), os.path.normcase(new_path)) + else: # path is valid copy only files to new location (merge) + log.info("Moving title: %s into existing: %s", path, new_path) + # Take all files and subfolder from old path (strange command) + for dir_name, __, file_list in os.walk(path): + for file in file_list: + shutil.move(os.path.normcase(os.path.join(dir_name, file)), + os.path.normcase(os.path.join(new_path + dir_name[len(path):], file))) + # os.unlink(os.path.normcase(os.path.join(dir_name, file))) # change location in database to new author/title path - localbook.path = os.path.join(new_authordir, new_titledir) + localbook.path = os.path.join(new_authordir, new_titledir).replace('\\','/') except OSError as ex: log.error("Rename title from: %s to %s: %s", path, new_path, ex) log.debug(ex, exc_info=True) @@ -399,10 +402,12 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa # Rename all files from old names to new names try: for file_format in localbook.data: - os.renames(os.path.normcase( + shutil.move(os.path.normcase( os.path.join(new_path, file_format.name + '.' + file_format.format.lower())), - os.path.normcase(os.path.join(new_path, new_name + '.' + file_format.format.lower()))) + os.path.normcase(os.path.join(new_path, new_name + '.' + file_format.format.lower()))) file_format.name = new_name + if not orignal_filepath and len(os.listdir(os.path.dirname(path))) == 0: + shutil.rmtree(os.path.dirname(path)) except OSError as ex: log.error("Rename file in path %s to %s: %s", new_path, new_name, ex) log.debug(ex, exc_info=True) diff --git a/cps/iso_language_names.py b/cps/iso_language_names.py index 2e6ec680..52e50667 100644 --- a/cps/iso_language_names.py +++ b/cps/iso_language_names.py @@ -434,6 +434,379 @@ LANGUAGE_NAMES = { "zxx": "brak kontekstu językowego", "zza": "zazaki" }, + "el": { + "abk": "Αμπχαζιανά", + "ace": "Ατσενέζικα", + "ach": "Ακόλο", + "ada": "Αντάνγκμε", + "ady": "Αντύγκε", + "aar": "Αφάρ", + "afh": "Αφριχίλι", + "afr": "Αφρικάανς", + "ain": "Αϊνού (Ιαπωνία)", + "aka": "Ακάν", + "akk": "Akkadian", + "sqi": "Αλβανικά", + "ale": "Aleut", + "amh": "Amharic", + "anp": "Angika", + "ara": "Αραβικά", + "arg": "Αραγωνικά ", + "arp": "Αραπάχο", + "arw": "Arawak", + "hye": "Αρμένικα", + "asm": "Assamese", + "ast": "Asturian", + "ava": "Αβαρικά", + "ave": "Avestan", + "awa": "Awadhi", + "aym": "Aymara", + "aze": "Αζερμπαϊτζιανά", + "ban": "Balinese", + "bal": "Baluchi", + "bam": "Bambara", + "bas": "Basa (Cameroon)", + "bak": "Bashkir", + "eus": "Βασκικά", + "bej": "Beja", + "bel": "Λευκωρωσικά", + "bem": "Bemba (Zambia)", + "ben": "Μπενγκάλι", + "bho": "Bhojpuri", + "bik": "Bikol", + "byn": "Bilin", + "bin": "Bini", + "bis": "Bislama", + "zbl": "Blissymbols", + "bos": "Βοσνιακά", + "bra": "Braj", + "bre": "Βρετονικά", + "bug": "Buginese", + "bul": "Βουλγάρικα", + "bua": "Buriat", + "mya": "Burmese", + "cad": "Caddo", + "cat": "Καταλανικά", + "ceb": "Cebuano", + "chg": "Chagatai", + "cha": "Chamorro", + "che": "Τσετσενικά", + "chr": "Cherokee", + "chy": "Cheyenne", + "chb": "Chibcha", + "zho": "Κινέζικα", + "chn": "Chinook jargon", + "chp": "Chipewyan", + "cho": "Choctaw", + "chk": "Chuukese", + "chv": "Chuvash", + "cop": "Κοπτικά", + "cor": "Cornish", + "cos": "Κορσικανικά", + "cre": "Cree", + "mus": "Creek", + "hrv": "Κροατικά", + "ces": "Τσέχικα", + "dak": "Dakota", + "dan": "Δανέζικα", + "dar": "Dargwa", + "del": "Delaware", + "div": "Dhivehi", + "din": "Dinka", + "doi": "Dogri (macrolanguage)", + "dgr": "Dogrib", + "dua": "Duala", + "nld": "Ολλανδικά", + "dyu": "Dyula", + "dzo": "Dzongkha", + "efi": "Efik", + "egy": "Αρχαία Αιγυπτιακά", + "eka": "Ekajuk", + "elx": "Elamite", + "eng": "Αγγλικά", + "myv": "Erzya", + "epo": "Εσπεράντο", + "est": "Εσθονικά", + "ewe": "Ewe", + "ewo": "Ewondo", + "fan": "Fang (Equatorial Guinea)", + "fat": "Fanti", + "fao": "Faroese", + "fij": "Fijian", + "fil": "Filipino", + "fin": "Φινλανδικά", + "fon": "Fon", + "fra": "Γαλλικά", + "fur": "Friulian", + "ful": "Fulah", + "gaa": "Ga", + "glg": "Galician", + "lug": "Ganda", + "gay": "Gayo", + "gba": "Gbaya (Central African Republic)", + "gez": "Geez", + "kat": "Γεωργιανά", + "deu": "Γερμανικά", + "gil": "Gilbertese", + "gon": "Gondi", + "gor": "Gorontalo", + "got": "Γοτθικά", + "grb": "Grebo", + "grn": "Guarani", + "guj": "Gujarati", + "gwi": "Gwichʼin", + "hai": "Haida", + "hau": "Hausa", + "haw": "Hawaiian", + "heb": "Εβραϊκά", + "her": "Herero", + "hil": "Hiligaynon", + "hin": "Ινδικά", + "hmo": "Hiri Motu", + "hit": "Hittite", + "hmn": "Hmong", + "hun": "Ουγγρικά", + "hup": "Hupa", + "iba": "Iban", + "isl": "Ισλανδικά", + "ido": "Ido", + "ibo": "Igbo", + "ilo": "Iloko", + "ind": "Ινδονησιακά", + "inh": "Ingush", + "ina": "Interlingua (International Auxiliary Language Association)", + "ile": "Interlingue", + "iku": "Inuktitut", + "ipk": "Inupiaq", + "gle": "Ιρλανδέζικα", + "ita": "Ιταλικά", + "jpn": "Γιαπωνέζικα", + "jav": "Javanese", + "jrb": "Judeo-Arabic", + "jpr": "Judeo-Persian", + "kbd": "Kabardian", + "kab": "Kabyle", + "kac": "Kachin", + "kal": "Kalaallisut", + "xal": "Kalmyk", + "kam": "Kamba (Kenya)", + "kan": "Kannada", + "kau": "Kanuri", + "kaa": "Kara-Kalpak", + "krc": "Karachay-Balkar", + "krl": "Karelian", + "kas": "Kashmiri", + "csb": "Kashubian", + "kaw": "Kawi", + "kaz": "Kazakh", + "kha": "Khasi", + "kho": "Khotanese", + "kik": "Kikuyu", + "kmb": "Kimbundu", + "kin": "Kinyarwanda", + "kir": "Kirghiz", + "tlh": "Κλίγκον", + "kom": "Komi", + "kon": "Kongo", + "kok": "Konkani (macrolanguage)", + "kor": "Κορεάτικα", + "kos": "Kosraean", + "kpe": "Kpelle", + "kua": "Kuanyama", + "kum": "Kumyk", + "kur": "Κουρδικά", + "kru": "Kurukh", + "kut": "Kutenai", + "lad": "Ladino", + "lah": "Lahnda", + "lam": "Lamba", + "lao": "Lao", + "lat": "Λατινικά", + "lav": "Λετονέζικα", + "lez": "Lezghian", + "lim": "Limburgan", + "lin": "Lingala", + "lit": "Λιθουανικά", + "jbo": "Lojban", + "loz": "Lozi", + "lub": "Luba-Katanga", + "lua": "Luba-Lulua", + "lui": "Luiseno", + "smj": "Lule Sami", + "lun": "Lunda", + "luo": "Luo (Kenya and Tanzania)", + "lus": "Lushai", + "ltz": "Luxembourgish", + "mkd": "Σλαβομακεδονικά", + "mad": "Madurese", + "mag": "Magahi", + "mai": "Maithili", + "mak": "Makasar", + "mlg": "Malagasy", + "msa": "Malay (macrolanguage)", + "mal": "Malayalam", + "mlt": "Maltese", + "mnc": "Manchu", + "mdr": "Mandar", + "man": "Mandingo", + "mni": "Manipuri", + "glv": "Manx", + "mri": "Maori", + "arn": "Mapudungun", + "mar": "Marathi", + "chm": "Mari (Russia)", + "mah": "Marshallese", + "mwr": "Marwari", + "mas": "Masai", + "men": "Mende (Sierra Leone)", + "mic": "Mi'kmaq", + "min": "Minangkabau", + "mwl": "Mirandese", + "moh": "Mohawk", + "mdf": "Moksha", + "lol": "Mongo", + "mon": "Μογγολικά", + "mos": "Mossi", + "mul": "Πολλαπλές γλώσσες", + "nqo": "N'Ko", + "nau": "Nauru", + "nav": "Navajo", + "ndo": "Ndonga", + "nap": "Neapolitan", + "nia": "Nias", + "niu": "Niuean", + "zxx": "Χωρίς γλωσσολογικό περιεχόμενο", + "nog": "Nogai", + "nor": "Νορβηγικά", + "nob": "Norwegian Bokmål", + "nno": "Νορβηγικά Nynorsk", + "nym": "Nyamwezi", + "nya": "Nyanja", + "nyn": "Nyankole", + "nyo": "Nyoro", + "nzi": "Nzima", + "oci": "Occitan (post 1500)", + "oji": "Ojibwa", + "orm": "Oromo", + "osa": "Osage", + "oss": "Ossetian", + "pal": "Pahlavi", + "pau": "Palauan", + "pli": "Pali", + "pam": "Pampanga", + "pag": "Pangasinan", + "pan": "Panjabi", + "pap": "Papiamento", + "fas": "Περσικά", + "phn": "Φοινικικά", + "pon": "Pohnpeian", + "pol": "Πολωνέζικα", + "por": "Πορτογαλικά", + "pus": "Pashto", + "que": "Quechua", + "raj": "Rajasthani", + "rap": "Rapanui", + "ron": "Ρουμάνικα", + "roh": "Romansh", + "rom": "Romany", + "run": "Rundi", + "rus": "Ρώσικα", + "smo": "Samoan", + "sad": "Sandawe", + "sag": "Sango", + "san": "Σανσκριτικά", + "sat": "Santali", + "srd": "Sardinian", + "sas": "Sasak", + "sco": "Σκωτσέζικα", + "sel": "Selkup", + "srp": "Σερβικά", + "srr": "Serer", + "shn": "Shan", + "sna": "Shona", + "scn": "Sicilian", + "sid": "Sidamo", + "bla": "Siksika", + "snd": "Sindhi", + "sin": "Sinhala", + "den": "Slave (Athapascan)", + "slk": "Σλοβακικά", + "slv": "Σλοβενικά", + "sog": "Σογδιανά", + "som": "Σομαλικά", + "snk": "Soninke", + "spa": "Ισπανικά", + "srn": "Sranan Tongo", + "suk": "Sukuma", + "sux": "Sumerian", + "sun": "Sundanese", + "sus": "Susu", + "swa": "Swahili (macrolanguage)", + "ssw": "Swati", + "swe": "Σουηδικά", + "syr": "Συριακά", + "tgl": "Tagalog", + "tah": "Tahitian", + "tgk": "Tajik", + "tmh": "Tamashek", + "tam": "Ταμίλ", + "tat": "Tatar", + "tel": "Telugu", + "ter": "Tereno", + "tet": "Tetum", + "tha": "Ταϊλανδέζικη", + "bod": "Θιβετιανά", + "tig": "Tigre", + "tir": "Tigrinya", + "tem": "Timne", + "tiv": "Tiv", + "tli": "Tlingit", + "tpi": "Tok Pisin", + "tkl": "Τοκελάου", + "tog": "Tonga (Nyasa)", + "ton": "Tonga (Tonga Islands)", + "tsi": "Tsimshian", + "tso": "Tsonga", + "tsn": "Tswana", + "tum": "Tumbuka", + "tur": "Τουρκικά", + "tuk": "Τουρκμένικα", + "tvl": "Tuvalu", + "tyv": "Tuvinian", + "twi": "Twi", + "udm": "Udmurt", + "uga": "Ugaritic", + "uig": "Uighur", + "ukr": "Ουκρανικά", + "umb": "Umbundu", + "mis": "Uncoded languages", + "und": "Απροσδιόριστη", + "urd": "Urdu", + "uzb": "Uzbek", + "vai": "Vai", + "ven": "Venda", + "vie": "Βιετναμέζικα", + "vol": "Volapük", + "vot": "Votic", + "wln": "Walloon", + "war": "Waray (Philippines)", + "was": "Washo", + "cym": "Ουαλικά", + "wal": "Wolaytta", + "wol": "Wolof", + "xho": "Xhosa", + "sah": "Yakut", + "yao": "Yao", + "yap": "Yapese", + "yid": "Yiddish", + "yor": "Yoruba", + "zap": "Zapotec", + "zza": "Zaza", + "zen": "Zenaga", + "zha": "Zhuang", + "zul": "Zulu", + "zun": "Zuni" + }, "nl": { "aar": "Afar; Hamitisch", "abk": "Abchazisch", diff --git a/cps/jinjia.py b/cps/jinjia.py index 87ba4159..ebb53a30 100644 --- a/cps/jinjia.py +++ b/cps/jinjia.py @@ -25,7 +25,6 @@ from __future__ import division, print_function, unicode_literals import datetime import mimetypes -import re from babel.dates import format_date from flask import Blueprint, request, url_for @@ -110,9 +109,21 @@ def timestamptodate(date, fmt=None): def yesno(value, yes, no): return yes if value else no + @jinjia.app_template_filter('formatfloat') def formatfloat(value, decimals=1): formatedstring = '%d' % value if (value % 1) != 0: formatedstring = ('%s.%d' % (formatedstring, (value % 1) * 10**decimals)).rstrip('0') return formatedstring + + +@jinjia.app_template_filter('formatseriesindex') +def formatseriesindex_filter(series_index): + if series_index: + if int(series_index) - series_index == 0: + return int(series_index) + else: + return series_index + return 0 + diff --git a/cps/kobo.py b/cps/kobo.py index a6dfc3f6..7a05ea5d 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -39,7 +39,7 @@ from flask import ( redirect, abort ) -from flask_login import current_user, login_required +from flask_login import current_user from werkzeug.datastructures import Headers from sqlalchemy import func from sqlalchemy.sql.expression import and_, or_ diff --git a/cps/opds.py b/cps/opds.py index ac0e103b..1eb3c49f 100644 --- a/cps/opds.py +++ b/cps/opds.py @@ -408,7 +408,7 @@ def get_metadata_calibre_companion(uuid, library): def feed_search(term): if term: - entries, __ = calibre_db.get_search_results(term) + entries, __, ___ = calibre_db.get_search_results(term) entriescount = len(entries) if len(entries) > 0 else 1 pagination = Pagination(1, entriescount, entriescount) return render_xml_template('feed.xml', searchterm=term, entries=entries, pagination=pagination) diff --git a/cps/server.py b/cps/server.py index de98fc6e..b2d9c1b0 100644 --- a/cps/server.py +++ b/cps/server.py @@ -150,7 +150,7 @@ class WebServer(object): def my_wrap_socket(*args, **kwargs): try: return wrap_socket(*args, **kwargs) - except (ssl.SSLError) as ex: + except (ssl.SSLError, OSError) as ex: log.warning('Gevent SSL Error: %s', ex) raise GreenletExit diff --git a/cps/services/goodreads_support.py b/cps/services/goodreads_support.py index 58255f3c..9312bc0f 100644 --- a/cps/services/goodreads_support.py +++ b/cps/services/goodreads_support.py @@ -72,7 +72,7 @@ def get_author_info(author_name): author_info = _client.find_author(author_name=author_name) except Exception as ex: # Skip goodreads, if site is down/inaccessible - log.warning('Goodreads website is down/inaccessible? %s', ex) + log.warning('Goodreads website is down/inaccessible? %s', ex.__str__()) return if author_info: diff --git a/cps/static/css/caliBlur.min.css b/cps/static/css/caliBlur.css similarity index 99% rename from cps/static/css/caliBlur.min.css rename to cps/static/css/caliBlur.css index 9447cd18..92cf466e 100644 --- a/cps/static/css/caliBlur.min.css +++ b/cps/static/css/caliBlur.css @@ -831,7 +831,10 @@ body:not(.read-frame) { font-family: Open Sans Semibold, Helvetica Neue, Helvetica, Arial, sans-serif; font-weight: 400; overflow: hidden; - margin: 0 + margin: 0; + /* scroll bar fix for firefox */ + scrollbar-color: hsla(0, 0%, 100%, .2) transparent; + scrollbar-width: thin; } body > div.navbar.navbar-default.navbar-static-top > div > form > div { @@ -2174,7 +2177,7 @@ body.langlist > div.container-fluid > div > div.col-sm-10:before { content: "\e034" } -body.advsearch > div.container-fluid > div > div.col-sm-10:before, body.authorlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.catlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before, body.serieslist > div.container-fluid > div > div.col-sm-10 > div.container:before { +body.authorlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.catlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before, body.serieslist > div.container-fluid > div > div.col-sm-10 > div.container:before { top: 60px; font-size: 24px; color: #eee; @@ -2244,10 +2247,14 @@ body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before content: "Languages" } -body.advsearch > div.container-fluid > div > div.col-sm-10:before { - content: "Advanced Search"; - margin-left: 20%; - left: 0 +body.advsearch > div.container-fluid > div > div.col-sm-10 > div.col-md-10.col-lg-6 { + padding: 15px 10px 15px 40px; +} + +@media screen and (max-width: 992px) { + body.advsearch > div.container-fluid > div > div.col-sm-10 > div.col-md-10.col-lg-6 { + padding-left: 20px; + } } body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before { @@ -3502,6 +3509,20 @@ body.shelf > div.container-fluid > div > div.col-sm-10 > div.discover > h2 { padding-right: 25px !important } +body.shelf-down > .discover > h2 { + color: inherit; + margin-bottom: 20px; +} + +body.shelf-down > .discover > .row > .book.col-sm-3.col-lg-2.col-xs-6 { + max-width: 225px !important; + width: 225px !important; +} + +body.shelf-down .btn-group button#btnGroupDrop1 { + height: 50px; +} + .author > .container-fluid > .row-fluid > .col-sm-10 > h2:before, .plexBack > a { -moz-text-size-adjust: 100%; -ms-text-size-adjust: 100%; diff --git a/cps/static/css/style.css b/cps/static/css/style.css index e2cd4ec7..2294d326 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -143,6 +143,12 @@ a, .danger,.book-remove, .editable-empty, .editable-empty:hover { color: #45b29d color: #444; } +.container-fluid .book .meta .series { + font-weight: 400; + font-size: 12px; + color: #444; +} + .container-fluid .book .meta .author { font-size: 12px; color: #999; diff --git a/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js new file mode 100644 index 00000000..046e9eb5 --- /dev/null +++ b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.el={days:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],daysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],daysMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μάι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],today:"Σήμερα",clear:"Καθαρισμός",weekStart:1,format:"d/m/yyyy"}}(jQuery); \ No newline at end of file diff --git a/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js new file mode 100644 index 00000000..7889b113 --- /dev/null +++ b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",clear:"Temizle",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh_Hans_CN.min.js similarity index 100% rename from cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js rename to cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh_Hans_CN.min.js diff --git a/cps/static/js/libs/tinymce/langs/el.js b/cps/static/js/libs/tinymce/langs/el.js new file mode 100644 index 00000000..b5f840da --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/el.js @@ -0,0 +1,261 @@ +tinymce.addI18n('el',{ +"Redo": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7", +"Undo": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7", +"Cut": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae", +"Copy": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", +"Paste": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7", +"Select all": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd", +"New document": "\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf", +"Ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", +"Cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7", +"Visual aids": "O\u03c0\u03c4\u03b9\u03ba\u03ac \u03b2\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1 ", +"Bold": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b7", +"Italic": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1", +"Underline": "\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7", +"Strikethrough": "\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", +"Superscript": "\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2", +"Subscript": "\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2", +"Clear formatting": "\u0391\u03c0\u03b1\u03bb\u03bf\u03b9\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2", +"Align left": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", +"Align center": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf", +"Align right": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac", +"Justify": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", +"Bullet list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b5\u03c2", +"Numbered list": "\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1", +"Decrease indent": "\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", +"Increase indent": "\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", +"Close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", +"Formats": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u039f \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5 Ctrl+X\/C\/V.", +"Headers": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2", +"Header 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1", +"Header 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2", +"Header 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3", +"Header 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4", +"Header 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5", +"Header 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6", +"Headings": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2", +"Heading 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1", +"Heading 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2", +"Heading 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3", +"Heading 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4", +"Heading 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5", +"Heading 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6", +"Preformatted": "\u03a0\u03c1\u03bf\u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03bc\u03ad\u03bd\u03bf", +"Div": "Div", +"Pre": "Pre", +"Code": "\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2", +"Paragraph": "\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2", +"Blockquote": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2", +"Inline": "\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b7", +"Blocks": "\u03a4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0397 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03bc\u03b9\u03b1\u03c2 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03cc\u03c3\u03bf \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae.", +"Font Family": "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac", +"Font Sizes": "\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2", +"Class": "\u039a\u03bb\u03ac\u03c3\u03b7", +"Browse for an image": "\u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1", +"OR": "\u0389", +"Drop an image here": "\u03a1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03b4\u03ce", +"Upload": "\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7", +"Block": "\u03a4\u03bc\u03ae\u03bc\u03b1", +"Align": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", +"Default": "\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf", +"Circle": "\u039a\u03cd\u03ba\u03bb\u03bf\u03c2", +"Disc": "\u0394\u03af\u03c3\u03ba\u03bf\u03c2", +"Square": "\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf", +"Lower Alpha": "\u03a0\u03b5\u03b6\u03ac \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac", +"Lower Greek": "\u03a0\u03b5\u03b6\u03ac \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac", +"Lower Roman": "\u03a0\u03b5\u03b6\u03ac \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac", +"Upper Alpha": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac", +"Upper Roman": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac", +"Anchor": "\u0391\u03b3\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7", +"Name": "\u038c\u03bd\u03bf\u03bc\u03b1", +"Id": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u039f \u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1, \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1, \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2, \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2, \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2, \u03ac\u03bd\u03c9 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1 \u03ae \u03c5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03af\u03c3\u03b5\u03b9\u03c2.", +"You have unsaved changes are you sure you want to navigate away?": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;", +"Restore last draft": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03c3\u03c7\u03b5\u03b4\u03af\u03bf\u03c5", +"Special character": "\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2", +"Source code": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2", +"Insert\/Edit code sample": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1", +"Language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1", +"Code sample": "\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1", +"Color": "\u03a7\u03c1\u03ce\u03bc\u03b1", +"R": "\u03ba", +"G": "\u03a0", +"B": "\u039c", +"Left to right": "\u0391\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac", +"Right to left": "\u0391\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", +"Emoticons": "\u03a6\u03b1\u03c4\u03c3\u03bf\u03cd\u03bb\u03b5\u03c2", +"Document properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5", +"Title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2", +"Keywords": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac", +"Description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", +"Robots": "\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4", +"Author": "\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2", +"Encoding": "\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", +"Fullscreen": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7", +"Action": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1", +"Shortcut": "\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7", +"Help": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1", +"Address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7", +"Focus to menubar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd", +"Focus to toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd", +"Focus to element path": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5", +"Focus to contextual toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd", +"Insert link (if link plugin activated)": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5)", +"Save (if save plugin activated)": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2)", +"Find (if searchreplace plugin activated)": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2)", +"Plugins installed ({0}):": "\u0395\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 ({0}):", +"Premium plugins:": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03c5\u03c8\u03b7\u03bb\u03ae\u03c2 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:", +"Learn more...": "\u039c\u03ac\u03b8\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...", +"You are using {0}": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 {0}", +"Plugins": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1", +"Handy Shortcuts": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2", +"Horizontal line": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae", +"Insert\/edit image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", +"Image description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", +"Source": "\u03a0\u03b7\u03b3\u03ae", +"Dimensions": "\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2", +"Constrain proportions": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03b9\u03ce\u03bd", +"General": "\u0393\u03b5\u03bd\u03b9\u03ba\u03ac", +"Advanced": "\u0393\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2", +"Style": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7", +"Vertical space": "\u039a\u03ac\u03b8\u03b5\u03c4\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1", +"Horizontal space": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1", +"Border": "\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf", +"Insert image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", +"Image": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1", +"Image list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd", +"Rotate counterclockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1", +"Rotate clockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b4\u03b5\u03be\u03b9\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1", +"Flip vertically": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03ba\u03b1\u03b8\u03ad\u03c4\u03c9\u03c2", +"Flip horizontally": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03c2", +"Edit image": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", +"Image options": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", +"Zoom in": "\u039c\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7", +"Zoom out": "\u03a3\u03bc\u03af\u03ba\u03c1\u03c5\u03bd\u03c3\u03b7", +"Crop": "\u03a0\u03b5\u03c1\u03b9\u03ba\u03bf\u03c0\u03ae", +"Resize": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2", +"Orientation": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03c3\u03bc\u03cc\u03c2", +"Brightness": "\u03a6\u03c9\u03c4\u03b5\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1", +"Sharpen": "\u038c\u03be\u03c5\u03bd\u03c3\u03b7", +"Contrast": "\u0391\u03bd\u03c4\u03af\u03b8\u03b5\u03c3\u03b7", +"Color levels": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2", +"Gamma": "\u0393\u03ac\u03bc\u03bc\u03b1", +"Invert": "\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae", +"Apply": "\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae", +"Back": "\u03a0\u03af\u03c3\u03c9", +"Insert date\/time": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2\/\u03ce\u03c1\u03b1\u03c2", +"Date\/time": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\/\u03ce\u03c1\u03b1", +"Insert link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", +"Insert\/edit link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", +"Text to display": "\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7", +"Url": "URL", +"Target": "\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", +"None": "\u039a\u03b1\u03bc\u03af\u03b1", +"New window": "\u039d\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf", +"Remove link": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", +"Anchors": "\u0386\u03b3\u03ba\u03c5\u03c1\u03b5\u03c2", +"Link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2", +"Paste or type a link": "\u0395\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5 \u03ae \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 email. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 mailto:;", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http:\/\/;", +"Link list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd", +"Insert video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf", +"Insert\/edit video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf", +"Insert\/edit media": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 media", +"Alternative source": "\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7", +"Poster": "\u0391\u03c6\u03af\u03c3\u03b1", +"Paste your embed code below:": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9:", +"Embed": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7", +"Media": "\u039c\u03ad\u03c3\u03b1 (\u03bc\u03af\u03bd\u03c4\u03b9\u03b1)", +"Nonbreaking space": "\u039a\u03b5\u03bd\u03cc \u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae", +"Page break": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2", +"Paste as text": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf", +"Preview": "\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7", +"Print": "\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7", +"Save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7", +"Find": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7", +"Replace with": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5", +"Replace": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7", +"Replace all": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd", +"Prev": "\u03a0\u03c1\u03bf\u03b7\u03b3.", +"Next": "\u0395\u03c0\u03cc\u03bc.", +"Find and replace": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7", +"Could not find the specified string.": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.", +"Match case": "\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03b5\u03b6\u03ce\u03bd\/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd", +"Whole words": "\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2", +"Spellcheck": "\u039f\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 ", +"Ignore": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7", +"Ignore all": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd", +"Finish": "\u03a4\u03ad\u03bb\u03bf\u03c2", +"Add to Dictionary": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf \u039b\u03b5\u03be\u03b9\u03ba\u03cc", +"Insert table": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", +"Table properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", +"Delete table": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", +"Cell": "\u039a\u03b5\u03bb\u03af", +"Row": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ae", +"Column": "\u03a3\u03c4\u03ae\u03bb\u03b7", +"Cell properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", +"Merge cells": "\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", +"Split cell": "\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", +"Insert row before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9", +"Insert row after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9", +"Delete row": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", +"Row properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", +"Cut row": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", +"Copy row": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", +"Paste row before": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9", +"Paste row after": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9", +"Insert column before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", +"Insert column after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac", +"Delete column": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2", +"Cols": "\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2", +"Rows": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2", +"Width": "\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2", +"Height": "\u038e\u03c8\u03bf\u03c2", +"Cell spacing": "\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", +"Cell padding": "\u0391\u03bd\u03b1\u03c0\u03bb\u03ae\u03c1\u03c9\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", +"Caption": "\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1", +"Left": "\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", +"Center": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7", +"Right": "\u0394\u03b5\u03be\u03b9\u03ac", +"Cell type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", +"Scope": "\u0388\u03ba\u03c4\u03b1\u03c3\u03b7", +"Alignment": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", +"H Align": "\u039f\u03c1. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", +"V Align": "\u039a. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", +"Top": "\u039a\u03bf\u03c1\u03c5\u03c6\u03ae", +"Middle": "\u039c\u03ad\u03c3\u03b7", +"Bottom": "\u039a\u03ac\u03c4\u03c9", +"Header cell": "\u039a\u03b5\u03bb\u03af-\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1", +"Row group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd", +"Column group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd", +"Row type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", +"Header": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1", +"Body": "\u03a3\u03ce\u03bc\u03b1", +"Footer": "\u03a5\u03c0\u03bf\u03c3\u03ad\u03bb\u03b9\u03b4\u03bf", +"Border color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5", +"Insert template": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5 ", +"Templates": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1", +"Template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf", +"Text color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 ", +"Background color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5", +"Custom...": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae...", +"Custom color": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1", +"No color": "\u03a7\u03c9\u03c1\u03af\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1", +"Table of Contents": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd", +"Show blocks": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bc\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd", +"Show invisible characters": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03ba\u03c1\u03c5\u03c6\u03ce\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd", +"Words: {0}": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2: {0}", +"{0} words": "{0} \u03bb\u03ad\u03be\u03b5\u03b9\u03c2", +"File": "\u0391\u03c1\u03c7\u03b5\u03af\u03bf", +"Edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1", +"Insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae", +"View": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae", +"Format": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", +"Table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2", +"Tools": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1", +"Powered by {0}": "\u03a4\u03c1\u03bf\u03c6\u03bf\u03b4\u03bf\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc {0}", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u0395\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/tr.js b/cps/static/js/libs/tinymce/langs/tr.js new file mode 100644 index 00000000..200a15f1 --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/tr.js @@ -0,0 +1,419 @@ +tinymce.addI18n('tr',{ +"Redo": "Yinele", +"Undo": "Geri al", +"Cut": "Kes", +"Copy": "Kopyala", +"Paste": "Yap\u0131\u015ft\u0131r", +"Select all": "T\u00fcm\u00fcn\u00fc se\u00e7", +"New document": "Yeni dok\u00fcman", +"Ok": "Tamam", +"Cancel": "\u0130ptal", +"Visual aids": "G\u00f6rsel ara\u00e7lar", +"Bold": "Kal\u0131n", +"Italic": "\u0130talik", +"Underline": "Alt\u0131 \u00e7izili", +"Strikethrough": "\u00dcst\u00fc \u00e7izgili", +"Superscript": "\u00dcst simge", +"Subscript": "Alt simge", +"Clear formatting": "Bi\u00e7imi temizle", +"Align left": "Sola hizala", +"Align center": "Ortala", +"Align right": "Sa\u011fa hizala", +"Justify": "\u0130ki yana yasla", +"Bullet list": "S\u0131ras\u0131z liste", +"Numbered list": "S\u0131ral\u0131 liste", +"Decrease indent": "Girintiyi azalt", +"Increase indent": "Girintiyi art\u0131r", +"Close": "Kapat", +"Formats": "Bi\u00e7imler", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.", +"Headers": "Ba\u015fl\u0131klar", +"Header 1": "Ba\u015fl\u0131k 1", +"Header 2": "Ba\u015fl\u0131k 2", +"Header 3": "Ba\u015fl\u0131k 3", +"Header 4": "Ba\u015fl\u0131k 4", +"Header 5": "Ba\u015fl\u0131k 5", +"Header 6": "Ba\u015fl\u0131k 6", +"Headings": "Ba\u015fl\u0131klar", +"Heading 1": "Ba\u015fl\u0131k 1", +"Heading 2": "Ba\u015fl\u0131k 2", +"Heading 3": "Ba\u015fl\u0131k 3", +"Heading 4": "Ba\u015fl\u0131k 4", +"Heading 5": "Ba\u015fl\u0131k 5", +"Heading 6": "Ba\u015fl\u0131k 6", +"Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f", +"Div": "Div", +"Pre": "Pre", +"Code": "Kod", +"Paragraph": "Paragraf", +"Blockquote": "Blockquote", +"Inline": "Sat\u0131r i\u00e7i", +"Blocks": "Bloklar", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.", +"Fonts": "Yaz\u0131 Tipleri", +"Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc", +"Class": "S\u0131n\u0131f", +"Browse for an image": "Bir resim aray\u0131n", +"OR": "VEYA", +"Drop an image here": "Buraya bir resim koyun", +"Upload": "Y\u00fckle", +"Block": "Blok", +"Align": "Hizala", +"Default": "Varsay\u0131lan", +"Circle": "Daire", +"Disc": "Disk", +"Square": "Kare", +"Lower Alpha": "K\u00fc\u00e7\u00fck Harf", +"Lower Greek": "K\u00fc\u00e7\u00fck Yunan Harfleri", +"Lower Roman": "K\u00fc\u00e7\u00fck Roman Harfleri ", +"Upper Alpha": "B\u00fcy\u00fck Harf", +"Upper Roman": "B\u00fcy\u00fck Roman Harfleri ", +"Anchor...": "\u00c7apa...", +"Name": "\u0130sim", +"Id": "Kimlik", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve harf, rakam, \u00e7izgi, nokta, iki nokta \u00fcst\u00fcste veya alt \u00e7izgi kullan\u0131labilir.", +"You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?", +"Restore last draft": "Son tasla\u011f\u0131 geri y\u00fckle", +"Special character...": "\u00d6zel karakter...", +"Source code": "Kaynak kodu", +"Insert\/Edit code sample": "\u00d6rnek kod ekle\/d\u00fczenle", +"Language": "Dil", +"Code sample...": "Kod \u00f6rne\u011fi...", +"Color Picker": "Renk Se\u00e7ici", +"R": "R", +"G": "G", +"B": "B", +"Left to right": "Soldan sa\u011fa", +"Right to left": "Sa\u011fdan sola", +"Emoticons...": "\u0130fadeler...", +"Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri", +"Title": "Ba\u015fl\u0131k", +"Keywords": "Anahtar kelimeler", +"Description": "A\u00e7\u0131klama", +"Robots": "Robotlar", +"Author": "Yazar", +"Encoding": "Kodlama", +"Fullscreen": "Tam ekran", +"Action": "Eylem", +"Shortcut": "K\u0131sayol", +"Help": "Yard\u0131m", +"Address": "Adres", +"Focus to menubar": "Men\u00fcye odaklan", +"Focus to toolbar": "Ara\u00e7 tak\u0131m\u0131na odaklan", +"Focus to element path": "\u00d6\u011fe yoluna odaklan", +"Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 tak\u0131m\u0131na odaklan", +"Insert link (if link plugin activated)": "Ba\u011flant\u0131 ekle (Ba\u011flant\u0131 eklentisi aktif ise)", +"Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)", +"Find (if searchreplace plugin activated)": "Bul (Bul\/De\u011fi\u015ftir eklentisi aktif ise)", +"Plugins installed ({0}):": "Eklentiler y\u00fcklendi ({0}):", +"Premium plugins:": "Premium eklentiler:", +"Learn more...": "Detayl\u0131 bilgi...", +"You are using {0}": "\u015eu an {0} kullan\u0131yorsunuz", +"Plugins": "Plugins", +"Handy Shortcuts": "Handy Shortcuts", +"Horizontal line": "Yatay \u00e7izgi", +"Insert\/edit image": "Resim ekle\/d\u00fczenle", +"Image description": "Resim a\u00e7\u0131klamas\u0131", +"Source": "Kaynak", +"Dimensions": "Boyutlar", +"Constrain proportions": "Oranlar\u0131 koru", +"General": "Genel", +"Advanced": "Geli\u015fmi\u015f", +"Style": "Stil", +"Vertical space": "Dikey bo\u015fluk", +"Horizontal space": "Yatay bo\u015fluk", +"Border": "Kenarl\u0131k", +"Insert image": "Resim ekle", +"Image...": "Resim...", +"Image list": "G\u00f6rsel listesi", +"Rotate counterclockwise": "Saatin tersi y\u00f6n\u00fcnde d\u00f6nd\u00fcr", +"Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr", +"Flip vertically": "Dikine \u00e7evir", +"Flip horizontally": "Enine \u00e7evir", +"Edit image": "Resmi d\u00fczenle", +"Image options": "Resim ayarlar\u0131", +"Zoom in": "Yak\u0131nla\u015ft\u0131r", +"Zoom out": "Uzakla\u015ft\u0131r", +"Crop": "K\u0131rp", +"Resize": "Yeniden Boyutland\u0131r", +"Orientation": "Oryantasyon", +"Brightness": "Parlakl\u0131k", +"Sharpen": "Keskinle\u015ftir", +"Contrast": "Kontrast", +"Color levels": "Renk d\u00fczeyleri", +"Gamma": "Gama", +"Invert": "Ters \u00c7evir", +"Apply": "Uygula", +"Back": "Geri", +"Insert date\/time": "Tarih\/saat ekle", +"Date\/time": "Tarih\/saat", +"Insert\/Edit Link": "Ba\u011flant\u0131 Ekle\/D\u00fczenle", +"Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle", +"Text to display": "Yaz\u0131y\u0131 g\u00f6r\u00fcnt\u00fcle", +"Url": "Url", +"Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...", +"Current window": "Mevcut pencere", +"None": "Hi\u00e7biri", +"New window": "Yeni pencere", +"Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r", +"Anchors": "\u00c7apalar", +"Link...": "Ba\u011flant\u0131...", +"Paste or type a link": "Bir ba\u011flant\u0131 yaz\u0131n yada yap\u0131\u015ft\u0131r\u0131n", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?", +"Link list": "Ba\u011flant\u0131 listesi", +"Insert video": "Video ekle", +"Insert\/edit video": "Video ekle\/d\u00fczenle", +"Insert\/edit media": "Medya ekle\/d\u00fczenle", +"Alternative source": "Alternatif kaynak", +"Alternative source URL": "Alternatif kaynak URL", +"Media poster (Image URL)": "Medya posteri (Resim URL)", +"Paste your embed code below:": "Video g\u00f6mme kodunu a\u015fa\u011f\u0131ya yap\u0131\u015ft\u0131r\u0131n\u0131z:", +"Embed": "G\u00f6mme", +"Media...": "Medya...", +"Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk", +"Page break": "Sayfa sonu", +"Paste as text": "Metin olarak yap\u0131\u015ft\u0131r", +"Preview": "\u00d6nizleme", +"Print...": "Yazd\u0131r...", +"Save": "Kaydet", +"Find": "Bul", +"Replace with": "Bununla de\u011fi\u015ftir", +"Replace": "De\u011fi\u015ftir", +"Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir", +"Previous": "Geri", +"Next": "Sonraki", +"Find and replace...": "Bul ve de\u011fi\u015ftir...", +"Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.", +"Match case": "B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131", +"Find whole words only": "Sadece t\u00fcm kelimeyi ara", +"Spell check": "Yaz\u0131m denetimi", +"Ignore": "Yoksay", +"Ignore all": "T\u00fcm\u00fcn\u00fc yoksay", +"Finish": "Bitir", +"Add to Dictionary": "S\u00f6zl\u00fc\u011fe Ekle", +"Insert table": "Tablo ekle", +"Table properties": "Tablo \u00f6zellikleri", +"Delete table": "Tablo sil", +"Cell": "H\u00fccre", +"Row": "Sat\u0131r", +"Column": "S\u00fctun", +"Cell properties": "H\u00fccre \u00f6zellikleri", +"Merge cells": "H\u00fccreleri birle\u015ftir", +"Split cell": "H\u00fccre b\u00f6l", +"Insert row before": "\u00dcste sat\u0131r ekle", +"Insert row after": "Alta sat\u0131r ekle ", +"Delete row": "Sat\u0131r sil", +"Row properties": "Sat\u0131r \u00f6zellikleri", +"Cut row": "Sat\u0131r\u0131 kes", +"Copy row": "Sat\u0131r\u0131 kopyala", +"Paste row before": "\u00dcste sat\u0131r yap\u0131\u015ft\u0131r", +"Paste row after": "Alta sat\u0131r yap\u0131\u015ft\u0131r", +"Insert column before": "Sola s\u00fctun ekle", +"Insert column after": "Sa\u011fa s\u00fctun ekle", +"Delete column": "S\u00fctun sil", +"Cols": "S\u00fctunlar", +"Rows": "Sat\u0131rlar", +"Width": "Geni\u015flik", +"Height": "Y\u00fckseklik", +"Cell spacing": "H\u00fccre aral\u0131\u011f\u0131", +"Cell padding": "H\u00fccre dolgusu", +"Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster", +"Left": "Sol", +"Center": "Orta", +"Right": "Sa\u011f", +"Cell type": "H\u00fccre tipi", +"Scope": "Kapsam", +"Alignment": "Hizalama", +"H Align": "Yatay Hizalama", +"V Align": "Dikey Hizalama", +"Top": "\u00dcst", +"Middle": "Orta", +"Bottom": "Alt", +"Header cell": "Ba\u015fl\u0131k h\u00fccresi", +"Row group": "Sat\u0131r grubu", +"Column group": "S\u00fctun grubu", +"Row type": "Sat\u0131r tipi", +"Header": "Ba\u015fl\u0131k", +"Body": "G\u00f6vde", +"Footer": "Alt", +"Border color": "Kenarl\u0131k rengi", +"Insert template...": "\u015eablon ekle...", +"Templates": "\u015eablonlar", +"Template": "Taslak", +"Text color": "Yaz\u0131 rengi", +"Background color": "Arka plan rengi", +"Custom...": "\u00d6zel...", +"Custom color": "\u00d6zel renk", +"No color": "Renk yok", +"Remove color": "Rengi kald\u0131r", +"Table of Contents": "\u0130\u00e7erik tablosu", +"Show blocks": "Bloklar\u0131 g\u00f6ster", +"Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster", +"Word count": "Kelime say\u0131s\u0131", +"Count": "Say\u0131m", +"Document": "Belge", +"Selection": "Se\u00e7im", +"Words": "S\u00f6zc\u00fck", +"Words: {0}": "Kelime: {0}", +"{0} words": "{0} words", +"File": "Dosya", +"Edit": "D\u00fczenle", +"Insert": "Ekle", +"View": "G\u00f6r\u00fcn\u00fcm", +"Format": "Bi\u00e7im", +"Table": "Tablo", +"Tools": "Ara\u00e7lar", +"Powered by {0}": "Powered by {0}", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 tu\u015funa bas\u0131n\u0131z. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 tu\u015funa bas\u0131n\u0131z. Yard\u0131m i\u00e7in ALT-0 tu\u015funa bas\u0131n\u0131z.", +"Image title": "Resim ba\u015fl\u0131\u011f\u0131", +"Border width": "Kenar geni\u015fli\u011fi", +"Border style": "Kenar sitili", +"Error": "Hata", +"Warn": "Uyar\u0131", +"Valid": "Ge\u00e7erli", +"To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n", +"Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.", +"System Font": "Sistem Yaz\u0131 Tipi", +"Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}", +"Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0}", +"Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}", +"Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}", +"example": "\u00f6rnek", +"Search": "Ara", +"All": "T\u00fcm\u00fc", +"Currency": "Para birimi", +"Text": "Metin", +"Quotations": "Al\u0131nt\u0131", +"Mathematical": "Matematik", +"Extended Latin": "Uzat\u0131lm\u0131\u015f Latin", +"Symbols": "Semboller", +"Arrows": "Oklar", +"User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131", +"dollar sign": "dolar i\u015fareti", +"currency sign": "para birimi i\u015fareti", +"euro-currency sign": "euro para birimi i\u015fareti", +"colon sign": "colon i\u015fareti", +"cruzeiro sign": "cruzeiro i\u015fareti", +"french franc sign": "frans\u0131z frang\u0131 i\u015fareti", +"lira sign": "lira i\u015fareti", +"mill sign": "mill i\u015fareti", +"naira sign": "naira i\u015fareti", +"peseta sign": "peseta i\u015fareti", +"rupee sign": "rupi i\u015fareti", +"won sign": "won i\u015fareti", +"new sheqel sign": "yeni \u015fekel i\u015fareti", +"dong sign": "dong i\u015fareti", +"kip sign": "kip i\u015fareti", +"tugrik sign": "tugrik i\u015fareti", +"drachma sign": "drahma i\u015fareti", +"german penny symbol": "alman kuru\u015f sembol\u00fc", +"peso sign": "peso i\u015fareti", +"guarani sign": "guarani i\u015fareti", +"austral sign": "austral i\u015fareti", +"hryvnia sign": "hrivniya i\u015fareti", +"cedi sign": "cedi i\u015fareti", +"livre tournois sign": "livre tournois i\u015fareti", +"spesmilo sign": "spesmilo i\u015fareti", +"tenge sign": "tenge i\u015fareti", +"indian rupee sign": "hindistan rupisi i\u015fareti", +"turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti", +"nordic mark sign": "nordic i\u015fareti", +"manat sign": "manat i\u015fareti", +"ruble sign": "ruble i\u015fareti", +"yen character": "yen karakteri", +"yuan character": "yuan karakteri", +"yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan", +"yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni", +"Loading emoticons...": "\u0130fadeler y\u00fckleniyor...", +"Could not load emoticons": "\u0130fadeler y\u00fcklenemedi", +"People": "\u0130nsan", +"Animals and Nature": "Hayvanlar ve Do\u011fa", +"Food and Drink": "Yiyecek ve \u0130\u00e7ecek", +"Activity": "Etkinlik", +"Travel and Places": "Gezi ve Yerler", +"Objects": "Nesneler", +"Flags": "Bayraklar", +"Characters": "Karakter", +"Characters (no spaces)": "Karakter (bo\u015fluksuz)", +"{0} characters": "{0} karakter", +"Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.", +"Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.", +"Update": "G\u00fcncelle\u015ftir", +"Color swatch": "Renk \u00f6rne\u011fi", +"Turquoise": "Turkuaz", +"Green": "Ye\u015fil", +"Blue": "Mavi", +"Purple": "Mor", +"Navy Blue": "Lacivert", +"Dark Turquoise": "Koyu Turkuaz", +"Dark Green": "Koyu Ye\u015fil", +"Medium Blue": "Donuk Mavi", +"Medium Purple": "Orta Mor", +"Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi", +"Yellow": "Sar\u0131", +"Orange": "Turuncu", +"Red": "K\u0131rm\u0131z\u0131", +"Light Gray": "A\u00e7\u0131k Gri", +"Gray": "Gri", +"Dark Yellow": "Koyu Sar\u0131", +"Dark Orange": "Koyu Turuncu", +"Dark Red": "Koyu K\u0131rm\u0131z\u0131", +"Medium Gray": "Orta Gri", +"Dark Gray": "Koyu Gri", +"Light Green": "A\u00e7\u0131k Ye\u015fil", +"Light Yellow": "A\u00e7\u0131k Sar\u0131", +"Light Red": "A\u00e7\u0131k K\u0131rm\u0131z\u0131", +"Light Purple": "A\u00e7\u0131k Mor", +"Light Blue": "A\u00e7\u0131k Mavi", +"Dark Purple": "Koyu Mor", +"Dark Blue": "Lacivert", +"Black": "Siyah", +"White": "Beyaz", +"Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k", +"Open help dialog": "Yard\u0131m penceresini a\u00e7", +"history": "ge\u00e7mi\u015f", +"styles": "stiller", +"formatting": "bi\u00e7imlendirme", +"alignment": "hizalanma", +"indentation": "girinti", +"permanent pen": "kal\u0131c\u0131 kalem", +"comments": "yorumlar", +"Format Painter": "Bi\u00e7im Boyac\u0131s\u0131", +"Insert\/edit iframe": "\u0130frame ekle\/d\u00fczenle", +"Capitalization": "B\u00fcy\u00fck Harfle Yaz\u0131m", +"lowercase": "k\u00fc\u00e7\u00fck harf", +"UPPERCASE": "B\u00dcY\u00dcK HARF", +"Title Case": "\u0130lk Harfler B\u00fcy\u00fck", +"Permanent Pen Properties": "Kal\u0131c\u0131 Kalem \u00d6zellikleri", +"Permanent pen properties...": "Kal\u0131c\u0131 kalem \u00f6zellikleri...", +"Font": "Yaz\u0131 Tipi", +"Size": "Boyut", +"More...": "Devam\u0131...", +"Spellcheck Language": "Yaz\u0131m Denetimi Dili", +"Select...": "Se\u00e7...", +"Preferences": "Tercihler", +"Yes": "Evet", +"No": "Hay\u0131r", +"Keyboard Navigation": "Klavye Tu\u015flar\u0131", +"Version": "S\u00fcr\u00fcm", +"Anchor": "\u00c7apa", +"Special character": "\u00d6zel karakter", +"Code sample": "Code sample", +"Color": "Renk", +"Emoticons": "\u0130fadeler", +"Document properties": "Dok\u00fcman \u00f6zellikleri", +"Image": "Resim", +"Insert link": "Ba\u011flant\u0131 ekle", +"Target": "Hedef", +"Link": "Ba\u011flant\u0131", +"Poster": "Poster", +"Media": "Medya", +"Print": "Yazd\u0131r", +"Prev": "\u00d6nceki", +"Find and replace": "Bul ve de\u011fi\u015ftir", +"Whole words": "Tam kelimeler", +"Spellcheck": "Yaz\u0131m denetimi", +"Caption": "Ba\u015fl\u0131k", +"Insert template": "\u015eablon ekle" +}); \ No newline at end of file diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py index b60d4976..659c6e9c 100644 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -8,7 +8,7 @@ from shutil import copyfile from sqlalchemy.exc import SQLAlchemyError -from cps.services.worker import CalibreTask, STAT_FINISH_SUCCESS +from cps.services.worker import CalibreTask from cps import calibre_db, db from cps import logger, config from cps.subproc_wrapper import process_open diff --git a/cps/templates/author.html b/cps/templates/author.html index 41a9aebb..0015d6e2 100644 --- a/cps/templates/author.html +++ b/cps/templates/author.html @@ -70,6 +70,14 @@ {% endif %} {% endfor %}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %} {% if entry.ratings.__len__() > 0 %}
{% for number in range((entry.ratings[0].rating/2)|int(2)) %} @@ -114,6 +122,14 @@ {% endif %} {% endfor %}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %}
{% for number in range((entry.average_rating)|float|round|int(2)) %} diff --git a/cps/templates/discover.html b/cps/templates/discover.html index 7e343d79..9abe3666 100644 --- a/cps/templates/discover.html +++ b/cps/templates/discover.html @@ -34,6 +34,14 @@ {% endif %} {% endfor %}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %} {% if entry.ratings.__len__() > 0 %}
{% for number in range((entry.ratings[0].rating/2)|int(2)) %} diff --git a/cps/templates/http_error.html b/cps/templates/http_error.html index 574bac72..042ed1c5 100644 --- a/cps/templates/http_error.html +++ b/cps/templates/http_error.html @@ -13,7 +13,7 @@ {% if g.current_theme == 1 %} - + {% endif %} diff --git a/cps/templates/index.html b/cps/templates/index.html index 13105008..e60f92fe 100644 --- a/cps/templates/index.html +++ b/cps/templates/index.html @@ -33,6 +33,14 @@ {% endif %} {% endfor %}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %} {% if entry.ratings.__len__() > 0 %}
{% for number in range((entry.ratings[0].rating/2)|int(2)) %} @@ -101,6 +109,14 @@ {% endif %} {%endfor%}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %} {% if entry.ratings.__len__() > 0 %}
{% for number in range((entry.ratings[0].rating/2)|int(2)) %} diff --git a/cps/templates/layout.html b/cps/templates/layout.html index e43801d3..c555f556 100644 --- a/cps/templates/layout.html +++ b/cps/templates/layout.html @@ -16,7 +16,7 @@ {% if g.current_theme == 1 %} - + {% endif %} diff --git a/cps/templates/search.html b/cps/templates/search.html index 868a240e..cba430a4 100644 --- a/cps/templates/search.html +++ b/cps/templates/search.html @@ -72,6 +72,15 @@ {% endif %} {% endfor %}

+ {% if entry.series.__len__() > 0 %} +

+ + {{entry.series[0].name}} + + ({{entry.series_index|formatseriesindex}}) +

+ {% endif %} + {% if entry.ratings.__len__() > 0 %}
{% for number in range((entry.ratings[0].rating/2)|int(2)) %} diff --git a/cps/templates/search_form.html b/cps/templates/search_form.html index f1ea250f..e713fb93 100644 --- a/cps/templates/search_form.html +++ b/cps/templates/search_form.html @@ -1,5 +1,6 @@ {% extends "layout.html" %} {% block body %} +

{{title}}