Skip to content

Переклади

m.T

m.T(key, default) повертає переклад для key або default, якщо перекладу немає.

go
return msg.Answer(m.T("no_city", "❌ <b>Яке місто?</b>"))

Значення за замовчуванням — не заглушка, а той текст, з яким модуль постачається. Модуль без файлів перекладу працює чудово; переклади — це покращення.

Завжди передавайте справжній текст за замовчуванням

m.T("no_city", "") за відсутності ключа надішле порожнє повідомлення. Пишіть ту фразу, яку справді хочете показати.

Оголошення рядків

Strings — це каталог того, що ваш модуль вміє говорити:

go
func (m *Weather) Strings() map[string]string {
	return map[string]string{
		"name":             "Weather",
		"_cls_doc":         "Погода в місті",
		"_cmd_doc_weather": "[місто] — показати погоду",
		"no_city":          "❌ <b>Яке місто?</b>",
		"not_found":        "❌ <b>Місто не знайдено</b>",
	}
}
ПрефіксДе показується
nameІм'я модуля в .help
_cls_docОпис модуля
_cmd_doc_<cmd>Рядок довідки цієї команди
_cfg_<key>Опис цього налаштування
усе іншеСкрізь, де ви викличете m.T

Як розв'язується ключ

m.T("no_city", ...) шукає goroku.modules.<модуль>.no_city, пробуючи ім'я модуля як написано, у нижньому регістрі та у snake_case. Тому Weather збігається з weather, а APILimiter — з api_limiter.

Застарілі імена

Якщо переклади лежать під іменем, яке не виводиться з Name(), скажіть про це явно:

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

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

Аліаси пробуються після виведених імен.

Підстановка

m.T повертає рядок; форматування — на вас:

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

Для двох і більше значень беріть іменовані плейсхолдери: перекладачі змінюють порядок слів, і позиційні {} при цьому ламаються:

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

Екранування

Перекладений текст — це Telegram HTML. Екранізуйте все, що підставляєте від користувача:

go
import "goroku/goroku/utils"

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

Released under the GNU AGPL v3 License.