Portál AbcLinuxu, 10. května 2025 02:39
print _("Hello "+green("world"))
a chtěl bych, aby v gettext katalogu bylo jen
msgid "Hello world" msgstr "Nazdar světe"Je to nějak možný ? Takhle mám obarveno celkem dost stringů...
print _("Hello %s") %("world")... ale pak by "world" nebylo lokalizovaný, pokud bych ho nedal do katalogu taky... budu muset udělat nějakej kompromis, něco jako obarvovat pouze příkazy, switche atd :)
print _("Hello %s") %(green("world"))
print _(colorize("Hello <green>world</green>"))takže překladatel pak má k překladu celou hlášku a markup zachová. Přičemž _(colorize(...)) může klidně být jedna funkce.
def colorize(text): return text.replace("<green>", "[zelená]").replace("</green>", "[/zelená]")kde to v těch [ ] jsou escape sekvence daných barev... ?
colorize
by provedla parsování těchto řetězců a podle tagů by volala příslušné funkce - čili asi něco jako HTML.
barvy = { '<green>': '\escape sekvence zelené', ... atd }
print colorize(_("Hello <green>world</green>"))je lepší. colorize() může klidně vypadat jako jednoduché nahrazení <green> -> \e[32m, </green> -> \e[0m, etc. (raději ovšem podle termcapu).
def colordict(text): escapes = { '<Cg>': '\x1b[32;01m', '<Cy>': '\x1b[33;01m', '<Cr>': '\x1b[31;01m', '<Cb>': '\x1b[34;01m', '<CB>': '\x1b[01m', '<C/>': '\x1b[39;49;00m' } return escapes[text.group()] def outform(text): p = re.compile(r'<C.>') return p.sub(colordict, text) print outform("Něco <Cr>červenýho<C/>...")
colortags = { '<Cg>': '\x1b[32m', '<Cy>': '\x1b[33;01m', '<Cr>': '\x1b[31;01m', '<Cb>': '\x1b[34;01m', '<CB>': '\x1b[01m', '<C/>': '\x1b[39;49;00m' } def style(text): return re.compile('<C.>').sub(lambda text: colortags[text.group()], text)Slovník s tagy se definuje jen jednou a je to prakticky v jedné funkci :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.