go_games_collection/i18n.go

56 lines
2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import "fmt"
// Lang — язык интерфейса.
type Lang int
const (
LangRU Lang = iota
LangEN
)
// currentLang — текущий выбранный язык интерфейса. Пакетный
// уровень оправдан тем, что приложение однопоточное (TUI обновляется
// строго последовательно через Bubble Tea), а язык выбирается один
// раз в начале (см. экран выбора языка в menu.go) и меняется только
// через явное действие пользователя.
var currentLang = LangRU
// SetLanguage устанавливает текущий язык интерфейса.
func SetLanguage(l Lang) {
currentLang = l
}
// CurrentLang возвращает текущий язык интерфейса.
func CurrentLang() Lang {
return currentLang
}
// translationEntry — пара переводов одного ключа.
type translationEntry struct {
ru string
en string
}
// T возвращает перевод строки по ключу key на текущем языке. Если
// ключ не найден в таблице translations — возвращается сам ключ
// (это осознанный "мягкий" фолбэк: пропущенный перевод не ломает
// интерфейс, а просто виден как есть, что легко заметить и
// исправить).
func T(key string) string {
if e, ok := translations[key]; ok {
if CurrentLang() == LangEN {
return e.en
}
return e.ru
}
return key
}
// Tf — то же самое, что T, но для строк-форматов (используются как
// первый аргумент fmt.Sprintf): сначала переводится сам формат,
// затем в него подставляются аргументы.
func Tf(key string, args ...interface{}) string {
return fmt.Sprintf(T(key), args...)
}