gettext in string.templates

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schurmak
User
Beiträge: 2
Registriert: Montag 19. Februar 2018, 09:21

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
schurmak
User
Beiträge: 2
Registriert: Montag 19. Februar 2018, 09:21

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
Antworten