i18n
authorgc <gc>
Sat, 5 Mar 2005 18:21:47 +0000 (18:21 +0000)
committergc <gc>
Sat, 5 Mar 2005 18:21:47 +0000 (18:21 +0000)
booh
html_merges.rb
po/Makefile [new file with mode: 0644]
po/fr.po [new file with mode: 0644]

diff --git a/booh b/booh
index 1cf0533..a708991 100755 (executable)
--- a/booh
+++ b/booh
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 require 'getoptlong'
+require 'gettext'
+include GetText
+
 require 'html_merges'
 
 #- install location
 $FPATH = '.'
 
+#- bind text domain as soon as possible because some _() functions are called early to build data structures
+bindtextdomain("booh")
+
 #- options
 $options = [
-    [ '--help',          '-h', GetoptLong::NO_ARGUMENT,       "Get help message" ],
+    [ '--help',          '-h', GetoptLong::NO_ARGUMENT,       _("Get help message") ],
 
-    [ '--no-check',      '-n', GetoptLong::NO_ARGUMENT,       "Don't check for needed external programs at startup" ],
+    [ '--no-check',      '-n', GetoptLong::NO_ARGUMENT,       _("Don't check for needed external programs at startup") ],
 
-    [ '--source',        '-s', GetoptLong::REQUIRED_ARGUMENT, "Directory which contains original images/videos as files or subdirs" ],
-    [ '--destination',   '-d', GetoptLong::REQUIRED_ARGUMENT, "Directory which will contain the web-album" ],
-    [ '--clean',         '-c', GetoptLong::NO_ARGUMENT,       "Clean destination directory" ],
+    [ '--source',        '-s', GetoptLong::REQUIRED_ARGUMENT, _("Directory which contains original images/videos as files or subdirs") ],
+    [ '--destination',   '-d', GetoptLong::REQUIRED_ARGUMENT, _("Directory which will contain the web-album") ],
+    [ '--clean',         '-c', GetoptLong::NO_ARGUMENT,       _("Clean destination directory") ],
 
-    [ '--theme',         '-t', GetoptLong::REQUIRED_ARGUMENT, "Select HTML theme to use" ],
-    [ '--size',          '-z', GetoptLong::REQUIRED_ARGUMENT, "Size of images for `fullscreen' slideshow" ],
-    [ '--captions',      '-C', GetoptLong::REQUIRED_ARGUMENT, "File containing captions of images" ],
-    [ '--captions-skel', '-k', GetoptLong::REQUIRED_ARGUMENT, "Filename where the script will output a captions skeleton" ],
+    [ '--theme',         '-t', GetoptLong::REQUIRED_ARGUMENT, _("Select HTML theme to use") ],
+    [ '--size',          '-z', GetoptLong::REQUIRED_ARGUMENT, _("Size of images for `fullscreen' slideshow") ],
+    [ '--captions',      '-C', GetoptLong::REQUIRED_ARGUMENT, _("File containing captions of images") ],
+    [ '--captions-skel', '-k', GetoptLong::REQUIRED_ARGUMENT, _("Filename where the script will output a captions skeleton") ],
 
-    [ '--mproc',         '-m', GetoptLong::REQUIRED_ARGUMENT, "Specify the number of processors for multi-processors machines" ],
+    [ '--mproc',         '-m', GetoptLong::REQUIRED_ARGUMENT, _("Specify the number of processors for multi-processors machines") ],
 
-    [ '--verbose-level', '-v', GetoptLong::REQUIRED_ARGUMENT, "Set max verbosity level (0: warnings, 1: important messages, " +
-                                                              "2: other messages)" ],
+    [ '--verbose-level', '-v', GetoptLong::REQUIRED_ARGUMENT, _("Set max verbosity level (0: errors, 1: warnings, 2: important messages, 3: other messages)") ],
 ]
 
 #- default values for some globals 
@@ -52,8 +57,12 @@ $size = 'medium'
 $verbose_level = 2
 $captions = {}
 
+def __(string, *args)
+    sprintf(_(string), args)
+end
+
 def usage
-    puts "Usage: #{File.basename($0)} [OPTION]..."
+    puts __("Usage: %s [OPTION]...", File.basename($0))
     $options.each { |ary|
         printf " %3s, %-15s %s\n", ary[1], ary[0], ary[3]
     }
@@ -62,9 +71,9 @@ end
 def msg(verbose_level, msg)
     if verbose_level <= $verbose_level
         if verbose_level == 0
-            warn "***ERROR***: #{msg}"
+            warn __("***ERROR***: %s", msg)
         elsif verbose_level == 1
-            warn "Warning: #{msg}"
+            warn __("Warning: %s", msg)
         else
             puts msg
         end
@@ -92,12 +101,12 @@ def handle_options
             when '--source'
                 $source = arg.sub(%r|/$|, '')
                 if !File.directory?($source)
