mirror of
				https://github.com/containers/podman.git
				synced 2025-11-01 02:42:11 +08:00 
			
		
		
		
	 069edc3adf
			
		
	
	069edc3adf
	
	
	
		
			
			(podman push) and (podman manifest push) now support --sign-by-sigstore=param-file, using the containers-sigstore-signing-params.yaml(5) file format. That notably adds support for Fulcio and Rekor signing. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ut
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/go-playground/locales"
 | |
| )
 | |
| 
 | |
| // UniversalTranslator holds all locale & translation data
 | |
| type UniversalTranslator struct {
 | |
| 	translators map[string]Translator
 | |
| 	fallback    Translator
 | |
| }
 | |
| 
 | |
| // New returns a new UniversalTranslator instance set with
 | |
| // the fallback locale and locales it should support
 | |
| func New(fallback locales.Translator, supportedLocales ...locales.Translator) *UniversalTranslator {
 | |
| 
 | |
| 	t := &UniversalTranslator{
 | |
| 		translators: make(map[string]Translator),
 | |
| 	}
 | |
| 
 | |
| 	for _, v := range supportedLocales {
 | |
| 
 | |
| 		trans := newTranslator(v)
 | |
| 		t.translators[strings.ToLower(trans.Locale())] = trans
 | |
| 
 | |
| 		if fallback.Locale() == v.Locale() {
 | |
| 			t.fallback = trans
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if t.fallback == nil && fallback != nil {
 | |
| 		t.fallback = newTranslator(fallback)
 | |
| 	}
 | |
| 
 | |
| 	return t
 | |
| }
 | |
| 
 | |
| // FindTranslator trys to find a Translator based on an array of locales
 | |
| // and returns the first one it can find, otherwise returns the
 | |
| // fallback translator.
 | |
| func (t *UniversalTranslator) FindTranslator(locales ...string) (trans Translator, found bool) {
 | |
| 
 | |
| 	for _, locale := range locales {
 | |
| 
 | |
| 		if trans, found = t.translators[strings.ToLower(locale)]; found {
 | |
| 			return
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return t.fallback, false
 | |
| }
 | |
| 
 | |
| // GetTranslator returns the specified translator for the given locale,
 | |
| // or fallback if not found
 | |
| func (t *UniversalTranslator) GetTranslator(locale string) (trans Translator, found bool) {
 | |
| 
 | |
| 	if trans, found = t.translators[strings.ToLower(locale)]; found {
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	return t.fallback, false
 | |
| }
 | |
| 
 | |
| // GetFallback returns the fallback locale
 | |
| func (t *UniversalTranslator) GetFallback() Translator {
 | |
| 	return t.fallback
 | |
| }
 | |
| 
 | |
| // AddTranslator adds the supplied translator, if it already exists the override param
 | |
| // will be checked and if false an error will be returned, otherwise the translator will be
 | |
| // overridden; if the fallback matches the supplied translator it will be overridden as well
 | |
| // NOTE: this is normally only used when translator is embedded within a library
 | |
| func (t *UniversalTranslator) AddTranslator(translator locales.Translator, override bool) error {
 | |
| 
 | |
| 	lc := strings.ToLower(translator.Locale())
 | |
| 	_, ok := t.translators[lc]
 | |
| 	if ok && !override {
 | |
| 		return &ErrExistingTranslator{locale: translator.Locale()}
 | |
| 	}
 | |
| 
 | |
| 	trans := newTranslator(translator)
 | |
| 
 | |
| 	if t.fallback.Locale() == translator.Locale() {
 | |
| 
 | |
| 		// because it's optional to have a fallback, I don't impose that limitation
 | |
| 		// don't know why you wouldn't but...
 | |
| 		if !override {
 | |
| 			return &ErrExistingTranslator{locale: translator.Locale()}
 | |
| 		}
 | |
| 
 | |
| 		t.fallback = trans
 | |
| 	}
 | |
| 
 | |
| 	t.translators[lc] = trans
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // VerifyTranslations runs through all locales and identifies any issues
 | |
| // eg. missing plural rules for a locale
 | |
| func (t *UniversalTranslator) VerifyTranslations() (err error) {
 | |
| 
 | |
| 	for _, trans := range t.translators {
 | |
| 		err = trans.VerifyTranslations()
 | |
| 		if err != nil {
 | |
| 			return
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return
 | |
| }
 |