Some checks failed
cache-seeder / prune (push) Has been skipped
cache-seeder / frontend (push) Failing after 3s
cache-seeder / python (push) Failing after 3s
cache-seeder / gobuild (push) Failing after 4s
cache-seeder / lint (bindata, lint-backend) (push) Failing after 3s
giteabot backport / giteabot (push) Has been skipped
giteabot / giteabot (push) Has been skipped
cache-prune / prune (push) Has been skipped
release-nightly-snapcraft / build-and-publish (ubuntu-24.04) (push) Has been cancelled
release-nightly-snapcraft / build-and-publish (ubuntu-24.04-arm) (push) Has been cancelled
release-nightly / nightly-binary (push) Has been cancelled
release-nightly / nightly-container (push) Has been cancelled
cron-renovate / cron-renovate (push) Has been skipped
63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package i18n
|
|
|
|
import (
|
|
"html/template"
|
|
"io"
|
|
)
|
|
|
|
var DefaultLocales = NewLocaleStore()
|
|
|
|
type Locale interface {
|
|
// TrString translates a given key and arguments for a language
|
|
TrString(trKey string, trArgs ...any) string
|
|
// TrHTML translates a given key and arguments for a language, string arguments are escaped to HTML
|
|
TrHTML(trKey string, trArgs ...any) template.HTML
|
|
// HasKey reports if a locale has a translation for a given key
|
|
HasKey(trKey string) bool
|
|
}
|
|
|
|
// LocaleTranslation represents an interface to translation
|
|
type LocaleTranslation interface {
|
|
Language() string
|
|
HasKey(trKey string) bool
|
|
TrString(string, ...any) string
|
|
|
|
Tr(key string, args ...any) template.HTML
|
|
TrN(cnt any, key1, keyN string, args ...any) template.HTML
|
|
|
|
PrettyNumber(v any) string
|
|
}
|
|
|
|
// LocaleStore provides the functions common to all locale stores
|
|
type LocaleStore interface {
|
|
io.Closer
|
|
|
|
// SetDefaultLang sets the default language to fall back to
|
|
SetDefaultLang(lang string)
|
|
// ListLangNameDesc provides paired slices of language names to descriptors
|
|
ListLangNameDesc() (names, desc []string)
|
|
// Locale return the locale for the provided language or the default language if not found
|
|
Locale(langName string) (Locale, bool)
|
|
// HasLang returns whether a given language is present in the store
|
|
HasLang(langName string) bool
|
|
// AddLocaleByJSON adds a new language to the store
|
|
AddLocaleByJSON(langName, langDesc string, source, moreSource []byte) error
|
|
}
|
|
|
|
// ResetDefaultLocales resets the current default locales
|
|
// NOTE: this is not synchronized
|
|
func ResetDefaultLocales() {
|
|
if DefaultLocales != nil {
|
|
_ = DefaultLocales.Close()
|
|
}
|
|
DefaultLocales = NewLocaleStore()
|
|
}
|
|
|
|
// GetLocale returns the locale from the default locales
|
|
func GetLocale(lang string) (Locale, bool) {
|
|
return DefaultLocales.Locale(lang)
|
|
}
|