]> git.donarmstrong.com Git - lilypond.git/commitdiff
Gettextize add_html_footer
authorJohn Mandereau <john.mandereau@gmail.com>
Sat, 24 Feb 2007 11:34:12 +0000 (12:34 +0100)
committerJohn Mandereau <john.mandereau@gmail.com>
Sat, 24 Feb 2007 11:34:12 +0000 (12:34 +0100)
Additionnally, add_html_footer now avoids inserting a duplicate <HR>
when copying the navigation bar in HTML Info pages.

Documentation/po/GNUmakefile
buildscripts/add_html_footer.py
buildscripts/langdefs.py
buildscripts/www_post.py

index 925cb7e5a12612e550d771b1c82d4a9d22db0192..ef93f6aababd1534c1ddf9864c18299aef944c51 100644 (file)
@@ -6,6 +6,7 @@ include $(depth)/make/stepmake.make
 
 doc-localedir=$(outdir)
 DOMAIN=lilypond-doc
+DOC_PO_SOURCES = add_html_footer.py langdefs.py
 
 messages: $(MO_FILES)
        for i in $(CATALOGS); do \
@@ -14,7 +15,9 @@ messages: $(MO_FILES)
        done
 
 po-update:
-       $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -o doc.pot --gettext ../$(depth)/Documentation/user/lilypond.tely
+       $(PYTHON) $(buildscript-dir)/texi-langutils.py -d $(outdir) -o texi.pot --gettext ../$(depth)/Documentation/user/lilypond.tely
+       xgettext -cjn -L Python -o $(outdir)/buildscripts.pot $(foreach i, $(DOC_PO_SOURCES), $(buildscript-dir)/$(i) )
+       msgcat -o $(outdir)/doc.pot $(outdir)/buildscripts.pot $(outdir)/texi.pot
        msgmerge -U lilypond-doc.pot $(outdir)/doc.pot
        for i in $(CATALOGS); do \
          msgmerge -U $$i.po lilypond-doc.pot; \
index 3e35952c426cad818cb48af6c50a1f8585c24f3d..5722bca35213fc9b99eebe2f9221f7158f960eb2 100644 (file)
@@ -6,6 +6,7 @@ Print a nice footer.
 import re
 import os
 import time
+import gettext
 
 import langdefs
 
@@ -28,14 +29,14 @@ non_copied_pages = ['Documentation/user/out-www/lilypond-big-page',
 header = r"""
 """
 
-footer = r'''
+footer = '''
 <div style="background-color: #e8ffe8; padding: 2; border: #c0ffc0 1px solid;">
 <p>
 <font size="-1">
-This page is for %(package_name)s-%(package_version)s (%(branch_str)s). <br>
+''' + _ ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).') + '''<br>
 </font>
 <address><font size="-1">
-Report errors to <a href="%(mail_address_url)s">%(mail_address)s</a>.</font></address>
+''' + _ ('Report errors to <a href="%(mail_address_url)s">%(mail_address)s</a>.') + '''</font></address>
 </p>
 </div>
 '''
@@ -48,17 +49,17 @@ footer_tag = '<!-- footer_tag -->'
 def _ (s):
     return s
 
-language_available = _ ("Other languages: %s.") % "%(language_menu)s"
-browser_language = _ ("Using <A HREF='%s'>automatic language selection</A>.") \
-           % "/web/about/browser-language"
+language_available = _ ("Other languages: %s.")
+browser_language = _ ('About <A HREF="%s">automatic language selection</A>.')
+browser_language_url = "/web/about/browser-language"
 
-LANGUAGES_TEMPLATE = '''\
+LANGUAGES_TEMPLATE = '''
 <P>
  %(language_available)s
  <BR>
  %(browser_language)s
 </P>
-''' % vars ()
+'''
 
 
 html_re = re.compile ('(.*?)(?:[.]([^/.]*))?[.]html$')
@@ -87,7 +88,7 @@ def add_header (s):
         s = re.sub ('(?i)<body>', body, s)
         if re.search ('(?i)<BODY', s):
             s = re.sub ('(?i)<body[^>]*>', body + header, s, 1)
-        elif re.search ('(?i)<html', s):                
+        elif re.search ('(?i)<html', s):
             s = re.sub ('(?i)<html>', '<HTML>' + header, s, 1)
         else:
             s = header + s
@@ -114,6 +115,7 @@ def add_title (s):
     return s
 
 info_nav_bar = re.compile (r'<div class="node">\s*<p>\s*<a name=".+?"></a>(.+?)<hr>\s*</div>', re.M | re.S)
+info_footnote_hr = re.compile (r'<hr>\s*(</div>)?\s*</body>', re.M | re.I)
 
 def add_footer (s):
     """add footer
@@ -121,7 +123,11 @@ def add_footer (s):
 also add navigation bar to bottom of Info HTML pages"""
     m = info_nav_bar.search (s)
     if m:
-        custom_footer = '<br><hr>\n<div class="node">\n<p>' + m.group (1) + '</div>\n' + footer
+        # avoid duplicate <hr> in case there are footnotes at the end of the Info HTML page
+        if info_footnote_hr.search (s):
+            custom_footer = '<div class="node">\n<p>' + m.group (1) + '</div>\n' + footer
+        else:
+            custom_footer = '<br><hr>\n<div class="node">\n<p>' + m.group (1) + '</div>\n' + footer
     else:
         custom_footer = footer
     if re.search ('(?i)</body', s):
@@ -152,56 +158,65 @@ def process_links (s, prefix, lang_ext, file_name, missing, target):
         # Strip .html, .png suffix for auto language selection (content
         # negotiation).  The menu must keep the full extension, so do
         # this before adding the menu.
-        page_flavors[file_name] = re.sub (
+        page_flavors[file_name] = [lang_ext, re.sub (
             '''(href|src)=[\'"]([^/][.]*[^.:\'"]*)(.html|.png)(#[^"\']*|)[\'"]''',
-            '\\1="\\2\\4"', s)
+            '\\1="\\2\\4"', s)]
     elif target == 'offline':
         # in LANG doc index: don't rewrite .html suffixes as not all .LANG.html pages exist
         # the doc index should be translated and contain the right links
         if prefix == 'Documentation/out-www/index':
