Seite 1 von 1

gettext in string.templates

Verfasst: Montag 19. Februar 2018, 09:43
von schurmak
Guten Tag miteinander

Nun, ich bin ein ziemlicher Anfänger und versuche mich gerade in Python einzuarbeiten.
Von daher bin ich nur etwas am rumspielen und testen. Für die meisten Stolpersteine gibt es ja genügend Hinweise im Netz unter anderem in diesem Forum, danke dafür :) Nun bin ich auf ein Problem gestossen das ich einfach nicht lösen kann.

Um die Sprache zu lernen, versuche ich, etwas von Grund auf selbst zu machen, auch wenn es dafür sicher einfachere Lösungen gäbe. So bin ich im Moment dabei über "string templates" HTML Templates einzulesen. Ein Ausschnitt aus dem Code, zum hoffentlich besseren Verständnis.

Code: Alles auswählen

	from string import Template
	...
	indexTemplate = open(path + "/templates/frame.html", "r", encoding='UTF-8')
	indexInhalt = indexTemplate.read()
	template = Template(indexInhalt)
	...
	para = {}
	...
	return [template.safe_substitute(para).encode()]
Nun möchte ich im Template hinterlegte Texte mit gettext Übersetzen. Die Übersetzung funktioniert, mit im Python-Script hinterlegten Strings.

Code: Alles auswählen

    encoding = "utf-8"
    locale_path = path+'/locale/'
    language = gettext.translation ('register', locale_path, ['de_DE'])
    _=language.gettext
    
    mb = btm(_('Dieser Text wird übersetzt'))
Kann mir jemand einen Tipp geben, wie ich die im Template hinterlegten, zu übersetzenden Textteile übersetzen kann? Ich komme da einfach nicht weiter.

Dieses Template sieht z.B. so aus

Code: Alles auswählen

	<div>
		<h5 class="mt-2">_('Beta-Test')</h5>
	</div>
Ich hoffe ich konnte verständlich machen wo ich anstehe und würde mich über Tipps freuen.

Beste Grüsse
Kurt

Re: gettext in string.templates

Verfasst: Montag 19. Februar 2018, 10:36
von Sirius3
@schurmak: das geht nicht. "Funktionsaufrufe" sind innerhalb eines Textstrings einfach nur Text. Du könntest mit `replace` arbeiten, normalerweise hat man aber für das komplette Template eine Übersetzung.

Re: gettext in string.templates

Verfasst: Montag 19. Februar 2018, 11:05
von schurmak
Vielen Dank für die schnelle Antwort. Das habe ich befürchtet, dann werde ich das wohl über die parameter machen.

Code: Alles auswählen

	para = {'name': _('name'),
		('mail':_('mail')
	}
	
	return [template.safe_substitute(para).encode()]
Vielen Dank
Kurt