html2slideshow 2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/bin/html2slideshow +27 -0
  3. data/doc/changes.txt +162 -0
  4. data/doc/license.txt +674 -0
  5. data/lib/LANG +1 -0
  6. data/lib/about.rb +57 -0
  7. data/lib/argparser.rb +143 -0
  8. data/lib/completable.rb +157 -0
  9. data/lib/configurator.rb +155 -0
  10. data/lib/copyright.txt +22 -0
  11. data/lib/extstring.rb +75 -0
  12. data/lib/file_checking.rb +153 -0
  13. data/lib/html2slideshow.cfg +22 -0
  14. data/lib/html2slideshow.rb +132 -0
  15. data/lib/htmlbuilder.rb +267 -0
  16. data/lib/icons/failure.png +0 -0
  17. data/lib/icons/howto.png +0 -0
  18. data/lib/icons/logo.png +0 -0
  19. data/lib/icons/message.png +0 -0
  20. data/lib/icons/options.png +0 -0
  21. data/lib/icons/question.png +0 -0
  22. data/lib/icons/success.png +0 -0
  23. data/lib/image.rb +62 -0
  24. data/lib/list_fields.rb +34 -0
  25. data/lib/log.conf +60 -0
  26. data/lib/logging.rb +194 -0
  27. data/lib/slideshow_css.rb +248 -0
  28. data/lib/slideshow_images/downCursor.png +0 -0
  29. data/lib/slideshow_images/leftArrow.png +0 -0
  30. data/lib/slideshow_images/olive.png +0 -0
  31. data/lib/slideshow_images/pause.png +0 -0
  32. data/lib/slideshow_images/rightArrow.png +0 -0
  33. data/lib/slideshow_images/sizeMedium.png +0 -0
  34. data/lib/slideshow_images/sizeNormal.png +0 -0
  35. data/lib/slideshow_images/sizeSmall.png +0 -0
  36. data/lib/slideshow_images/start.png +0 -0
  37. data/lib/slideshow_images/stop.png +0 -0
  38. data/lib/slideshow_images/toggle.png +0 -0
  39. data/lib/slideshow_images/upCursor.png +0 -0
  40. data/lib/slideshow_js.rb +390 -0
  41. data/lib/slideshow_template.rb +194 -0
  42. data/lib/sourcefile.rb +191 -0
  43. data/lib/translating.rb +90 -0
  44. data/lib/translations +354 -0
  45. metadata +86 -0