-            page_flavors[file_name] = s
+            page_flavors[file_name] = [lang_ext, s]
         elif lang_ext == '':
-            page_flavors[file_name] = s
+            page_flavors[file_name] = [lang_ext, s]
             for e in missing:
-                page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = re.sub (
+                page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = [e, re.sub (
                     '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
-                    'href="\\1.' + e + '\\2\\3"', s)
+                    'href="\\1.' + e + '\\2\\3"', s)]
         else:
-            page_flavors[file_name] = re.sub (
+            page_flavors[file_name] = [lang_ext, re.sub (
                 '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
-                'href="\\1.' + lang_ext + '\\2\\3"', s)
+                'href="\\1.' + lang_ext + '\\2\\3"', s)]
     return page_flavors
 
-def add_menu (page_flavors, prefix, available):
-    language_menu = ''
-    for lang in available:
-        lang_file = lang.file_name (os.path.basename (prefix), '.html')
-        if language_menu != '':
-            language_menu += ', '
-        language_menu += '<a href="%s">%s</a>' % (lang_file, lang.name)
-
-    languages = ''
-    if language_menu:
-        languages = LANGUAGES_TEMPLATE % vars ()
-
-    # put language menu before '</body>' and '</html>' tags
+def add_menu (page_flavors, prefix, available, target, translation):
     for k in page_flavors.keys():
-        if re.search ('(?i)</body', page_flavors[k]):
-            page_flavors[k] = re.sub ('(?i)</body>', languages + '</BODY>', page_flavors[k], 1)
-        elif re.search ('(?i)</html', page_flavors[k]):                
-            page_flavors[k] = re.sub ('(?i)</html>', languages + '</HTML>', page_flavors[k], 1)
+        language_menu = ''
+        languages = ''
+        if page_flavors[k][0] != '':
+            t = translation[page_flavors[k][0]]
         else:
-            page_flavors[k] += languages
+            t = _
+        for lang in available:
+            lang_file = lang.file_name (os.path.basename (prefix), '.html')
+            if language_menu != '':
+                language_menu += ', '
+            language_menu += '<a href="%s">%s</a>' % (lang_file, t (lang.name))
+        if target == 'offline':
+            browser_language = ''
+        elif target == 'online':
+            browser_language = t (browser_language) % browser_language_url
+        if language_menu:
+            language_available = t (language_available) % language_menu
+            languages = LANGUAGES_TEMPLATE % vars ()
+        # put language menu before '</body>' and '</html>' tags
+        if re.search ('(?i)</body', page_flavors[k][1]):
+            page_flavors[k][1] = re.sub ('(?i)</body>', languages + '</BODY>', page_flavors[k][1], 1)
+        elif re.search ('(?i)</html', page_flavors[k][1]):
+            page_flavors[k][1] = re.sub ('(?i)</html>', languages + '</HTML>', page_flavors[k][1], 1)
+        else:
+            page_flavors[k][1] += languages
     return page_flavors
 
 
