Spaces:
Sleeping
Sleeping
File size: 4,358 Bytes
f65fe85 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# langdefs.py
# -*- coding: utf-8 -*-
#
# This file is part of LilyPond, the GNU music typesetter.
#
# Copyright (C) 2006--2020 John Mandereau <john.mandereau@gmail.com>
#
# LilyPond is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# LilyPond is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
"""
Documentation i18n module
"""
import gettext
import os
import re
import sys
def lang_file_name(p, langext, ext):
if langext != '':
return p + '.' + langext + ext
return p + ext
class LanguageDef:
def __init__(self, code, name, webext=None, html_filter=lambda s: s, enable_ly_identifier_l10n=True):
self.code = code
self.name = name
self.enabled = True
if webext is None:
self.webext = self.code
else:
self.webext = webext
self.html_filter = html_filter
self.enable_ly_identifier_l10n = enable_ly_identifier_l10n
def file_name(self, prefix, ext):
return lang_file_name(prefix, self.webext, ext)
# All language information needed for documentation i18n is defined
# here. For each 'Documentation/ab' directory containing docs
# translated in 'ab', there should be one entry in LANGUAGES.
site = LanguageDef('en', 'English', webext='')
html_body_re = re.compile('<body.*?>', re.I)
html_end_body_re = re.compile('</body>', re.I)
french_html_typo_rules = ((' :', ' :'),
(' ;', ' ;'),
(' ?', '<font size="-4"> </font>?'),
(' !', '<font size="-4"> </font>!'))
def french_html_filter(page):
m = html_body_re.search(page)
if m:
body_begin = m.end()
else:
body_begin = 0
m = html_end_body_re.search(page)
if m:
body_end = m.start()
else:
body_end = len(page)
body = page[body_begin:body_end]
for r in french_html_typo_rules:
body = body.replace(r[0], r[1])
return page[:body_begin] + body + page[body_end:]
ca = LanguageDef('ca', 'Català')
cs = LanguageDef('cs', 'Česky', enable_ly_identifier_l10n=False)
de = LanguageDef('de', 'Deutsch')
es = LanguageDef('es', 'Español')
fr = LanguageDef('fr', 'Français', html_filter = french_html_filter)
hu = LanguageDef('hu', 'Magyar')
it = LanguageDef('it', 'Italiano')
ja = LanguageDef('ja', '日本語', enable_ly_identifier_l10n=False)
nl = LanguageDef('nl', 'Nederlands')
pt = LanguageDef('pt', 'Português')
zh = LanguageDef('zh', '中文', enable_ly_identifier_l10n=False)
# Outdated or broken translations may be disabled
# (please run 'make doc-clean' before doing that):
#fr.enabled = False
LANGUAGES = (site, ca, cs, de, es, fr, hu, it, ja, nl, pt, zh)
WEB_LANGUAGES = (site, ca, cs, de, es, fr, hu, it, ja, nl, pt, zh)
if os.getenv("MAKEWEB") == '1':
LANGUAGES = WEB_LANGUAGES
LANGDICT = {l.code: l for l in LANGUAGES}
non_english_enabled_langs = [
l for l in LANGUAGES if l.enabled and l.code != 'en'
]
# This file needs two modes of operations depending on
# wether it is run directly or imported.
if __name__ == '__main__':
print(' '.join([l.code for l in LANGUAGES if l.enabled]))
else:
translation_fallback = {l.code: (lambda x: x) for l in LANGUAGES}
if 'LYDOC_LOCALEDIR' in os.environ:
localedir = os.environ['LYDOC_LOCALEDIR']
try:
translation = {
l.code: gettext.translation('lilypond-doc',
localedir, [l.code]).gettext
for l in non_english_enabled_langs
}
# TODO: use fallback=True in gettext.translation() ?
except OSError:
sys.stderr.write('langdefs.py: warning: lilypond-doc gettext '
'domain not found.\n')
translation = translation_fallback
else:
translation = translation_fallback
|