Project

General

Profile

Feature #2573 » 0005-Remove-support-for-VLC-NPAPI-plugin-and-replace-it-w.patch

tmn505, 04/01/2019 06:05 PM

View differences:

css/siteprefs.css
width: 120px;
}
div#vlcControls {
text-align: center;
}
.notify-win {
margin: 0px auto;
max-width: 480px; /* depends on the tip backround image width */
css/styles.css
border-top: 1px solid #C0C1DA;
border-bottom: 1px solid #C0C1DA;
}
/* ##############################
# VLC page
##############################
*/
div#vlcControls {
padding-top: 5px;
text-align: center;
}
live/js/live/pageenhance.js
options: {
epgLinkSelector: 'a[href^="epginfo.html?epgid"]',
actionLinkSelector: 'a[href^="vdr_request/"]',
vlcLinkSelector: 'a[href^="vlc.html?"]',
vlcWinOptions: {
size: { width: 720, height: 640 }
},
editTimerSelector: 'a[href^="edit_timer.html?timerid"]',
hintTipSelector: '*[title]',
hintClassName: 'hint',
......
$$(this.options.epgLinkSelector).each(this.epgPopup.bind(this));
this.addHintTips($$(this.options.hintTipSelector));
$$(this.options.actionLinkSelector).each(this.vdrRequest.bind(this));
$$(this.options.vlcLinkSelector).each(this.vlcRequest.bind(this));
$$(this.options.datePickerSelector).each(this.datePicker.bind(this));
// the following line activates timer editing in popup window.
// but it does not yet work like expected. So we leave it deactivated currently.
......
elems = $$(sel);
this.addHintTips(elems);
$$('#' + id + ' ' + this.options.actionLinkSelector).each(this.vdrRequest.bind(this));
$$('#' + id + ' ' + this.options.vlcLinkSelector).each(this.vlcRequest.bind(this));
},
// Epg Popup function. Apply to all elements that should
......
}.bindWithEvent(this, el));
},
// function that opens a window for streaming of tv data.
vlcRequest: function(el){
el.addEvent('click', function(event, element){
var href = $pick(element.href, "");
if (href != "") {
href += "&async=1";
var bw = new BrowserWin("vlcstream", href, this.options.vlcWinOptions);
event.stop();
return false;
}
return true;
}.bindWithEvent(this, el));
},
// change normal 'title'-Attributes into enhanced hinttips
// usesd by domExtend and domReadySetup functions.
addHintTips: function(elems){
live/js/live/vlc.js
/*
* This is part of the live vdr plugin. See COPYING for license information.
*
* VLC class.
*
* This class adds convenience methods to a embeded vlc media player
* object and allows control of the player and provides an event interface.
*/
/*
Class: VLC
A VLC plugin wrapper.
Arguments:
id - The id of the embedded vlc plugin.
options - optional arguments, helping to tweak this class to your html.
Options:
autoresize - if true, the player will be resized with the browser window.
controlsContainer - the id of the DOM element that contains the controls.
controls - an array describing which controls are provided by the html
page. Current supported types: play, mute, screen,
close. for each type your page wants to provide an
inline object is expected with with the following
properties:
type - one of the types above to map to the class internal
functions for that type.
id - the DOM id of the control.
classes - on: class to add when toggled on.
- off: class to add when toggled off.
Events:
ontoggle - event fired after the toggling of one property took place.
*/
var VLC = new Class({
options: {
autoresize: true,
controlsContainer: "vlcControls",
// select by type the actions should be performed by a
// instanciated object of class VLC. Possible types you find
// below in the 'actions' definition.
controls: [
{ type: 'play',
id: "TogglePlay",
classes: { on: "red", off: "green" }},
{ type: 'mute',
id: "ToggleMute",
classes: { on: "green", off: "red" }},
{ type: 'screen',
id: "FullScreen",
classes: { on: "blue", off: "blue" }},
{ type: 'close',
id: "Close",
classes: { on: "yellow", off: "yellow" }},
],
offset: 5,
playRecording: false
},
initialize: function(id, options){
this.setOptions(options);
this.id = id;
window.addEvent('domready', this.playerSetup.bind(this));
},
playerSetup: function(){
this.vlc = $(this.id);
this.newVlcApi = (this.vlc.VersionInfo != null);
// add here new actions these class might support:
var actions = {
play: { check: this.isPlaying, toggle: this.togglePlay },
mute: { check: this.isMuted, toggle: this.toggleMute },
screen: { check: Class.empty, toggle: this.toggleScreen },
close: { check: Class.empty, toggle: this.close }};
$each(this.options.controls, function(item, idx){
var elem = $(item.id);
if (elem && actions[item.type]) {
item.fns = actions[item.type];
}
}, this);
this.setStates();
var idx = 0;
$each(this.options.controls, function(item){
if (item.fns && item.fns.toggle)
$(item.id).addEvent('click', function (event, item){
var toggle = item.fns.toggle.bind(this);
var check = item.fns.check.bind(this);
toggle();
this.fireEvent('toggle', [item.id, check()]);
}.bindWithEvent(this, item));
}, this);
if (this.options.autoresize) {
window.addEvent('resize', this.playerResize.bind(this));
}
},
enableDeinterlace: function(){
if (this.newVlcApi) {
this.vlc.video.deinterlace.enable("yadif");
}
},
disableDeinterlace: function(){
if (this.newVlcApi) {
this.vlc.video.deinterlace.disable();
}
},
playerResize: function(el){
var winwidth = window.getWidth();
var winheight = window.getHeight();
winheight -= $(this.options.controlsContainer).getSize().size.y;
winheight -= this.options.offset;
this.vlc.setStyle('width', winwidth);
this.vlc.setStyle('height', winheight);
},
isPlaying: function(){
if (this.newVlcApi)
return this.vlc.playlist && this.vlc.playlist.isPlaying;
else
return this.vlc.isplaying();
},
isMuted: function(){
if (this.newVlcApi)
return this.vlc.audio && this.vlc.audio.mute;
else {
var res = this.vlc.get_volume();
return 0 == res;
}
},
togglePlay: function(){
if (this.newVlcApi)
if (!this.options.playRecording)
this.vlc.playlist.togglePause();
else {
if (this.vlc.playlist.isPlaying) {
clearTimeout(this.deint);
this.disableDeinterlace();
this.vlc.playlist.stop();
else {
this.vlc.playlist.play();
this.deint = setTimeout(this.enableDeinterlace, 500);
}
}
else {
if (this.isPlaying())
this.vlc.stop();
else
this.vlc.play();
}
this.setStates();
},
toggleMute: function(){
if (this.newVlcApi)
this.vlc.audio.toggleMute();
else
this.vlc.mute();
this.setStates();
},
toggleScreen: function(){
if (this.newVlcApi)
this.vlc.video.toggleFullscreen();
else
this.vlc.fullscreen();
this.setStates();
},
close: function(){
window.close();
},
setStates: function(){
$each(this.options.controls, function(item, idx){
if (item.fns && (Class.empty != item.fns.check)) {
var fn = item.fns.check.bind(this);
if (fn()) {
$(item.id).removeClass(item.classes.off);
$(item.id).addClass(item.classes.on);
}
else {
$(item.id).removeClass(item.classes.on);
$(item.id).addClass(item.classes.off);
}
}
}, this);
}
});
VLC.implement(new Events, new Options);
pages/Makefile
OBJS := menu.o recordings.o schedule.o multischedule.o screenshot.o \
timers.o whats_on.o switch_channel.o keypress.o remote.o \
channels_widget.o edit_timer.o error.o pageelems.o tooltip.o \
vlc.o searchtimers.o edit_searchtimer.o searchresults.o \
searchtimers.o edit_searchtimer.o searchresults.o \
searchepg.o login.o ibox.o xmlresponse.o play_recording.o \
pause_recording.o stop_recording.o ffw_recording.o \
rwd_recording.o setup.o content.o epginfo.o timerconflicts.o \
pages/multischedule.ecpp
</%cpp>
<td> <div class="boxheader"> <div> <div><$ channel_names[channel] $> <# reply.sout() automatically escapes special characters to html entities #>
<& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(channel_IDs[channel]) image="zap.png" alt="" &>
<& pageelems.vlc_stream_channel channelId=(channel_IDs[channel]) &>
<& pageelems.m3u_playlist_channel channelId=(channel_IDs[channel]) &>
</div></div> </div></td>
<td class="time spacer"> &nbsp; </td>
......
% }
</select>
% // <& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(Channel->GetChannelID()) image="zap.png" alt="" &>
% // <& pageelems.vlc_stream_channel channelId=(Channel->GetChannelID()) &>
</span>
</form>
</%def>
pages/pageelems.ecpp
<%cpp> if (LiveSetup().GetShowIMDb()) { </%cpp><a href="http://www.imdb.com/find?s=all&q=<$ StringUrlEncode(title) $>" target="_blank"><img src="<$ LiveSetup().GetThemedLink("img", "imdb.png") $>" alt="" <& tooltip.hint text=(tr("Find more at the Internet Movie Database.")) &>></img></a> <%cpp> } </%cpp>
</%def>
<# ---------------------------------------------------------------------- #>
<%def vlc_stream_channel>
<%args>
tChannelID channelId;
</%args>
<%cpp> if (LiveSetup().GetUseStreamdev() && LiveFeatures<features::streamdev_server>().Loaded()) { </%cpp><a href="vlc.html?channel=<$ channelId $>"><img src="<$ LiveSetup().GetThemedLink("img", "stream_button.png") $>" alt="" <& tooltip.hint text=(tr("Stream this channel into browser.")) &>></img></a><%cpp> } </%cpp>
</%def>
<# ---------------------------------------------------------------------- #>
<%def vlc_stream_recording>
<%args>
string recid;
string linkText;
</%args>
<%cpp>
#if TNT_WATCHDOG_SILENCE
{
</%cpp><a href="vlc.html?recid=<$ recid $>"><img src="<$ LiveSetup().GetThemedLink("img", "stream_button.png") $>" alt="" <& tooltip.hint text=(tr("Stream this recording into browser.")) &>></img> <$ linkText $></a>
<%cpp>
}
#endif
</%cpp>
</%def>
<# ---------------------------------------------------------------------- #>
<%def m3u_playlist_channel>
<%args>
tChannelID channelId;
</%args>
<%cpp> if (LiveSetup().GetUseStreamdev() && LiveFeatures<features::streamdev_server>().Loaded()) { </%cpp><a href="playlist.m3u?channel=<$ channelId $>"><img src="<$ LiveSetup().GetThemedLink("img", "playlist.png") $>" alt="" <& tooltip.hint text=(tr("Stream this channel into media player.")) &>></img></a><%cpp> } </%cpp>
<%cpp> if (LiveSetup().GetUseStreamdev() && LiveFeatures<features::streamdev_server>().Loaded()) { </%cpp><a href="playlist.m3u?channel=<$ channelId $>"><img src="<$ LiveSetup().GetThemedLink("img", "stream_button.png") $>" alt="" <& tooltip.hint text=(tr("Stream this channel into media player.")) &>></img></a><%cpp> } </%cpp>
</%def>
<# ---------------------------------------------------------------------- #>
......
<%cpp>
#if TNT_WATCHDOG_SILENCE
{
</%cpp><a href="playlist.m3u?recid=<$ recid $>"><img src="<$ LiveSetup().GetThemedLink("img", "playlist.png") $>" alt="" <& tooltip.hint text=(tr("Stream this recording into media player.")) &>></img> <$ linkText $></a>
</%cpp><a href="playlist.m3u?recid=<$ recid $>"><img src="<$ LiveSetup().GetThemedLink("img", "stream_button.png") $>" alt="" <& tooltip.hint text=(tr("Stream this recording into media player.")) &>></img> <$ linkText $></a>
<%cpp>
}
#endif
......
}
if ((duration == 0) || (elapsed >= 0)) {
</%cpp>
<& pageelems.vlc_stream_channel channelId=(channelId) &>
<& pageelems.m3u_playlist_channel channelId=(channelId) &>
<%cpp>
}
......
<td class="action leftcol <? lastCurrentChanel ? "bottomrow"?>"><& pageelems.event_timer epgid=(epgid) &></td>
<td class="action <? lastCurrentChanel ? "bottomrow"?>"><& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(channelId) image="zap.png" alt="" &></td>
<td class="action <? lastCurrentChanel ? "bottomrow"?>"><%cpp>if (LiveFeatures<features::epgsearch>().Recent() && eventId != 0) { </%cpp><a href="searchresults.html?searchplain=<$ StringUrlEncode(title) $>"><img src="<$ LiveSetup().GetThemedLink("img", "search.png") $>" alt="" <& tooltip.hint text=(tr("Search for repeats.")) &>></img></a><%cpp> } else { </%cpp><img src="img/transparent.png" width="16" height="16"><%cpp> } </%cpp></td>
<td class="action <? lastCurrentChanel ? "bottomrow"?>"><%cpp>if ((duration == 0) || (elapsed > 0)) { </%cpp><& pageelems.vlc_stream_channel channelId=(channelId) &><& pageelems.m3u_playlist_channel channelId=(channelId) &><%cpp> } else { </%cpp><img src="img/transparent.png" width="16" height="16"><%cpp> } </%cpp></td>
<td class="action <? lastCurrentChanel ? "bottomrow"?>"><%cpp>if ((duration == 0) || (elapsed > 0)) { </%cpp><& pageelems.m3u_playlist_channel channelId=(channelId) &><%cpp> } else { </%cpp><img src="img/transparent.png" width="16" height="16"><%cpp> } </%cpp></td>
<td class="action <? lastCurrentChanel ? "bottomrow"?>">
<%cpp>
if (eventId != 0) {
pages/recordings.ecpp
string title;
</%args>
<& pageelems.ajax_action_href action="play_recording" param=(id) tip=(tr("play this recording.")) image="play.png" alt="" &>
<& pageelems.vlc_stream_recording recid=(id) &>
<& pageelems.m3u_playlist_recording recid=(id) &>
<& pageelems.imdb_info_href title=(title) &>
<& recordings.edit_rec id=(id) &>
pages/remote.ecpp
<%def remote_actions>
<b><$ tr("Selection") $></b>:&nbsp;
<{ if ( LiveGrabImageManager().CanGrab()) { }>
<input type="radio" name="screenCon" id="screenCon_grab" onchange="changeScreenContent()"/>&nbsp;<label for="screenCon_grab"><$ tr("Snapshot interval") $>:</label> <select name="interval" onchange="ChangeInterval()"></select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<& pageelems.vlc_stream_channel channelId=(Channel->GetChannelID()) &> -
<input type="radio" name="screenCon" id="screenCon_grab" onchange="changeScreenContent()"/>&nbsp;<label for="screenCon_grab"><$ tr("Snapshot interval") $>:</label> <select name="interval" onchange="ChangeInterval()"></select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -
<{ } }>
<input type="radio" name="screenCon" id="screenCon_osd" onchange="changeScreenContent()" />&nbsp;<label for="screenCon_osd">OSD</label> -
<input type="radio" name="screenCon" id="screenCon_none" onchange="changeScreenContent()" />&nbsp;<label for="screenCon_osd"><$ tr("Stop") $></label>
pages/schedule.ecpp
<label for="channel"><$ tr("Channel") $>:&nbsp;<span class="bold"><$ Channel->Number() $></span></label>
<& channels_widget name=("channel") selected=(Channel ? *Channel->GetChannelID().ToString() : "") onchange=("document.forms.channels.submit()") &>
<& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(Channel->GetChannelID()) image="zap.png" alt="" &>
<& pageelems.vlc_stream_channel channelId=(Channel->GetChannelID()) &>
<& pageelems.m3u_playlist_channel channelId=(Channel->GetChannelID()) &>
</span>
</form>
pages/vlc.ecpp
<%pre>
#include <setup.h>
#include <tools.h>
#include <users.h>
using namespace std;
using namespace vdrlive;
</%pre>
<%args>
tChannelID channel;
string async;
string recid;
</%args>
<%session scope="global">
bool logged_in(false);
</%session>
<%request scope="page">
cChannel* Channel;
</%request>
<%include>page_init.eh</%include>
<%cpp>
if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html");
if (!cUser::CurrentUserHasRightTo(UR_STARTREPLAY))
throw HtmlError( tr("Sorry, no permission. Please contact your administrator!") );
bool asyncReq = !async.empty() && (lexical_cast<int>(async) != 0);
// the availabilty of Channel signals that we will do live tv streaming.
Channel = 0;
if (recid.empty()) {
pageTitle = tr("VLC: live video stream");
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
Channel = (cChannel *)Channels->GetByChannelID(channel);
#else
ReadLock channelsLock(Channels);
if (!channelsLock) {
throw HtmlError(tr("Couldn't aquire access to channels, please try again later."));
}
Channel = Channels.GetByChannelID(channel);
#endif
if (Channel == 0) {
throw HtmlError( tr("Couldn't find channel or no channels available. Maybe you mistyped your request?") );
}
}
else {
pageTitle = tr("VLC: play recording");
}
</%cpp>
<& pageelems.doc_type &>
<html>
<head>
<title>VDR-Live - <$ pageTitle $></title>
<& pageelems.stylesheets &>
<%cpp>
if (!asyncReq) {
</%cpp>
<& pageelems.ajax_js &>
<%cpp>
}
else {
</%cpp>
<script type="text/javascript" src="js/mootools/mootools.v1.11.js"></script>
<%cpp>
}
</%cpp>
<script type="text/javascript" src="js/live/vlc.js"></script>
<script type="text/javascript"><!--
var vlcControl = new VLC("video1", {
<? !asyncReq ? "autoresize: false," ?>
<? !Channel ? "playRecording: true," ?>
offset: 5
});
vlcControl.addEvent('toggle', function(id, state){
var text = null;
switch (id) {
case "TogglePlay":
text = state ? "<$ tr("Stop") $>" : "<$ tr("Play") $>";
break;
case "ToggleMute":
text = state ? "<$ tr("Sound on") $>" : "<$ tr("Sound off") $>";
break;
}
if (text)
$(id).setHTML(text);
});
--></script>
</head>
<body>
<%cpp>
if (!asyncReq) {
</%cpp>
<& pageelems.logo &>
<& menu active="vlc" &>
<div class="inhalt">
<%cpp>
}
</%cpp>
<%cpp>
string server = request.getHost();
server = server.substr(0, server.rfind(':'));
string videourl;
if (Channel != 0) {
int streamdevPort = LiveSetup().GetStreamdevPort();
videourl = string("http://") + server + ":" + lexical_cast<string,int>(streamdevPort) + "/" + LiveSetup().GetStreamdevType() + "/" + *Channel->GetChannelID().ToString();
}
else {
videourl = string("http://") + server + ":" + lexical_cast<string,int>(LiveSetup().GetServerPort()) + "/recstream.html?recid=" + recid;
}
</%cpp>
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org/" version="VideoLAN.VLCPlugin.2" id="video1" name="video1" autoplay="yes" loop="no" width="720" height="576" target="<$ videourl $>" />
<& vlc.controls videourl=(videourl) asyncReq=(asyncReq) &>
<%cpp>
if (!asyncReq) {
</%cpp>
</div>
<%cpp>
}
</%cpp>
</body>
</html>
<%include>page_exit.eh</%include>
<%def controls>
<%args>
string videourl;
bool asyncReq;
</%args>
<div id="vlcControls">
<button id="TogglePlay" type="button" class="green"><$ tr("Stop") $></button>
<button id="ToggleMute" type="button" class="red"><$ tr("Sound off") $></button>
<button id="FullScreen" type="button" class="blue"><$ tr("Fullscreen") $></button>
<%cpp>
if (asyncReq) {
</%cpp>
<button id="Close" type="button" class="yellow"><$ tr("Close") $></button>
<%cpp>
}
</%cpp>
<!-- --><p><$ tr("VLC media URL") $>: <span class="bold"><a href="<$ videourl $>"><$ videourl $></a></span></p><!-- -->
</div>
</%def>
po/cs_CZ.po
msgid "New user"
msgstr "Nový uživatel"
msgid "Search results"
msgstr "Výsledky vyhledávání"
msgid "No search results"
msgstr "žádné výsledky vyhledávání"
msgid "%A, %b %d %Y"
msgstr "%a, %d.%m. "
msgid "Click to view details."
msgstr "Detaily"
msgid "Find more at the Internet Movie Database."
msgstr "Vyhledej více na Internet Movie Database."
msgid "Couldn't find timer. Maybe you mistyped your request?"
msgstr "Nelze najít nahrávaní. Je správně zadáno?"
msgid "Stream this channel into media player."
msgstr ""
msgid "Please set a title for the timer!"
msgstr "Prosím nastavte název nahrávání!"
msgid "Stream this recording into media player."
msgstr ""
#. TRANSLATORS: only adjust the ordering and separators, don't translate the m's, d's and y's
msgid "mm/dd/yyyy"
msgstr "dd.mm.yyyy"
msgid "Record this"
msgstr "Nahrát"
msgid "Edit timer"
msgstr "Změna nahrávání"
msgid "New timer"
msgstr "Nové nahrávání"
msgid "loading data"
msgstr "aktualizace údajů"
msgid "Title"
msgstr "Název"
msgid "an error occured!"
msgstr "problém!"
msgid "Directory"
msgstr "Složka"
msgid "Request succeeded!"
msgstr "Požadevek úspěšný."
msgid "Weekday"
msgstr "Den v týdnu"
msgid "Request failed!"
msgstr "Požadavek selhal!"
msgid "Sunday"
msgstr "Neděle"
msgid "Monday"
msgstr "Pondělí"
......
msgid "Saturday"
msgstr "Sobota"
msgid "Sunday"
msgstr "Neděle"
#. TRANSLATORS: only adjust the ordering and separators, don't translate the m's, d's and y's
msgid "mm/dd/yyyy"
msgstr "dd.mm.yyyy"
msgid "January"
msgstr "leden"
msgid "February"
msgstr "únor"
msgid "March"
msgstr "březen"
msgid "April"
msgstr "duben"
msgid "May"
msgstr "květen"
msgid "June"
msgstr "červen"
msgid "July"
msgstr "červenec"
msgid "August"
msgstr "srpen"
msgid "September"
msgstr "září"
msgid "October"
msgstr "říjen"
msgid "November"
msgstr "listopad"
msgid "December"
msgstr "prosinec"
msgid "retrieving status ..."
msgstr "zjišťování stavu..."
msgid "Toggle updates on/off."
msgstr "aktualizovat změny ano/ne."
msgid "stop playback"
msgstr "ukončit přehrávání"
msgid "resume playback"
msgstr "pokračovat v přehrávání"
msgid "pause playback"
msgstr "přerušit přehrávání"
msgid "fast rewind"
msgstr "rychle zpět"
msgid "fast forward"
msgstr "rychle vpřed"
msgid "previous channel"
msgstr "předchozí kanál"
msgid "next channel"
msgstr "další kanál"
msgid "No server response!"
msgstr "Server neodpovídá!"
msgid "Failed to update infobox!"
msgstr "Aktualizace infookna selhala!"
msgid "Switch to this channel."
msgstr "Přepnout"
msgid "Search for repeats."
msgstr "Vyhledat reprízy"
msgid "Authors"
msgstr "Autoři"
msgid "Project Idea"
msgstr "nápad"
msgid "Webserver"
msgstr "web server"
msgid "Current Maintainer"
msgstr ""
msgid "Project leader"
msgstr "vedoucí týmu"
msgid "Content"
msgstr "obsah"
msgid "Graphics"
msgstr "grafika"
msgid "Information"
msgstr "Informace"
msgid "LIVE version"
msgstr "LIVE verze"
msgid "VDR version"
msgstr "VDR verze"
msgid "Features"
msgstr "Moduly"
msgid "active"
msgstr "aktivní"
msgid "required"
msgstr "vyżadováno"
msgid "Homepage"
msgstr "Domovská stránka"
msgid "Bugs and suggestions"
msgstr "Chyby a připomínky"
msgid "If you encounter any bugs or would like to suggest new features, please use our bugtracker"
msgstr "Pokud odhalíte nějaké chyby, příp. si přejete nové vlastnosti, použijte prosím bugtracker"
msgid "Search results"
msgstr "Výsledky vyhledávání"
msgid "No search results"
msgstr "žádné výsledky vyhledávání"
msgid "%A, %b %d %Y"
msgstr "%a, %d.%m. "
msgid "Click to view details."
msgstr "Detaily"
msgid "Couldn't find timer. Maybe you mistyped your request?"
msgstr "Nelze najít nahrávaní. Je správně zadáno?"
msgid "Please set a title for the timer!"
msgstr "Prosím nastavte název nahrávání!"
msgid "New timer"
msgstr "Nové nahrávání"
msgid "Title"
msgstr "Název"
msgid "Directory"
msgstr "Složka"
msgid "Weekday"
msgstr "Den v týdnu"
msgid "Use VPS"
msgstr "Použít VPS"
......
msgid "Time"
msgstr ""
msgid "Switch to this channel."
msgstr "Přepnout"
msgid "Search for repeats."
msgstr "Vyhledat reprízy"
msgid "more"
msgstr "více"
msgid "Channel"
msgstr "Kanál"
msgid "playing recording"
msgstr "sledování nahrávky"
msgid "no epg info for current event!"
msgstr "chybí detaily pro tento pořad"
msgid "no epg info for current channel!"
msgstr "chybí program pro tento kanál"
msgid "no current channel!"
msgstr "není zvolen žádný kanál"
msgid "error retrieving status info!"
msgstr "chyba při zjišťování statusu!"
msgid "%I:%M:%S %p"
msgstr "%H:%M:%S"
msgid "Recordings"
msgstr "Nahrávky"
......
msgid "Test"
msgstr ""
msgid "Find more at the Internet Movie Database."
msgstr "Vyhledej více na Internet Movie Database."
msgid "Stream this channel into browser."
msgstr "Přehrávej v prohlížeči"
msgid "Stream this recording into browser."
msgstr "Přehrávej tuto nahrávku v prohlížeči."
msgid "Stream this channel into media player."
msgstr ""
msgid "Stream this recording into media player."
msgstr ""
msgid "Record this"
msgstr "Nahrát"
msgid "loading data"
msgstr "aktualizace údajů"
msgid "an error occured!"
msgstr "problém!"
msgid "Request succeeded!"
msgstr "Požadevek úspěšný."
msgid "Request failed!"
msgstr "Požadavek selhal!"
msgid "January"
msgstr "leden"
msgid "February"
msgstr "únor"
msgid "March"
msgstr "březen"
msgid "April"
msgstr "duben"
msgid "May"
msgstr "květen"
msgid "June"
msgstr "červen"
msgid "July"
msgstr "červenec"
msgid "August"
msgstr "srpen"
msgid "September"
msgstr "září"
msgid "October"
msgstr "říjen"
msgid "November"
msgstr "listopad"
msgid "December"
msgstr "prosinec"
msgid "retrieving status ..."
msgstr "zjišťování stavu..."
msgid "Toggle updates on/off."
msgstr "aktualizovat změny ano/ne."
msgid "stop playback"
msgstr "ukončit přehrávání"
msgid "resume playback"
msgstr "pokračovat v přehrávání"
msgid "pause playback"
msgstr "přerušit přehrávání"
msgid "fast rewind"
msgstr "rychle zpět"
msgid "fast forward"
msgstr "rychle vpřed"
msgid "previous channel"
msgstr "předchozí kanál"
msgid "next channel"
msgstr "další kanál"
msgid "No server response!"
msgstr "Server neodpovídá!"
msgid "Failed to update infobox!"
msgstr "Aktualizace infookna selhala!"
msgid "Authors"
msgstr "Autoři"
msgid "Project Idea"
msgstr "nápad"
msgid "Webserver"
msgstr "web server"
msgid "Current Maintainer"
msgstr ""
msgid "Project leader"
msgstr "vedoucí týmu"
msgid "Content"
msgstr "obsah"
msgid "Graphics"
msgstr "grafika"
msgid "Information"
msgstr "Informace"
msgid "LIVE version"
msgstr "LIVE verze"
msgid "VDR version"
msgstr "VDR verze"
msgid "Features"
msgstr "Moduly"
msgid "active"
msgstr "aktivní"
msgid "required"
msgstr "vyżadováno"
msgid "Homepage"
msgstr "Domovská stránka"
msgid "Bugs and suggestions"
msgstr "Chyby a připomínky"
msgid "If you encounter any bugs or would like to suggest new features, please use our bugtracker"
msgstr "Pokud odhalíte nějaké chyby, příp. si přejete nové vlastnosti, použijte prosím bugtracker"
msgid "No timer defined"
msgstr "Nahrávání není nastaveno"
......
msgid "no"
msgstr "ne"
msgid "VLC: live video stream"
msgstr "VLC: stream běžícího vysílání"
msgid "Couldn't find channel or no channels available. Maybe you mistyped your request?"
msgstr "Kanál je nedostupný, nebo neexistuje. Zkontrolujte zadání."
msgid "VLC: play recording"
msgstr "VLC: streamování nahrávky"
msgid "Stop"
msgstr ""
msgid "Play"
msgstr "Přehrávat"
msgid "Sound on"
msgstr "Se zvukem"
msgid "Sound off"
msgstr "Bez zvuku"
msgid "Fullscreen"
msgstr "Celá obrazovka"
msgid "Close"
msgstr "Zavřít"
msgid "VLC media URL"
msgstr "VLC adresa"
msgid "playing recording"
msgstr "sledování nahrávky"
msgid "no epg info for current event!"
msgstr "chybí detaily pro tento pořad"
msgid "no epg info for current channel!"
msgstr "chybí program pro tento kanál"
msgid "no current channel!"
msgstr "není zvolen žádný kanál"
msgid "error retrieving status info!"
msgstr "chyba při zjišťování statusu!"
msgid "%I:%M:%S %p"
msgstr "%H:%M:%S"
msgid "Searchtimers"
msgstr "Automatické nahrávání"
......
msgid "List view"
msgstr "Souhrný pohled"
msgid "Couldn't find channel or no channels available. Maybe you mistyped your request?"
msgstr "Kanál je nedostupný, nebo neexistuje. Zkontrolujte zadání."
msgid "No schedules available for this channel"
msgstr "Pro kanál není dostupný program"
......
msgid "Snapshot interval"
msgstr "Interval snímků obrazovky"
msgid "Stop"
msgstr ""
msgid "Page error"
msgstr "Chyba stránky"
......
msgid "No EPG information available"
msgstr "Nejsou dostupné informace o programu"
#~ msgid "VLC media URL"
#~ msgstr "VLC adresa"
po/de_DE.po
msgid "New user"
msgstr "Neuen Benutzer anlegen"
msgid "Search results"
msgstr "Suchergebnisse"
msgid "No search results"
msgstr "keine Suchergebnisse"
msgid "%A, %b %d %Y"
msgstr "%A, %d.%m.%Y"
msgid "Click to view details."
msgstr "Für Details klicken."
msgid "Find more at the Internet Movie Database."
msgstr "Weitere Informationen in der Internet Movie Database."
msgid "Couldn't find timer. Maybe you mistyped your request?"
msgstr "Konnte Timer nicht finden. Evtl. fehlerhafte Anforderung?"
msgid "Stream this channel into media player."
msgstr ""
msgid "Please set a title for the timer!"
msgstr "Bitte einen Titel fï¿œr den Timer angeben!"
msgid "Stream this recording into media player."
msgstr ""
#. TRANSLATORS: only adjust the ordering and separators, don't translate the m's, d's and y's
msgid "mm/dd/yyyy"
msgstr "dd.mm.yyyy"
msgid "Record this"
msgstr "Diese Sendung aufnehmen"
msgid "Edit timer"
msgstr "Timer bearbeiten"
msgid "New timer"
msgstr "Neuen Timer anlegen"
msgid "loading data"
msgstr "Daten nachladen"
msgid "Title"
msgstr "Titel"
msgid "an error occured!"
msgstr "Es ist ein Fehler aufgetreten!"
msgid "Directory"
msgstr "Verzeichnis"
msgid "Request succeeded!"
msgstr "Aktion durchgeführt!"
msgid "Weekday"
msgstr "Wochentag"
msgid "Request failed!"
msgstr "Aktion fehlgeschlagen!"
msgid "Sunday"
msgstr "Sonntag"
msgid "Monday"
msgstr "Montag"
......
msgid "Saturday"
msgstr "Samstag"
msgid "Sunday"
msgstr "Sonntag"
#. TRANSLATORS: only adjust the ordering and separators, don't translate the m's, d's and y's
msgid "mm/dd/yyyy"
msgstr "dd.mm.yyyy"
msgid "January"
msgstr "Januar"
msgid "February"
msgstr "Februar"
msgid "March"
msgstr "März"
msgid "April"
msgstr "April"
msgid "May"
msgstr "Mai"
msgid "June"
msgstr "Juni"
msgid "July"
msgstr "Juli"
msgid "August"
msgstr "August"
msgid "September"
msgstr "September"
msgid "October"
msgstr "Oktober"
msgid "November"
msgstr "November"
msgid "December"
msgstr "Dezember"
msgid "retrieving status ..."
msgstr "Hole Status ..."
msgid "Toggle updates on/off."
msgstr "Statusabfrage ein- oder ausschalten."
msgid "stop playback"
msgstr "Anhalten"
msgid "resume playback"
msgstr "Fortsetzen"
msgid "pause playback"
msgstr "Pause"
msgid "fast rewind"
msgstr "Suchlauf rückwärts"
msgid "fast forward"
msgstr "Suchlauf vorwärts"
msgid "previous channel"
msgstr "Sender zurück"
msgid "next channel"
msgstr "Sender vor"
msgid "No server response!"
msgstr "Der Server antwortet nicht!"
msgid "Failed to update infobox!"
msgstr "Kann Infobox nicht aktualisieren!"
msgid "Switch to this channel."
msgstr "Zu diesem Kanal umschalten."
msgid "Search for repeats."
msgstr "Nach Wiederholungen suchen."
msgid "Authors"
msgstr "Autoren"
msgid "Project Idea"
msgstr "Projekt Idee"
msgid "Webserver"
msgstr "Webserver"
msgid "Current Maintainer"
msgstr "Derzeitiger Entwickler"
msgid "Project leader"
msgstr "Projektleiter"
msgid "Content"
msgstr "Inhalte"
msgid "Graphics"
msgstr "Grafiken"
msgid "Information"
msgstr "Informationen"
msgid "LIVE version"
msgstr "LIVE Version"
msgid "VDR version"
msgstr "VDR Version"
msgid "Features"
msgstr "Unterstütze Plugins"
msgid "active"
msgstr "aktiv"
msgid "required"
msgstr "erforderlich"
msgid "Homepage"
msgstr "Homepage"
msgid "Bugs and suggestions"
msgstr "Fehlerberichte und Vorschläge"
msgid "If you encounter any bugs or would like to suggest new features, please use our bugtracker"
msgstr "Für Fehler oder Verbesserungsvorschläge steht unser Bugtracker bereit"
msgid "Search results"
msgstr "Suchergebnisse"
msgid "No search results"
msgstr "keine Suchergebnisse"
msgid "%A, %b %d %Y"
msgstr "%A, %d.%m.%Y"
msgid "Click to view details."
msgstr "Für Details klicken."
msgid "Couldn't find timer. Maybe you mistyped your request?"
msgstr "Konnte Timer nicht finden. Evtl. fehlerhafte Anforderung?"
msgid "Please set a title for the timer!"
msgstr "Bitte einen Titel fï¿œr den Timer angeben!"
msgid "New timer"
msgstr "Neuen Timer anlegen"
msgid "Title"
msgstr "Titel"
msgid "Directory"
msgstr "Verzeichnis"
msgid "Weekday"
msgstr "Wochentag"
msgid "Use VPS"
msgstr "VPS verwenden"
......
msgid "Time"
msgstr "Zeit"
msgid "Switch to this channel."
msgstr "Zu diesem Kanal umschalten."
msgid "Search for repeats."
msgstr "Nach Wiederholungen suchen."
msgid "more"
msgstr "mehr"
msgid "Channel"
msgstr "Kanal"
msgid "playing recording"
msgstr "Wiedergabe"
msgid "no epg info for current event!"
msgstr "Keine Infos zur Sendung!"
msgid "no epg info for current channel!"
msgstr "Dieser Kanal hat kein EPG!"
msgid "no current channel!"
msgstr "Keinen Kanal gefunden!"
msgid "error retrieving status info!"
msgstr "Fehler: Status nicht verfügbar!"
msgid "%I:%M:%S %p"
msgstr "%H:%M:%S"
msgid "Recordings"
msgstr "Aufnahmen"
......
msgid "Test"
msgstr "Testen"
msgid "Find more at the Internet Movie Database."
msgstr "Weitere Informationen in der Internet Movie Database."
msgid "Stream this channel into browser."
msgstr "Sendung im Browser anzeigen."
msgid "Stream this recording into browser."
msgstr "Aufnahme im Browser anzeigen."
msgid "Stream this channel into media player."
msgstr ""
msgid "Stream this recording into media player."
msgstr ""
msgid "Record this"
msgstr "Diese Sendung aufnehmen"
msgid "loading data"
msgstr "Daten nachladen"
msgid "an error occured!"
msgstr "Es ist ein Fehler aufgetreten!"
msgid "Request succeeded!"
msgstr "Aktion durchgeführt!"
msgid "Request failed!"
msgstr "Aktion fehlgeschlagen!"
msgid "January"
msgstr "Januar"
msgid "February"
msgstr "Februar"
msgid "March"
msgstr "März"
msgid "April"
msgstr "April"
msgid "May"
msgstr "Mai"
msgid "June"
msgstr "Juni"
msgid "July"
msgstr "Juli"
msgid "August"
msgstr "August"
msgid "September"
msgstr "September"
msgid "October"
msgstr "Oktober"
msgid "November"
msgstr "November"
msgid "December"
msgstr "Dezember"
msgid "retrieving status ..."
msgstr "Hole Status ..."
msgid "Toggle updates on/off."
msgstr "Statusabfrage ein- oder ausschalten."
msgid "stop playback"
msgstr "Anhalten"
msgid "resume playback"
msgstr "Fortsetzen"
msgid "pause playback"
msgstr "Pause"
... This diff was truncated because it exceeds the maximum size that can be displayed.
(3-3/3)