Skip to content

Übersetzungen

m.T

m.T(key, default) liefert die Übersetzung zu key oder default, wenn es keine gibt.

go
return msg.Answer(m.T("no_city", "❌ <b>Welche Stadt?</b>"))

Der Standardwert ist kein Platzhalter — er ist der ausgelieferte deutsche bzw. englische Text. Ein Modul ganz ohne Übersetzungsdateien funktioniert einwandfrei; Übersetzungen sind eine Verbesserung.

Immer einen echten Standardtext angeben

m.T("no_city", "") sendet bei fehlendem Schlüssel eine leere Nachricht. Schreib den Satz, den du wirklich haben willst.

Strings deklarieren

Strings ist der Katalog dessen, was dein Modul sagen kann:

go
func (m *Weather) Strings() map[string]string {
	return map[string]string{
		"name":             "Weather",
		"_cls_doc":         "Aktuelles Wetter für eine Stadt",
		"_cmd_doc_weather": "[Stadt] — Wetter anzeigen",
		"no_city":          "❌ <b>Welche Stadt?</b>",
		"not_found":        "❌ <b>Stadt nicht gefunden</b>",
	}
}
PräfixWird angezeigt in
nameModulname in .help
_cls_docModulbeschreibung
_cmd_doc_<cmd>Hilfezeile dieses Befehls
_cfg_<key>Beschreibung dieser Einstellung
alles andereÜberall, wo du m.T aufrufst

Wie ein Schlüssel aufgelöst wird

m.T("no_city", ...) sucht goroku.modules.<Modul>.no_city und probiert den Modulnamen wie geschrieben, kleingeschrieben und in snake_case. Weather trifft damit weather, und APILimiter trifft api_limiter.

Altbestand

Liegen deine Übersetzungen unter einem Namen, der sich nicht aus Name() ableitet, sag es ausdrücklich:

go
func (m *APIProtection) Name() string { return "APILimiter" }

func (m *APIProtection) TranslationAliases() []string {
	return []string{"api_protection"}
}

Aliase werden nach den abgeleiteten Namen probiert.

Interpolation

m.T gibt den String zurück; das Formatieren gehört dir:

go
tpl := m.T("found", "🌤 <b>{}</b>: {}°C")
return msg.Answer(strings.Replace(strings.Replace(tpl, "{}", city, 1), "{}", temp, 1))

Nimm für mehr als einen Wert benannte Platzhalter — Übersetzer stellen Sätze um, und positionsbezogene {} gehen dabei kaputt:

go
tpl := m.T("found", "🌤 <b>{city}</b>: {temp}°C")
out := strings.NewReplacer("{city}", city, "{temp}", temp).Replace(tpl)
return msg.Answer(out)

Escaping

Übersetzter Text ist Telegram-HTML. Escape alles, was von Nutzern eingesetzt wird:

go
import "goroku/goroku/utils"

out := strings.Replace(tpl, "{city}", utils.EscapeHTML(city), 1)

Released under the GNU AGPL v3 License.