From 96b013a38db7d58e5d7c32432d912b6de04d4b35 Mon Sep 17 00:00:00 2001 From: John Mandereau Date: Sat, 24 Feb 2007 12:34:12 +0100 Subject: [PATCH] Gettextize add_html_footer Additionnally, add_html_footer now avoids inserting a duplicate
when copying the navigation bar in HTML Info pages. --- Documentation/po/GNUmakefile | 5 +- buildscripts/add_html_footer.py | 105 ++++++++++++++++++-------------- buildscripts/langdefs.py | 8 ++- buildscripts/www_post.py | 11 ++++ 4 files changed, 80 insertions(+), 49 deletions(-) diff --git a/Documentation/po/GNUmakefile b/Documentation/po/GNUmakefile index 925cb7e5a1..ef93f6aaba 100644 --- a/Documentation/po/GNUmakefile +++ b/Documentation/po/GNUmakefile @@ -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; \ diff --git a/buildscripts/add_html_footer.py b/buildscripts/add_html_footer.py index 3e35952c42..5722bca352 100644 --- a/buildscripts/add_html_footer.py +++ b/buildscripts/add_html_footer.py @@ -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 = '''

-This page is for %(package_name)s-%(package_version)s (%(branch_str)s).
+''' + _ ('This page is for %(package_name)s-%(package_version)s (%(branch_str)s).') + '''

-Report errors to %(mail_address)s.
+''' + _ ('Report errors to %(mail_address)s.') + '''

''' @@ -48,17 +49,17 @@ footer_tag = '' def _ (s): return s -language_available = _ ("Other languages: %s.") % "%(language_menu)s" -browser_language = _ ("Using automatic language selection.") \ - % "/web/about/browser-language" +language_available = _ ("Other languages: %s.") +browser_language = _ ('About automatic language selection.') +browser_language_url = "/web/about/browser-language" -LANGUAGES_TEMPLATE = '''\ +LANGUAGES_TEMPLATE = '''

%(language_available)s
%(browser_language)s

-''' % vars () +''' html_re = re.compile ('(.*?)(?:[.]([^/.]*))?[.]html$') @@ -87,7 +88,7 @@ def add_header (s): s = re.sub ('(?i)', body, s) if re.search ('(?i)]*>', body + header, s, 1) - elif re.search ('(?i)', '' + header, s, 1) else: s = header + s @@ -114,6 +115,7 @@ def add_title (s): return s info_nav_bar = re.compile (r'
\s*

\s*(.+?)


\s*
', re.M | re.S) +info_footnote_hr = re.compile (r'
\s*()?\s*', 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 = '

\n
\n

' + m.group (1) + '

\n' + footer + # avoid duplicate
in case there are footnotes at the end of the Info HTML page + if info_footnote_hr.search (s): + custom_footer = '
\n

' + m.group (1) + '

\n' + footer + else: + custom_footer = '

\n
\n

' + m.group (1) + '

\n' + footer else: custom_footer = footer if re.search ('(?i)
' and '' tags +def add_menu (page_flavors, prefix, available, target, translation): for k in page_flavors.keys(): - if re.search ('(?i)', languages + '', page_flavors[k], 1) - elif re.search ('(?i)', languages + '', 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 += '%s' % (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 '' and '' tags + if re.search ('(?i)', languages + '', page_flavors[k][1], 1) + elif re.search ('(?i)', languages + '', 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 != ['']: diff --git a/buildscripts/langdefs.py b/buildscripts/langdefs.py index 993398e002..47f53c9b3c 100644 --- a/buildscripts/langdefs.py +++ b/buildscripts/langdefs.py @@ -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=' ') +site = LanguageDef ('en', _('English'), webext='') +fr = LanguageDef ('fr', _('French'), double_punct_char_sep=' ') #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 diff --git a/buildscripts/www_post.py b/buildscripts/www_post.py index 09ae7b80fb..6dded57b34 100644 --- a/buildscripts/www_post.py +++ b/buildscripts/www_post.py @@ -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, -- 2.39.2