-def add_html_footer (package_name = '',
+def add_html_footer (translation,
+                     package_name = '',
                      package_version = '',
                      target = 'offline',
                      name_filter = lambda s: s):
     """Add header, footer to a number of HTML files
 
     Arguments:
+     translation               gettext translations dictionary, with language codes as keys
      package_name=NAME         set package_name to NAME
      package_version=VERSION   set package version to VERSION
      targets=offline|online    set page processing depending on the target
@@ -218,9 +233,9 @@ def add_html_footer (package_name = '',
         mail_address_url= 'mailto:' + mail_address
 
     versiontup = package_version.split ('.')
-    branch_str = 'stable-branch'
+    branch_str = _('stable-branch')
     if int ( versiontup[1]) %  2:
-        branch_str = 'development-branch'
+        branch_str = _('development-branch')
 
     for prefix, ext_list in pages_dict.items ():
         for lang_ext in ext_list:
@@ -240,20 +255,20 @@ def add_html_footer (package_name = '',
                 available, missing = find_translations (prefix, lang_ext)
                 page_flavors = process_links (s, prefix, lang_ext, file_name, missing, target)
                 # Add menu after stripping: must not have autoselection for language menu.
-                page_flavors = add_menu (page_flavors, prefix, available)
-            # urg, this stuff is oudated and seems useless, let's disable it
+                page_flavors = add_menu (page_flavors, prefix, available, translation)
+            # urg, this stuff is outdated and seems useless, let's disable it
             #else:
             #    for e in [l.webext for l in langdefs.LANGUAGES]:
             #        if not e in pages_dict[prefix]:
             #            page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = s
-
             subst = globals ()
             subst.update (locals())
             for k in page_flavors.keys():
-                page_flavors[k] = page_flavors[k] % subst
-
+                for name in subst.keys():
+                    subst[name] = translation[page_flavors[k][0]] (subst[name])
+                page_flavors[k][1] = page_flavors[k][1] % subst
                 out_f = open (name_filter (k), 'w')
-                out_f.write (page_flavors[k])
+                out_f.write (page_flavors[k][1])
                 out_f.close()
         # if the page is translated, a .en.html symlink is necessary for content negotiation
         if target == 'online' and ext_list != ['']:
index 993398e002e14f3710003c8665bc2bdc1f875c51..47f53c9b3cc25e0698e38508cff90d2b40d79277 100644 (file)
@@ -4,6 +4,9 @@
 Documentation i18n module
 """
 
+def _ (s):
+    return s
+
 def lang_file_name (p, langext, ext):
     if langext != '':
         return p + '.' + langext + ext
@@ -28,8 +31,8 @@ class LanguageDef:
 # here. For each 'Documentation/ab' directory containing docs
 # translated in 'ab', there should be an entry in LANGUAGES.
 
-site = LanguageDef ('en', 'English', webext='')
-fr = LanguageDef ('fr', 'French', double_punct_char_sep='&nbsp;')
+site = LanguageDef ('en', _('English'), webext='')
+fr = LanguageDef ('fr', _('French'), double_punct_char_sep='&nbsp;')
 #nl = LanguageDef ('nl', 'Nederlands')
 
 # Outdated or broken translations may be disabled
@@ -41,7 +44,6 @@ LANGUAGES = (site, fr)
 if __name__ == '__main__':
     print ' '.join ([l.code for l in LANGUAGES if l.enabled and l.code != 'en'])
 else:
-    import gettext
     LANGDICT = {}
     for l in LANGUAGES:
         LANGDICT[l.code] = l
index 09ae7b80fb42f67929bfea59d0ad7e67a285b0b0..6dded57b341238cd99fdded2875c7a16f1c4b3cb 100644 (file)
@@ -78,10 +78,21 @@ if 'online' in targets:
     f.write ('#.htaccess\nDirectoryIndex index\n')
     f.close ()
 
+# load gettext messages catalogs
+t = {}
+localedir = os.path.join (buildscript_dir, '../Documentation/po', outdir)
+for l in langdefs.LANGUAGES:
+    if l.enabled and l.code != 'en':
+        try:
+            t[l.code] = gettext.translation('lilypond-doc', localedir, [l.code]).gettext
+        except:
+            t[l.code] = lambda s: s
+
 add_html_footer.build_pages_dict (html_files)
 for t in targets:
     sys.stderr.write ("Processing HTML pages for %s target...\n" % t)
     add_html_footer.add_html_footer (
+        translation = t
         package_name = package_name,
         package_version = package_version,
         target = t,