-                    die "Argument to --source must be a directory"
+                    die __("Argument to --source must be a directory")
                 end
             when '--destination'
                 $dest = arg.sub(%r|/$|, '')
                 if File.exists?($dest) && !File.directory?($dest)
-                    die "If --destination exists, it must be a directory"
+                    die __("If --destination exists, it must be a directory")
                 end
             when '--clean'
                 system("rm -rf #{$dest}")
@@ -110,11 +119,11 @@ def handle_options
                 if File.readable?(arg)
                     use_captions(arg)
                 else
-                    die 'Captions file does not exist or is unreadable.'
+                    die __('Captions file does not exist or is unreadable.')
                 end
             when '--captions-skel'
                 if File.exists?(arg)
-                    die 'Captions skeleton file already exists, won\'t overwrite'
+                    die __('Captions skeleton file already exists, won\'t overwrite')
                 else
                     $captions_skel = arg
                     $images_list_for_captions = Array.new
@@ -135,10 +144,10 @@ def handle_options
     end
 
     if !$source
-        die 'Missing --source parameter.'
+        die __("Missing --source parameter.")
     end
     if !$dest
-        die 'Missing --destination parameter.'
+        die __("Missing --destination parameter.")
     end
 
     if !$theme
@@ -147,10 +156,10 @@ def handle_options
 
     size = $images_size.detect { |e| e['name'] == $size }
     if !size
-        die "Size #{$size} not found in parameters of theme."
+        die __("Size %s not found in parameters of theme.", $size)
     else
         $sizeval = size['size']
-        msg 3, "Using size for fullscreen images of value: #{$sizeval}"
+        msg 3, __("Using size for fullscreen images of value: %s", $sizeval)
     end
 end
 
@@ -158,7 +167,7 @@ def select_theme(name)
     $theme = name
     themedir = "#{$FPATH}/themes/#{$theme}"
     if !File.directory?(themedir)
-        die "Theme was not found (tried #{themedir} directory)."
+        die __("Theme was not found (tried %s directory).", themedir)
     end
     require "#{themedir}/parameters.rb"
 end
@@ -168,7 +177,7 @@ def use_captions(filename)
         if line =~ /(\S+): (.+)/
             $captions[$1] = $2
         else
-            die "Unrecognized line in #{filename}: #{line}"
+            die __("Unrecognized line in %s: %s", filename, line)
         end
     end
 end
@@ -179,7 +188,7 @@ def check_installation
     end
     %w(convert transcode exif).each { |prg|
         if !system("which #{prg} >/dev/null")
-            die "The `#{prg}' program is typically needed. Re-run with --no-check if you're sure you're fine without it."
+            die __("The `%s' program is typically needed. Re-run with --no-check if you're sure you're fine without it.", prg)
         end
     }
 end
