mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-27 04:21:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2022 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package i18n
 | |
| 
 | |
| import (
 | |
| 	"html/template"
 | |
| 	"io"
 | |
| )
 | |
| 
 | |
| type (
 | |
| 	PluralFormIndex uint8
 | |
| 	PluralFormRule  func(int64) PluralFormIndex
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	PluralFormZero PluralFormIndex = iota
 | |
| 	PluralFormOne
 | |
| 	PluralFormTwo
 | |
| 	PluralFormFew
 | |
| 	PluralFormMany
 | |
| 	PluralFormOther
 | |
| )
 | |
| 
 | |
| var DefaultLocales = NewLocaleStore()
 | |
| 
 | |
| type Locale interface {
 | |
| 	// TrString translates a given key and arguments for a language
 | |
| 	TrString(trKey string, trArgs ...any) string
 | |
| 	// TrPluralString translates a given pluralized key and arguments for a language.
 | |
| 	// This function returns an error if new-style support for the given key is not available.
 | |
| 	TrPluralString(count any, trKey string, trArgs ...any) template.HTML
 | |
| 	// 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
 | |
| }
 | |
| 
 | |
| // 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
 | |
| 	// AddLocaleByIni adds a new old-style language to the store
 | |
| 	AddLocaleByIni(langName, langDesc string, pluralRule PluralFormRule, source, moreSource []byte) error
 | |
| 	// AddLocaleByJSON adds new-style content to an existing language to the store
 | |
| 	AddToLocaleFromJSON(langName string, source []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)
 | |
| }
 |