# Italian translation for gst-plugins-ugly package of GStreamer project.
# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
# This file is distributed under the same license as the gst-plugins-ugly package.
# Luca Ferretti <elle.uca@infinito.it>, 2007, 2008, 2009.Luca Ferretti <elle.uca@infinito.it>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-ugly 0.10.11.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
"POT-Creation-Date: 2017-01-12 14:45+0200\n"
"PO-Revision-Date: 2009-06-14 12:31+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Could not read from CD."
msgstr "Impossibile leggere dal CD."

msgid "Could not open CD device for reading."
msgstr "Impossibile aprire il dispositivo CD in lettura."

msgid "Disc is not an Audio CD."
msgstr "Il disco non è un CD audio."

msgid "Could not open DVD"
msgstr "Impossibile aprire il DVD"

#, c-format
msgid "Could not open DVD title %d"
msgstr "Impossibile aprire il titolo %d del DVD"

# go --> open (più comune in italiano)
#, c-format
msgid "Failed to go to chapter %d of DVD title %d"
msgstr "Apertura del capitolo %d del titolo %d del DVD non riuscita"

#, c-format
msgid ""
"Could not open DVD title %d. Interactive titles are not supported by this "
"element"
msgstr ""
"Impossibile aprire il titolo %d del DVD. I titoli interattivi non sono "
"supportati da questo elemento"

msgid ""
"Could not read DVD. This may be because the DVD is encrypted and a DVD "
"decryption library is not installed."
msgstr ""

#, fuzzy
msgid "Could not read DVD."
msgstr "Impossibile aprire il DVD"

#, fuzzy
msgid ""
"Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
msgstr ""
"Configurazione dell'encoder TwoLAME non riuscita. Verificare i propri "
"parametri di codifica."

# NEW
#, c-format
msgid ""
"The requested bitrate %d kbit/s for property '%s' is not allowed. The "
"bitrate was changed to %d kbit/s."
msgstr ""
"Il bitrate richiesto (%d kbit/s) per la proprietà \"%s\" non è consentito. "
"Il bitrate è stato cambiato a %d kbit/s."

msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
msgstr ""
"Configurazione dell'encoder TwoLAME non riuscita. Verificare i propri "
"parametri di codifica."

# NEW
msgid "This stream contains no data."
msgstr "Questo stream non contiene alcun dato."

#~ msgid "Internal data stream error."
#~ msgstr "Errore interno dello stream di dati."

#, fuzzy
#~ msgid ""
#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
#~ msgstr ""
#~ "Configurazione dell'encoder LAME non riuscita. Verificare i propri "
#~ "parametri di codifica."

#~ msgid "Invalid title information on DVD."
#~ msgstr "Informazioni del titolo non valide sul DVD."

#~ msgid "Could not read title information for DVD."
#~ msgstr "Impossibile leggere le informazioni del titolo per il DVD."

#~ msgid "Failed to open DVD device '%s'."
#~ msgstr "Apertura del device DVD «%s» non riuscita."

#~ msgid "Failed to set PGC based seeking."
#~ msgstr "Impostazione del posizionamento basato su PGC non riuscita."