@@ -189,13 +198,13 @@ def replace_line(surround, keyword, line)
         contents = eval "$#{keyword}"
         line.sub!(/#{surround}#{keyword}#{surround}/, contents)
     rescue NameError
-        die "No `#{keyword}' found for substitution"
+        die __("No `%s' found for substitution", keyword)
     end
 end
 
 def build_html_skeleton
     theme_file = File.open("#{$FPATH}/themes/#{$theme}/skeleton.html").readlines
-    msg 2, "Read theme `#{$theme}'"
+    msg 2, __("Read theme `%s'", $theme)
     for line in theme_file
         while line =~ /~~~(\w+)~~~/
             replace_line('~~~', $1, line)
@@ -235,15 +244,15 @@ end
 def walk_source_dir
     `find #{$source} -type d`.each { |dir|
         dir.chomp!
-        msg 2, "Examining #{dir}..."
+        msg 2, __("Examining %s...", dir)
         images = Dir["#{dir}/*.{jpg,JPG,jpeg,JPEG,gif,GIF,bmp,BMP,png,PNG}"]
-        msg 2, "\t#{images.length} images"
+        msg 2, __("\t%s images", images.length)
         videos = Dir["#{dir}/*.{mov,MOV,avi,AVI,mpg,MPG,mpeg,MPEG,wmv,WMV,asx,ASX}"]
-        msg 2, "\t#{videos.length} videos"
+        msg 2, __("\t%s videos", videos.length)
         
         dest_dir = dir.sub(/^#{Regexp.quote($source)}/, $dest)
         system("mkdir -p '#{dest_dir}'")
-        msg 2, "Outputting in #{dest_dir}..."
+        msg 2, __("Outputting in %s...", dest_dir)
 
         final_images = []
         images.each { |img|
index a8aaffe..b2c8fdd 100644 (file)
@@ -20,6 +20,9 @@
 
 # holds static data to merge in the html "themes"
 
+require 'gettext'
+bindtextdomain("booh")
+
 $head_code = <<'EOF'
 <link rev="made" href="http://zarb.org/~gc/html/booh.html" />
 <script language="JavaScript1.1" type="text/JavaScript">
@@ -193,14 +196,14 @@ function last() {
 
 function toggle_slideshow() {
     if (slideshow == 0) {
-        document.getElementById("b_slideshow").value = "Stop slideshow";
+        document.getElementById("b_slideshow").value = "~~stop_slideshow~~";
         slideshow = 1;
         if (current == images.length - 1) {
             current = -1;
         }
         run_slideshow();
     } else {
-        document.getElementById("b_slideshow").value = "Run slideshow!";
+        document.getElementById("b_slideshow").value = "~~run_slideshow~~";
         slideshow = 0;
     }
 }
@@ -225,45 +228,43 @@ function run_slideshow() {
 </script>
 EOF
 
+$head_code.sub!('~~run_slideshow~~', _('Run slideshow!'))
+$head_code.sub!('~~stop_slideshow~~', _('Stop slideshow'))
+
 $body_additions = <<'EOF'
 onload="init()" id="body"
 EOF
 
-$button_first = <<'EOF'
+$button_first = '
     <form><input type="button"
                  onclick="first()"
-                 value="<<- First"
-                 id="b_first"></form>
-EOF
+                 value="' + _('<<- First') + '"
+                 id="b_first"></form>';
 
-$button_previous = <<'EOF'
+$button_previous = '
     <form><input type="button"
                  onclick="previous()"
-                 value="<- Previous"
-                 id="b_previous"></form>
-EOF
+                 value="' + _('<- Previous') + '"
+                 id="b_previous"></form>';
 
-$button_next = <<'EOF'
+$button_next = '
     <form><input type="button"
                  onclick="next()"
-                 value="Next ->"
-                 id="b_next"></form>
-EOF
+                 value="' + _('Next ->') + '"
+                 id="b_next"></form>';
 
-$button_last = <<'EOF'
+$button_last = '
     <form><input type="button"
                  onclick="last()"
-                 value="Last ->>"
-                 id="b_last"></form>
-EOF
+                 value="' + _('Last ->>') + '"
+                 id="b_last"></form>';
 
-$button_slideshow = <<'EOF'
+$button_slideshow = '
   <form><input type="button"
                onclick="toggle_slideshow()"
-               value="Run slideshow!"
+               value="' + _('Run slideshow!') + '"
                id="b_slideshow">
-  </form>
-EOF
+  </form>';
 
 $image = <<'EOF'
   <img name="main_img">
diff --git a/po/Makefile b/po/Makefile
new file mode 100644 (file)
index 0000000..665d4e4
--- /dev/null
@@ -0,0 +1,41 @@
+# the domain name for rgettext
+PGOAL = booh
+
+# ruby files to search translatable strings in
+RB_FILES = ../booh ../html_merges.rb
+
+POFILES = $(wildcard *.po)
+MOFILES = $(POFILES:%.po=%.mo)
+LANGS = $(POFILES:%.po=%)
+
+# because of different charsets or encodings.. :-(
+IGNOREPOMS = 
+
+PREFIX = /usr/local
+DATADIR = $(PREFIX)/share
+LOCALEDIR=$(DATADIR)/locale
+
+all: $(MOFILES)
+
+%.mo: %.po
+       rmsgfmt -o $@ "$<"
+
+merge: $(PGOAL).pot
+       @for n in $(POFILES); do \
+               echo "Merging $$n"; \
+               msgmerge "$$n" $< > "$$n"t; \
+               mv -f "$$n"t "$$n"; \
+       done
+
+$(PGOAL).pot: $(RB_FILES)
+       rm -f $@
+       rgettext --keyword=__ -o $@ $(RB_FILES)
+
+install:
+       for l in $(LANGS); do \
+               install -d $(LOCALEDIR)/$$l/LC_MESSAGES; \
+               install -m 644 $$l.mo $(LOCALEDIR)/$$l/LC_MESSAGES/$(PGOAL).mo; \
+       done
+
+clean:
+       @rm -rf *.mo $(PGOAL).pot
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..c6a3c9b
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,178 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2005-03-05 19:19+0100\n"
+"PO-Revision-Date: 2005-03-05 19:20+0100\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: ../booh:36
+msgid "Get help message"
+msgstr "Obtenir le message d'aide"
+
+#: ../booh:38
+msgid "Don't check for needed external programs at startup"
+msgstr ""
+"Ne pas vérifier la présence des programmes externes nécessaires au démarrage"
+
+#: ../booh:40
+msgid "Directory which contains original images/videos as files or subdirs"
+msgstr ""
+"Répertoire qui contient les images et vidéos originales comme fichiers ou "
+"sous-répetoires"
+
+#: ../booh:41
+msgid "Directory which will contain the web-album"
+msgstr "Répertoire qui va contenir le web-album"
+
+#: ../booh:42
+msgid "Clean destination directory"
+msgstr "Nettoyer le répertoire de destination"
+
+#: ../booh:44
+msgid "Select HTML theme to use"
+msgstr "Sélectionner le thème HTML à utiliser"
+
+#: ../booh:45
+msgid "Size of images for `fullscreen' slideshow"
+msgstr "Taille des images pour la présentation plein-écran"
+
+#: ../booh:46
+msgid "File containing captions of images"
+msgstr "Fichier contenant les légendes des images"
+
+#: ../booh:47
+msgid "Filename where the script will output a captions skeleton"
+msgstr "Nom de fichier à utiliser pour la création du squelette des légendes"
+
+#: ../booh:49
+msgid "Specify the number of processors for multi-processors machines"
+msgstr ""
+"Spécifier le nombre de processeurs pour les ordinateurs multi-processeurs"
+
+#: ../booh:51
+msgid ""
+"Set max verbosity level (0: errors, 1: warnings, 2: important messages, 3: "
+"other messages)"
+msgstr ""
+"Déterminer le niveau de verbosité maximal (0 : erreurs, 1: avertissements, "
+"2 : messages importants, 3 : autres messages)"
+
+#: ../booh:65
+msgid "Usage: %s [OPTION]..."
+msgstr "Utilisation: %s [OPTION]..."
+
+#: ../booh:74
+msgid "***ERROR***: %s"
+msgstr "***ERREUR*** : %s"
+
+#: ../booh:76
+msgid "Warning: %s"
+msgstr "Avertissement : %s"
+
+#: ../booh:104
+msgid "Argument to --source must be a directory"
+msgstr "L'argument de --source doit être un répertoire"
+
+#: ../booh:109
+msgid "If --destination exists, it must be a directory"
+msgstr "Si --destination existe, il doit être un répertoire"
+
+#: ../booh:122
+msgid "Captions file does not exist or is unreadable."
+msgstr "Le fichier de légendes n'existe pas ou est non lisible."
+
+#: ../booh:126
+msgid "Captions skeleton file already exists, wont overwrite"
+msgstr ""
+"Le fichier pour le squelette de légendes existe déjà, et je ne vais pas le "
+"remplacer"
+
+#: ../booh:147
+msgid "Missing --source parameter."
+msgstr "Il manque le paramètre --source."
+
+#: ../booh:150
+msgid "Missing --destination parameter."
+msgstr "Il manque le paramètre --destination."
+
+#: ../booh:159
+msgid "Size %s not found in parameters of theme."
+msgstr "Taille %s non trouvée dans les paramètres du thème."
+
+#: ../booh:162
+msgid "Using size for fullscreen images of value: %s"
+msgstr "Utilisation de la taille pour images plein-écran de valeur : %s"
+
+#: ../booh:170
+msgid "Theme was not found (tried %s directory)."
+msgstr "Thème non trouvé (le répertoire %s a été essayé)."
+
+#: ../booh:180
+msgid "Unrecognized line in %s: %s"
+msgstr "Ligne non reconnue dans %s : %s"
+
+#: ../booh:191
+msgid ""
+"The `%s' program is typically needed. Re-run with --no-check if you're sure "
+"you're fine without it."
+msgstr ""
+"Le programme `%s' est typiquement nécessaire. Relancez avec --no-check si "
+"vous êtes sûr que vous n'en aurez pas besoin."
+
+#: ../booh:201
+msgid "No `%s' found for substitution"
+msgstr "`%s' non trouvé pour substitution"
+
+#: ../booh:207
+msgid "Read theme `%s'"
+msgstr "Lecture du thème `%s'"
+
+#: ../booh:247
+msgid "Examining %s..."
+msgstr "Examen de %s..."
+
+#: ../booh:249
+msgid "\t%s images"
+msgstr "\t%s images"
+
+#: ../booh:251
+msgid "\t%s videos"
+msgstr "\t%s vidéos"
+
+#: ../booh:255
+msgid "Outputting in %s..."
+msgstr "Écriture dans %s..."
+
+#: ../html_merges.rb:231 ../html_merges.rb:265
+msgid "Run slideshow!"
+msgstr "Lancer la présentation !"
+
+#: ../html_merges.rb:232
+msgid "Stop slideshow"
+msgstr "Arrêter la présentation"
+
+#: ../html_merges.rb:241
+msgid "<<- First"
+msgstr "<<- Premier"
+
+#: ../html_merges.rb:247
+msgid "<- Previous"
+msgstr "<- Précédent"
+
+#: ../html_merges.rb:253
+msgid "Next ->"
+msgstr "Prochain ->"
+
+#: ../html_merges.rb:259
+msgid "Last ->>"
+msgstr "Dernier ->>"