# Greek translation for gst-plugins-bad.
# This file is put in the public domain.
#
# Michael Kotsarinis <mk73628@gmail.com>, 2010.
# Simos Xenitellis <simos.lists@googlemail.com>, 2010.
# Savvas Radevic <vicedar@gmail.com>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
"POT-Creation-Date: 2017-05-04 15:09+0300\n"
"PO-Revision-Date: 2012-05-05 19:17+0100\n"
"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"

msgid "failed to draw pattern"
msgstr ""

msgid "A GL error occured"
msgstr ""

msgid "format wasn't negotiated before get function"
msgstr ""

msgid "OpenCV failed to load template image"
msgstr ""

msgid "Could not read title information for DVD."
msgstr "Αδυναμία ανάγνωσης πληροφοριών τίτλου του DVD."

#, c-format
msgid "Failed to open DVD device '%s'."
msgstr "Αποτυχία ανοίγματος της συσκευής DVD '%s'."

msgid "Failed to set PGC based seeking."
msgstr "Αποτυχία ορισμού αναζήτησης βασισμένη σε PGC."

msgid ""
"Could not read DVD. This may be because the DVD is encrypted and a DVD "
"decryption library is not installed."
msgstr ""
"Αδυναμία ανάγνωσης δίσκου DVD. Αυτό μπορεί να οφείλεται στο ότι το DVD είναι "
"κρυπτογραφημένο και δεν έχει εγκατασταθεί μια βιβλιοθήκη αποκρυπτογράφησης "
"DVD."

msgid "Could not read DVD."
msgstr "Αδυναμία ανάγνωσης δίσκου DVD."

msgid "This file contains no playable streams."
msgstr ""

#, fuzzy
msgid "Could not open sndfile stream for reading."
msgstr "Αδυναμία ανοίγματος αρχείου \"%s\" για ανάγνωση."

msgid "Generated file has a larger preroll time than its streams duration"
msgstr ""

#, c-format
msgid "Missing element '%s' - check your GStreamer installation."
msgstr ""

msgid "File location is set to NULL, please set it to a valid filename"
msgstr ""

msgid "Digitalzoom element couldn't be created"
msgstr ""

msgid "Subpicture format was not configured before data flow"
msgstr ""

msgid "Failed to get fragment URL."
msgstr ""

msgid "Couldn't download fragments"
msgstr ""

msgid "Internal data stream error."
msgstr "Εσωτερικό σφάλμα ροής δεδομένων."

#, c-format
msgid "Device \"%s\" does not exist."
msgstr "Η συσκευή \"%s\" δεν υπάρχει."

#, c-format
msgid "Could not open frontend device \"%s\"."
msgstr "Αδυναμία ανοίγματος συσκευής frontend \"%s\"."

#, c-format
msgid "Could not get settings from frontend device \"%s\"."
msgstr "Αδυναμία λήψης ρυθμίσεων από τη συσκευή frontend \"%s\"."

#, fuzzy, c-format
msgid "Cannot enumerate delivery systems from frontend device \"%s\"."
msgstr "Αδυναμία λήψης ρυθμίσεων από τη συσκευή frontend \"%s\"."

#, c-format
msgid "Could not open file \"%s\" for reading."
msgstr "Αδυναμία ανοίγματος αρχείου \"%s\" για ανάγνωση."

msgid "Couldn't find channel configuration file"
msgstr ""

#, c-format
msgid "Couldn't load channel configuration file: '%s'"
msgstr ""

#, c-format
msgid "Couldn't find details for channel '%s'"
msgstr ""

#, c-format
msgid "No properties for channel '%s'"
msgstr ""

#, fuzzy, c-format
msgid "Failed to set properties for channel '%s'"
msgstr "Αποτυχία ανοίγματος της συσκευής DVD '%s'."

#, c-format
msgid "Couldn't find channel configuration file: '%s'"
msgstr ""

msgid "Channel configuration file doesn't contain any channels"
msgstr ""

#, fuzzy
#~ msgid "Could not configure sndio"
#~ msgstr "Αδυναμία ανοίγματος αρχείου \"%s\" για ανάγνωση."

#, fuzzy
#~ msgid "Could not start sndio"
#~ msgstr "Αδυναμία ανάγνωσης δίσκου DVD."

#~ msgid "No file name specified for writing."
#~ msgstr "Δεν έχει καθορισθεί όνομα αρχείου για εγγραφή."

#~ msgid "Could not open file \"%s\" for writing."
#~ msgstr "Αδυναμία ανοίγματος αρχείου \"%s\" για εγγραφή."

#~ msgid "Internal data flow error."
#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."

#~ msgid "Could not write to file \"%s\"."
#~ msgstr "Αδυναμία εγγραφής στο αρχείο \"%s\"."
