printer.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package locale // import "miniflux.app/v2/internal/locale"
  4. import "fmt"
  5. // Printer converts translation keys to language-specific strings.
  6. type Printer struct {
  7. language string
  8. }
  9. // NewPrinter creates a new Printer instance for the given language.
  10. func NewPrinter(language string) *Printer {
  11. return &Printer{language}
  12. }
  13. func (p *Printer) Print(key string) string {
  14. if dict, err := getTranslationDict(p.language); err == nil {
  15. if str, ok := dict.singulars[key]; ok {
  16. return str
  17. }
  18. }
  19. return key
  20. }
  21. // Printf is like fmt.Printf, but using language-specific formatting.
  22. func (p *Printer) Printf(key string, args ...any) string {
  23. translation := key
  24. if dict, err := getTranslationDict(p.language); err == nil {
  25. if str, ok := dict.singulars[key]; ok {
  26. translation = str
  27. }
  28. }
  29. return fmt.Sprintf(translation, args...)
  30. }
  31. // Plural returns the translation of the given key by using the language plural form.
  32. func (p *Printer) Plural(key string, n int, args ...any) string {
  33. dict, err := getTranslationDict(p.language)
  34. if err != nil {
  35. return key
  36. }
  37. if choices, found := dict.plurals[key]; found {
  38. index := getPluralForm(p.language, n)
  39. if len(choices) > index {
  40. return fmt.Sprintf(choices[index], args...)
  41. }
  42. }
  43. return key
  44. }