data/lib/sourcefile.rb ADDED
@@ -0,0 +1,191 @@
1
+ #encoding: UTF-8
2
+
3
+ =begin
4
+ /***************************************************************************
5
+ * Copyright © 2008-2012, Michael Uplawski <michael.uplawski@uplawski.eu> *
6
+ * *
7
+ * This program is free software; you can redistribute it and/or modify *
8
+ * it under the terms of the GNU General Public License as published by *
9
+ * the Free Software Foundation; either version 3 of the License, or *
10
+ * (at your option) any later version. *
11
+ * *
12
+ * This program is distributed in the hope that it will be useful, *
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15
+ * GNU General Public License for more details. *
16
+ * *
17
+ * You should have received a copy of the GNU General Public License *
18
+ * along with this program; if not, write to the *
19
+ * Free Software Foundation, Inc., *
20
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21
+ ***************************************************************************/
22
+ =end
23
+
24
+ RD = File.expand_path(File.dirname(__FILE__) ) + File::Separator if !defined?(RD)
25
+
26
+
27
+ require_relative 'extstring.rb'
28
+ require_relative 'image.rb'
29
+ require_relative 'file_checking'
30
+ require_relative 'logging'
31
+
32
+ =begin
33
+ SourceFile defines objects, which represent the original html-files,
34
+ to be processed by the slideshow-generator. Each SourceFile-object will
35
+ provide a few details about the contents and location of 1 such file.
36
+ =end
37
+
38
+ class SourceFile
39
+ self::extend(Logging)
40
+ @@log = self::init_logger
41
+
42
+ attr_reader :images, :dirname, :img_count, :title, :file_name, :file_ext
43
+
44
+ def initialize(path, options)
45
+ @log = @@log
46
+ @log.debug(format("initializing SourceFile for %s ", path)) if @log
47
+ @log.debug('options are ' << options.to_s)
48
+
49
+ @path = path
50
+ @formats = options.formats
51
+
52
+ # file extension
53
+ local = 'files' == options.source_type
54
+ @file_ext = ((local || options.merge) ? '.html' : File.extname(@path))
55
+
56
+ # file name without path or extension
57
+ @file_name = File.basename(@path.gsub("\\", '/'), @file_ext)
58
+
59
+ # directory where the original html-file is found
60
+ @dirname = File.dirname(@path)
61
+
62
+ # All references to image-files, found in the file
63
+ @images = Array.new
64
+
65
+ # number of images, found
66
+ @img_count = 0
67
+
68
+ # title of the original page
69
+ # or the final slide show file
70
+ @title = nil
71
+ @title = options.title if options.title && !options.title.empty?
72
+
73
+ @title.strip! if @title
74
+
75
+ # scan sub-directories (local image-files, only)
76
+ @recursive = options.recursive
77
+ @log.debug("recursive ? " << @recursive.to_s)
78
+ @log.debug(format("files from %s", (local ? 'directory' : 'html')) ) if @log
79
+ # read pages or files, analyze, set image-references and title
80
+ if(local)
81
+ read_dir
82
+ elsif(options.merge)
83
+ read_files
84
+ else
85
+ read_file
86
+ end
87
+ @log.debug("sourcefile initialized: " + @path) if @log
88
+ end
89
+
90
+ private
91
+
92
+ def read_files(p = @path)
93
+ dir_msg = File_Checking.file_check(p, [:exist?, :directory?, :readable?])
94
+ if (!dir_msg)
95
+ @title ||= File.basename(@path).strip
96
+ Dir.open(p) do |dir|
97
+ dir.each do |file|
98
+ @log.debug("testing #{file}") if @log
99
+ if(file.index('.') != 0 && file.downcase.end_with?('html') )
100
+ file = format("%s%s%s", p, File::Separator, file)
101
+ if (!File_Checking.file_check(file, [:file?, :readable?]))
102
+ read_file(file)
103
+ end
104
+ end
105
+ end
106
+ end
107
+ else
108
+ @log.error(msg) if msg && @log
109
+ end
110
+ end
111
+
112
+ def read_dir(p = @path, dir_path = nil)
113
+ @log.debug(format("read_dir: %s ", p)) if @log
114
+ Dir.open(p) do |dir|
115
+ @log.debug('dir is ' << dir.path)
116
+ dir.each do |file_name|
117
+ path = File.expand_path(file_name, dir_path)
118
+ @log.debug('file_name ' << file_name << ', path is ' << path) if @log
119
+ msg = File_Checking.file_check(path, [:exist?, :file?, :readable?])
120
+ if(!msg)
121
+ msg ||= Image::supported?(path, @formats)
122
+ if(!msg)
123
+ img = Image.new(file_name)
124
+ images.push(img)
125
+ end
126
+ end
127
+ if(@recursive)
128
+ msg = File_Checking.file_check(file_name, :exist?, :directory?, :readable?)
129
+ if(!msg && file_name && file_name != '.' && file_name != '..' )
130
+ @log.debug('recursively checking sub-directories')
131
+ @log.debug('decending into ' << path)
132
+ read_dir( path, p)
133
+ end # check if directory
134
+ end
135
+ end # all in path 'p'
136
+ end # Dir.open
137
+ @title ||= File.basename(@path) if !@images.empty?
138
+ @title.strip! if @title
139
+ @log.debug("found #{@images.size} images: " << @images.collect {|im| im.reference}.join(', ')) if @log
140
+ end
141
+
142
+ def read_file(f = @path)
143
+ @log.debug(format("working on file %s", f)) if @log
144
+ File.open(f, 'r') do |fp|
145
+ # order matters!
146
+ set_title(fp) if !@title
147
+ register_images(fp)
148
+ end
149
+ @img_count = @images.size
150
+ end
151
+
152
+ def set_title(fp)
153
+ otag = "<title.*"
154
+ ctag = "</title>"
155
+ while(!@title && fp.gets('>'))
156
+ ttag = $_.match(otag)
157
+ ttext = fp.gets(ctag) if ttag
158
+ @title = ttext[0, ttext.rindex(ctag)] if ttext
159
+ end
160
+ end
161
+
162
+ def register_images(fp)
163
+ while(fp.gets('>'))
164
+ url = $_.match("<a.*\n?.*\n?.*")
165
+ img = nil
166
+ if(url)
167
+ url = url.to_s
168
+ @log.debug(format("testing link %s", url)) if @log
169
+ @extensions = Image::FORMATS.keys.collect{|f| f.to_s}
170
+ @extensions.each do |ex|
171
+ img = url.to_s.match(/[\w\/]*.#{ex}/)
172
+ img = img.to_s.delete("\"") if img
173
+ @log.debug("testing image, result: #{img}") if img && @log
174
+ if(img && img.size > 0)
175
+ # img = dir.dup << img
176
+ image = Image.new(img)
177
+ @log.debug("result: #{image.to_s}") if image && @log
178
+
179
+ @images.push(image )
180
+ break
181
+ end
182
+ end
183
+ end
184
+ end
185
+ @log.debug(format("found %d references", @images.size)) if @log
186
+ @images.uniq!()
187
+ @log.debug(format("after uniq: %d", @images.size)) if @log
188
+
189
+ end
190
+ end
191
+ #---------------------------
@@ -0,0 +1,90 @@
1
+ #encoding: UTF-8
2
+ =begin
3
+ /***************************************************************************
4
+ * ©2011-2017, Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * *
6
+ * This program is free software; you can redistribute it and/or modify *
7
+ * it under the terms of the GNU General Public License as published by *
8
+ * the Free Software Foundation; either version 3 of the License, or *
9
+ * (at your option) any later version. *
10
+ * *
11
+ * This program is distributed in the hope that it will be useful, *
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
+ * GNU General Public License for more details. *
15
+ * *
16
+ * You should have received a copy of the GNU General Public License *
17
+ * along with this program; if not, write to the *
18
+ * Free Software Foundation, Inc., *
19
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
20
+ ***************************************************************************/
21
+ =end
22
+
23
+
24
+ RD = File.expand_path(File.dirname(__FILE__) ) + File::SEPARATOR if !defined?(RD)
25
+
26
+ require 'yaml'
27
+ require_relative 'file_checking'
28
+
29
+
30
+ # A way to produce translated text in a ruby-program.
31
+ # Translations are read from a file "translations" in the program folder.
32
+ module Translating
33
+ # There are better ways to extend a translated
34
+ # string, but I keep the 'wild-card' for
35
+ # historical reasons.
36
+ # TODO: GET RID OF THIS CRAP
37
+ @@awild = 'XX'
38
+
39
+ @@lang = nil
40
+ @@lang_file = format("%s%s", RD, 'LANG')
41
+ @@tr = YAML::load_file("#{RD}translations")
42
+
43
+ # find the current language-setting and return it.
44
+ def self.language()
45
+ if @@lang == nil
46
+ r = ENV['LANG']
47
+ if(r)
48
+ @@lang = r[0, 2]
49
+ elsif( !File_Checking::file_check(@@lang_file, [:exist?, :readable?]) && File::size(@@lang_file) >= 2)
50
+ File::open(@@lang_file, 'r') {|f| @@lang = f.readline}
51
+ @@lang.chomp!.downcase! if @@lang
52
+ end
53
+ end
54
+ @@lang = 'en' if !@@lang
55
+ end
56
+
57
+ # Translate a string to the currently set langage. The args parameter may
58
+ # contain replacement-text which will appear at the positions indicated by
59
+ # wildcard-characters in the original string (DARN).
60
+ # This is for historical reasons. The format() function is much better suited
61
+ # to extend plaintext messages.
62
+ def self.trl(t, *args)
63
+ Translating::language()
64
+ lt = @@tr[t]
65
+ if(lt)
66
+ lt = lt[@@lang]
67
+ else
68
+ # File.open('/tmp/mtf', 'a+') {|f| f << t << "\n"}
69
+ puts "\nTRANSLATION MISSING: \"" << t << "\""
70
+ end
71
+ lt ||= t
72
+ if(args && !args.empty?)
73
+ i = -1
74
+ lt = lt.gsub(@@awild) do |a|
75
+ i += 1
76
+ args.flatten[i]
77
+ end
78
+ lt += args[i + 1, args.length].join
79
+ end
80
+ return lt
81
+ end
82
+
83
+ # Translate a string to the currently set langage.
84
+ # The args parameter may contain replacement-text which
85
+ # will appear at the positions indicated by wildcard-characters
86
+ # in the original string.
87
+ def trl(t, *args )
88
+ Translating::trl(t, args)
89
+ end
90
+ end
data/lib/translations ADDED
@@ -0,0 +1,354 @@
1
+ ERROR:
2
+ de: FEHLER
3
+ fr: ERREUR
4
+
5
+ Source-directory:
6
+ de: Quellverzeichnis
7
+ fr: Dosssier source
8
+
9
+ No source-directory given.:
10
+ de: Kein HTML-Quellverzeichnis angegeben.
11
+ fr: Veuillez indiquer le dossier sources HTML.
12
+
13
+ is not supported, wrong mime-type:
14
+ de: wird nicht unterstützt, verkehrter Mime-Type
15
+ fr: Le Mime-Type n'est pas supporté
16
+
17
+ DONE:
18
+ fr: Terminé
19
+ de: Fertig
20
+
21
+ sec:
22
+ fr: sec
23
+ de: sek
24
+
25
+ Start:
26
+ fr: Start
27
+ de: Start
28
+
29
+ Image:
30
+ fr: Image
31
+ de: Bild
32
+
33
+ Specific options:
34
+ fr: Options spécifiques
35
+ de: Spezielle Optionen
36
+
37
+ -d:
38
+ fr: -d
39
+ de: -d
40
+
41
+ debug [true|FALSE]:
42
+ fr: --debug[true|FALSE]
43
+ de: --debug[true|FALSE]
44
+
45
+ Switch on debug-mode.:
46
+ fr: Activer le protocole.
47
+ de: Debug-Modus aktivieren.
48
+
49
+ Will generate log-messages during processing:
50
+ fr: Le logiciel va afficher des messages pendant l'exécution
51
+ de: Während der Verarbeitung werden Protokollmeldungen ausgegeben
52
+
53
+ -f:
54
+ fr: -f
55
+ de: -f
56
+
57
+ formats:
58
+ fr: formats
59
+ de: Formate
60
+
61
+ specify the comma-separated list of image formats,:
62
+ fr: indiquez une liste de formats, séparés par comma,
63
+ de: Geben Sie eine komma-separierte Liste von Bildformaten an,
64
+
65
+ which should be used, others will be ignored.:
66
+ fr: qui doivent être utilisés. D'autres sont ignorés.
67
+ de: die benutzt werden sollen; andere werden ignoriert.
68
+
69
+ -l:
70
+ fr: -l
71
+ de: -l
72
+
73
+ local:
74
+ fr: local
75
+ de: lokal
76
+
77
+
78
+ Collect the image-files from the source-directory:
79
+ fr: Les images sont des fichiers dans le répertoire de source
80
+ de: Verwende die Bilddateien aus dem Quellverzeichnis
81
+
82
+ (if not provided, HTML-files are analyzed):
83
+ fr: (sinon, des fichiers HTML sont analysés)
84
+ de: (anderenfalls werden HTML-Dateien analysiert)
85
+
86
+ -r:
87
+ fr: -r
88
+ de: -r
89
+
90
+ recursive:
91
+ fr: récursif
92
+ de: rekursiv
93
+
94
+ When collecting image-files from the source-directory,:
95
+ fr: Si les images sont trouvés dans le répertoire de source,
96
+ de: Wenn die Bilddateien im Quellverszeichnis liegen,
97
+
98
+ also include the sub-directories.:
99
+ fr: traverse aussi les sous-répertoires
100
+ de: lies auch die Unterverzeichnisse
101
+
102
+ Usage:
103
+ fr: Syntaxe
104
+ de: Aufrufsyntax
105
+
106
+ or:
107
+ fr: ou
108
+ de: oder
109
+
110
+ -s:
111
+ fr: -s
112
+ de: -q
113
+
114
+ source SOURCE DIR:
115
+ fr: source RÉPERTOIRE SOURCE
116
+ de: quelle QUELLVERZEICHNIS
117
+
118
+ Read HTML source-files from this directory:
119
+ fr: Lis les fichiers HTML dans le répertoire de source
120
+ de: Lies die HTML-Dateien im Quellverzechnis
121
+
122
+ -t:
123
+ fr: -p
124
+ de: -z
125
+
126
+ target [TARGET DIR]:
127
+ fr: projet [Répertoire du Diaporama]
128
+ de: ziel [Zielverzeichnis]
129
+
130
+ Write slideshow-files to this sub-directory:
131
+ fr: sauvegarde les diaporamas dans ce sous-répertoire
132
+ de: Schreibe die Diashow-Dateien in dieses Unterverzeichnis
133
+
134
+ (if not provided, SOURCE DIR is used):
135
+ fr: (sinon, le répertoire de source est utilisé)
136
+ de: (anderenfalls wird das Quellverzeichnis verwendet)
137
+
138
+ Common options:
139
+ fr: Options généraux
140
+ de: Allgemeine Optionen
141
+
142
+ -h:
143
+ fr: -a
144
+ de: -h
145
+
146
+ help:
147
+ fr: aide
148
+ de: Hilfe
149
+
150
+ Show this message:
151
+ fr: Afficher ce message
152
+ de: Diese Meldung anzeigen
153
+
154
+ version:
155
+ fr: version
156
+ de: Version
157
+
158
+ Show version:
159
+ fr: Affiche version
160
+ de: Version anzeigen
161
+
162
+ # Tooltips
163
+ ########################################
164
+ Path to the source-files:
165
+ de: Pfad zu den Quelldateien
166
+ fr: Chemin des fichiers sources
167
+
168
+ Include sub-directories in the search for images:
169
+ de: Unterverzeichnisse bei der Suche nach Bildern einschließen
170
+ fr: Chercher des images aussi dans les sous-dossiers
171
+
172
+ Choose a source-directory:
173
+ de: Ein Quellverzeichnis wählen
174
+ fr: Choisir le dossier des sources
175
+
176
+ Start generating the slide show(s):
177
+ de: Diashow(s) generieren
178
+ fr: Demarrer la création des diaporamas
179
+
180
+ Quit Html2Slideshow:
181
+ de: Html2Slideshow beenden
182
+ fr: Quitter Html2Slideshow
183
+
184
+ About Html2Slideshow:
185
+ de: Über Html2Slideshow
186
+ fr: A propos de Html2Slideshow
187
+
188
+ Path to the generated slide show(s):
189
+ de: Pfad zu den generierten Diashows
190
+ fr: Chemin du dossier pour le(s) diaporama(s)
191
+
192
+ Back to the general options:
193
+ de: Zurück zu den allgemeinen Einstellungen
194
+ fr: Retour à la configuration principale
195
+
196
+ Path and name of the log-file:
197
+ de: Pfad und name der Log-Datei
198
+ fr: Chemin et nom du fichier de protocole
199
+
200
+ Toggle to write or stop writing to the log-file:
201
+ de: Schreiben der Protokolldatein ein- und ausschalten
202
+ fr: Activer ou déactiver la création du protocole
203
+
204
+ Activate image-formats to include in the slide show:
205
+ de: Bildformate auswählen, die berücksichtigt werden sollen
206
+ fr: Choisissez les formats graphiques à inclure dans les diaporamas
207
+
208
+ Use the image-files, found in the source-folder:
209
+ de: Bilddateien direkt dem Quellverzeichnis entnehmen
210
+ fr: Les fichiers graphiques sont lus directement du dossiers des sources
211
+
212
+ Use the images, which are linked in HTML-files:
213
+ de: Bildverweise aus HTML-Dateien verwenden
214
+ fr: Les chemins des images sont extraits des fichiers HTML
215
+
216
+ file-names should match this regular expression:
217
+ de: Dateinamen der Bilder sollen diesem regulären Ausdruck entsprechen
218
+ fr: Expression regulaire pour filtrer les noms des fichiers
219
+
220
+ Create only one slide show file from several HTML source-files:
221
+ de: Nur eine Diashow-Datei aus mehreren HTML Quelldateien
222
+ fr: Tous les fichiers HTML seront fusionnés dans un seul diaporama
223
+
224
+ Title of the slide show file:
225
+ de: Titel der Diashow
226
+ fr: Titre du diaporama
227
+
228
+ # Special characters needed for the surface!
229
+ # JavaScript needs the escape-sequences
230
+ #######################################
231
+ You have reached the last picture:
232
+ de: Sie haben das letzte Bild erreicht.
233
+ fr: Vous %EAtes arriv%E9 %E0 la derni%E8re image
234
+
235
+ You have reached the first picture:
236
+ de: Sie haben das erste Bild erreicht.
237
+ fr: Vous %EAtes arriv%E9 %E0 la premi%E8re image
238
+
239
+ Image:
240
+ de: Bild
241
+ fr: Image
242
+
243
+ Continue slideshow:
244
+ de: Diashow fortsetzen
245
+ fr: Continuer le diaporama
246
+
247
+ Stop the automatic slideshow:
248
+ de: Automatische Diashow anhalten
249
+ fr: Arr%EAter le diaporama automatique
250
+
251
+ In the Internet-Explorer, the slideshow may suffer from display-errors.:
252
+ de: Im Internet-Explorer kommt es leider zu Darstellungsfehlern.
253
+ fr: Avec Internet-Explorer, la pr%E9sentation du diaporama peut %EAtre pertub%E9.
254
+
255
+ Please switch to a standard-complient browser until these issues are solved.:
256
+ de: Bitte weichen Sie auf einen standard-konformen Browser aus, bis diese Fehler beseitigt sind.
257
+ fr: Veuillez-utiliser un autre logiciel en attendant la correction de ces erreurs.
258
+
259
+ # Special characters needed for the surface!
260
+ # HTML needs HTML-entities.
261
+ #######################################
262
+
263
+ This page will only work, when your browser is configured to use JavaScript.:
264
+ de: Diese Seite funktioniert leider nur, wenn JavaScript in Ihrem Browser aktiviert ist.
265
+ fr: Cette page va fonctionner seulement si votre Browser est configur&eacute; pour executer JavaScript.
266
+
267
+ Click the back-button to return to the previous page or go directly to the:
268
+ de: Klicken Sie den Zur&uuml;ck-Button, um zur vorigen Seite zu gelangen, oder &ouml;ffenen Sie direkt die
269
+ fr: Clickez sur le bouton "retour" pour revenir &agrave; la page pr&eacute;c&eacute;dente ou allez directement &agrave; la
270
+
271
+ Back to the welcome page:
272
+ de: Zur&uuml;ck zur Startseite
273
+ fr: Retour &agrave; la page de d'acceuil
274
+
275
+ welcome page:
276
+ de: Startseite
277
+ fr: page d'acceuil
278
+
279
+ toggle controls:
280
+ de: Steuerelemente ein- oder ausblenden
281
+ fr: afficher/masquer la colonne de commandes
282
+
283
+ start (again) automatic slideshow:
284
+ de: automatische Diashow (neu) starten
285
+ fr: d&eacute;marrer (de nouveau) le diaporama automatique
286
+
287
+ Run:
288
+ de: Start
289
+ fr: D&eacute;marrer
290
+
291
+ stop the automatic slideshow:
292
+ de: automatische Diashow stoppen
293
+ fr: arr&ecirc;ter le diaporama automatique
294
+
295
+ Stop:
296
+ de: Stopp
297
+ fr: Stop
298
+
299
+ pause the automatic slideshow:
300
+ de: automatische Diashow anhalten
301
+ fr: pause
302
+
303
+ Pause:
304
+ de: Pause
305
+ fr: Pause
306
+
307
+ forward after:
308
+ de: weiter nach
309
+ fr: d&eacute;lai
310
+
311
+ sec.:
312
+ de: Sek.
313
+ fr: sec.
314
+
315
+ time span for each picture:
316
+ de: Anzeigedauer f&uuml;r jedes Bild
317
+ fr: dur&eacute;e d'affichage pour chaque image
318
+
319
+ more time:
320
+ de: mehr Zeit
321
+ fr: plus de temps
322
+
323
+ less time:
324
+ de: weniger Zeit
325
+ fr: moins de temps
326
+
327
+ next/previous:
328
+ de: vor/zur&uuml;ck
329
+ fr: avance/retour
330
+
331
+ previous picture (please allow time for loading):
332
+ de: voriges Bild (bitte Ladezeit abwarten)
333
+ fr: image pr&eacute;c&eacute;dante (l'affichage de l'image peut prendre quelques secondes)
334
+
335
+ scale to normal size:
336
+ de: Bild in Originalgröße
337
+ fr: Image en taille originale
338
+
339
+ scale to alternative large size:
340
+ de: Bild auf alternativen, großen Maßstab dimensionieren
341
+ fr: Dimensionner à la grande échelle alternative
342
+
343
+ scale to alternative small size:
344
+ de: Bild auf alternativen, kleinen Maßstab dimensionieren
345
+ fr: Dimensionner à la petite échelle alternative
346
+
347
+ next picture (please allow time for loading):
348
+ de: n&auml;chstes Bild (bitte Ladezeit abwarten)
349
+ fr: prochaine image (l'affichage de l'image peut prendre quelques secondes)
350
+
351
+ Please allow for longer loading-times during the very first cycle.:
352
+ de: Beim allerersten Durchlauf l&auml;ngere Ladezeiten abwarten.
353
+ fr: Pendant le premier passage, pr&eacute;voyez plus de temps pour le chargement des images
354
+