summaryrefslogtreecommitdiffstats
path: root/l10n/de.php
blob: 4a0b7485502d348f7766368762da352c24b718b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
$TRANSLATIONS = array(
"Feed contains invalid XML" => "Feed beinhaltet ungültiges XML",
"Could not find a feed" => "Feed kann nicht gefunden werden",
"Detected feed format is not supported" => "Format des Feeds ermitteln wird nicht unterstützt",
"SSL Certificate is invalid" => "SSL-Zertifikat ist ungültig",
"Website not found" => "Webseite nicht gefunden",
"More redirects than allowed, aborting" => "Mehr Weiterleitungen als erlaubt, Abbruch",
"Bigger than maximum allowed size" => "Größer als die maximal erlaubte Größe",
"Request timed out" => "Zeitüberschreitung bei der Anfrage",
"Can not add feed: Exists already" => "Feed konnte nicht hinzugefügt werden:  Existiert bereits",
"Articles without feed" => "Artikel ohne Feed",
"Can not add folder: Exists already" => "Ordner kann nicht hinzgefügt werden: Existiert bereits",
"Use ownCloud cron for updates" => "ownCloud-Cron für Updates nutzen",
"Disable this if you run a custom updater such as the Python updater included in the app" => "Deaktiviere dies, wenn Du einen eigenen Updater wie z.B. den in der App mitgelieferten Python-Updater nutzt",
"Purge interval" => "Aufräum-Intervall",
"Minimum amount of seconds after deleted feeds and folders are removed from the database; values below 60 seconds are ignored" => "Minimum an Sekunden nachdem gelöschte Feeds und Ordner aus der Datenbank entfernt werden; Werte unter 60 Sekunden werden ignoriert",
"Maximum read count per feed" => "Maximale Anzahl an gelesenen Artikeln pro Feed",
"Defines the maximum amount of articles that can be read per feed which won't be deleted by the cleanup job; if old articles reappear after being read, increase this value; negative values such as -1 will turn this feature off completely" => "Definiert die maximale Anzahl an Artikeln, die pro Feed gelesen und bei einem Aufräumauftrag nicht aus der Datenbank gelöscht werden; wenn ältere Artikel nach dem Lesen erhalten bleiben sollen, erhöhen diesen Wert; negative Werte sowie -1 deaktivieren diese Funktion komplett",
"Maximum redirects" => "Maximale Anzahl der HTTP Redirects",
"How many redirects the feed fetcher should follow" => "Maximale Anzahl der HTTP Redirects, denen der Feed-Updater folgen soll",
"Maximum feed page size" => "Maximale Seitengröße des Feeds",
"Maximum feed size in bytes. If the RSS/Atom page is bigger than this value, the update will be aborted" => "Maximale Feedgröße in Bytes. Wenn die RSS/Atom-Seite größer als dieser Wert ist, wird die Aktualisierung abgebrochen",
"Feed fetcher timeout" => "Feed Updater maximum Timeout",
"Maximum number of seconds to wait for an RSS or Atom feed to load; if it takes longer the update will be aborted" => "Maximale Anzahl an Sekunden zum Laden eines RSS- oder Atom-Feeds; wenn dies länger dauert, wird die Aktualisierung abgebrochen.",
"Explore Service URL" => "Service-URL entdecken",
"If given, this service's URL will be queried for displaying the feeds in the explore feed section. To fall back to the built in explore service, leave this input empty" => "Wenn eingetragen, werden diese Service-URLs zur Darstellung der Feeds im Abschnitt Feeds entdecken verwendet. Um auf den eingebauten Entdecken-Service zurück zufallen, dieses Feld leer lassen.",
"Saved" => "Gespeichert",
"Ajax cron mode detected! Your feeds will not be updated correctly. It is recommended to either use the operating system cron or a custom updater." => "Ajax Cron-Modus erkannt! Deine Feeds werden nicht korrekt aktualisiert. Es wird weiterhin empfohlen, den systemeigenen Cron oder den benutzerdefinierten Updater zu verwenden.",
"How to set up the operating system cron" => "Wie den systemeigenen Cron einrichten",
"How to set up a custom updater (faster and no possible deadlock) " => "Wie den benutzerdefinierten Updater einrichten (schneller und keine mögliche Blockierung)",
"Subscribe" => "Abonnieren",
"Refresh" => "Aktualisieren",
"No articles available" => "Keine Artikel verfügbar",
"No unread articles available" => "Keine ungelesenen Artikel verfügbar",
"Open website" => "Internetseite öffnen",pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
// Based on https://github.com/jD91mZM2/termplay
// MIT License

use image::{Pixel, FilterType, DynamicImage, GenericImageView};

use termion::color::{Bg, Fg, Rgb};
#[cfg(feature = "video")]
use termion::input::TermRead;


#[cfg(feature = "video")]
use gstreamer::{self, prelude::*};
#[cfg(feature = "video")]
use gstreamer_app;

use failure::Error;
#[cfg(feature = "video")]
use failure::format_err;


use std::io::Write;
#[cfg(feature = "video")]
use std::sync::{Arc, RwLock};

pub type MResult<T> = Result<T, Error>;

fn main() -> MResult<()> {
    let args = std::env::args().collect::<Vec<String>>();
    let xsize: usize = args.get(1)
        .expect("Provide xsize")
        .parse::<usize>()
        .unwrap();
    let ysize = args
n>) .parse() .unwrap(); #[cfg(feature = "video")] let xpos = args.get(3) .expect("provide xpos") .parse::<usize>() .unwrap(); #[cfg(feature = "video")] let ypos = args.get(4) .expect("provide ypos") .parse::<usize>() .unwrap(); let preview_type = args.get(5) .expect("Provide preview type") .parse::<String>() .unwrap(); #[cfg(feature = "video")] let autoplay = args.get(6) .expect("Autoplay?") .parse::<bool>() .unwrap(); #[cfg(feature = "video")] let mute = args.get(7) .expect("Muted?") .parse::<bool>() .unwrap(); let path = args.get(8).expect("Provide path"); let result = match preview_type.as_ref() { #[cfg(feature = "video")] "video" => video_preview(path, xsize, ysize, 0, 0, autoplay, mute, false), "image" => image_preview(path, xsize, ysize), #[cfg(feature = "video")] "audio" => audio_preview(path, autoplay, mute), #[cfg(feature = "video")] "video-raw" => video_preview(path, xsize, ysize, xpos, ypos, autoplay, mute, true), #[cfg(feature = "video")] _ => { panic!("Available types: video(-raw)/image/audio") } #[cfg(not(feature = "video"))] _ => { panic!("Available type: image") } }; if result.is_err() { println!("{:?}", &result); result } else { Ok(()) } } fn image_preview(path: &str, xsize: usize, ysize: usize) -> MResult<()> { let img = image::open(&path)?; let renderer = Renderer::new(xsize, ysize, 0, 0); renderer.send_image(&img)?; Ok(()) } #[cfg(feature = "video")] fn video_preview(path: &String, xsize: usize, ysize: usize, xpos: usize, ypos: usize, autoplay: bool, mute: bool, raw: bool) -> MResult<()> { let (player, appsink) = make_gstreamer()?; let uri = format!("file://{}", &path); player.set_property("uri", &uri)?; let renderer = Renderer::new(xsize, ysize, xpos, ypos); let renderer = Arc::new(RwLock::new(renderer)); let crenderer = renderer.clone(); let p = player.clone(); appsink.set_callbacks( gstreamer_app::AppSinkCallbacks::new() .new_sample({ move |sink| { let sample = match sink.pull_sample() { Some(sample) => sample, None => return gstreamer::FlowReturn::Eos, }; let position = p.query_position::<gstreamer::ClockTime>() .map(|p| p.seconds().unwrap_or(0)) .unwrap_or(0); let duration = p.query_duration::<gstreamer::ClockTime>() .map(|d| d.seconds().unwrap_or(0)) .unwrap_or(0); if let Ok(mut renderer) = crenderer.write() { match renderer.send_frame(&*sample, position, duration, raw) { Ok(()) => { if autoplay == false { // Just render first frame to get a static image match p.set_state(gstreamer::State::Paused) .into_result() { Ok(_) => gstreamer::FlowReturn::Eos, Err(_) => gstreamer::FlowReturn::Error } } else { gstreamer::FlowReturn::Ok } } Err(err) => { println!("{:?}", err); gstreamer::FlowReturn::Error } } } else { gstreamer::FlowReturn::Error } } }) .eos({ move |_| { std::process::exit(0); } }) .build() ); if mute == true || autoplay == false { player.set_property("volume", &0.0)?; } player.set_state(gstreamer::State::Playing).into_result()?; read_keys(player, Some(renderer))?; Ok(()) } #[cfg(feature = "video")] fn read_keys(player: gstreamer::Element, renderer: Option<Arc<RwLock<Renderer>>>) -> MResult<()> { let seek_time = gstreamer::ClockTime::from_seconds(5); let stdin = std::io::stdin(); let mut stdin = stdin.lock(); loop { let input = stdin .read_line()? .unwrap_or_else(|| String::from("q")); match input.as_str() {