2022-04-03 11:46:48 +02:00
|
|
|
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package i18n
|
|
|
|
|
|
|
|
import (
|
2022-08-28 11:43:25 +02:00
|
|
|
"io"
|
2022-04-03 11:46:48 +02:00
|
|
|
)
|
|
|
|
|
2022-08-28 11:43:25 +02:00
|
|
|
var DefaultLocales = NewLocaleStore()
|
2022-07-04 12:17:09 +02:00
|
|
|
|
2022-08-28 11:43:25 +02:00
|
|
|
type Locale interface {
|
|
|
|
// Tr translates a given key and arguments for a language
|
|
|
|
Tr(trKey string, trArgs ...interface{}) string
|
|
|
|
// Has reports if a locale has a translation for a given key
|
|
|
|
Has(trKey string) bool
|
2022-06-26 16:19:22 +02:00
|
|
|
}
|
2022-04-03 11:46:48 +02:00
|
|
|
|
2022-08-28 11:43:25 +02:00
|
|
|
// LocaleStore provides the functions common to all locale stores
|
|
|
|
type LocaleStore interface {
|
|
|
|
io.Closer
|
2022-07-04 12:17:09 +02:00
|
|
|
|
2022-08-28 11:43:25 +02:00
|
|
|
// Tr translates a given key and arguments for a language
|
|
|
|
Tr(lang, trKey string, trArgs ...interface{}) string
|
|
|
|
// Has reports if a locale has a translation for a given key
|
|
|
|
Has(lang, trKey string) bool
|
|
|
|
// 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
|
|
|
|
// AddLocaleByIni adds a new language to the store
|
|
|
|
AddLocaleByIni(langName, langDesc string, source interface{}) error
|
2022-04-03 11:46:48 +02:00
|
|
|
}
|
|
|
|
|
2022-06-26 16:19:22 +02:00
|
|
|
// ResetDefaultLocales resets the current default locales
|
|
|
|
// NOTE: this is not synchronized
|
2022-08-28 11:43:25 +02:00
|
|
|
func ResetDefaultLocales() {
|
|
|
|
if DefaultLocales != nil {
|
|
|
|
_ = DefaultLocales.Close()
|
|
|
|
}
|
|
|
|
DefaultLocales = NewLocaleStore()
|
2022-04-03 11:46:48 +02:00
|
|
|
}
|
|
|
|
|
2022-08-28 11:43:25 +02:00
|
|
|
// GetLocales returns the locale from the default locales
|
|
|
|
func GetLocale(lang string) (Locale, bool) {
|
|
|
|
return DefaultLocales.Locale(lang)
|
2022-04-03 11:46:48 +02:00
|
|
|
}
|