// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package locale // import "miniflux.app/v2/internal/locale" import "fmt" // Printer converts translation keys to language-specific strings. type Printer struct { language string } // NewPrinter creates a new Printer instance for the given language. func NewPrinter(language string) *Printer { return &Printer{language} } func (p *Printer) Print(key string) string { if dict, err := getTranslationDict(p.language); err == nil { if str, ok := dict.singulars[key]; ok { return str } } return key } // Printf is like fmt.Printf, but using language-specific formatting. func (p *Printer) Printf(key string, args ...any) string { translation := key if dict, err := getTranslationDict(p.language); err == nil { if str, ok := dict.singulars[key]; ok { translation = str } } return fmt.Sprintf(translation, args...) } // Plural returns the translation of the given key by using the language plural form. func (p *Printer) Plural(key string, n int, args ...any) string { dict, err := getTranslationDict(p.language) if err != nil { return key } if choices, found := dict.plurals[key]; found { index := getPluralForm(p.language, n) if len(choices) > index { return fmt.Sprintf(choices[index], args...) } } return key }