html2slideshow 2.0

Sign up to get free protection for your applications and to get access to all the features.
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
+