sentence

package module
v0.0.0-...-096e739 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2023 License: MIT Imports: 9 Imported by: 0

README

sentence Go Reference Go Report Card

Библиотека для добавления вариативности текстовым сообщениям. Также содержит функции для согласования слов с числительными. Основана на text/template, все возможности этого пакета доступны в шаблонах.

Функции

plural приниает число для согласования и строку либо слайс с возможными формами слова

pluraln аналогична plural, в вывод добавляется число с которым происходит согласование

any выбирает случайный элемент из строки или слайса

anyf выбирает случайный элемент из нескольких переданных значений (например, полей структуры)

Пример
package main

import (
	"fmt"

	"github.com/azzzak/sentence"
)

var dec = func(n int) int {
	return n - 1
}

var templ = "{{pluraln .Bottles `бутылка|бутылки|бутылок`}} пива {{plural .Bottles .Forms}} на столе, одна из них {{any `упала|разбилась|грохнулась`}} и их осталось {{decrease .Bottles}}"

func main() {
	s, err := sentence.New(sentence.WithFunc("decrease", dec))
	if err != nil {
		panic(err)
	}

	for i := 99; i > 90; i-- {
		msg := s.MustRender(templ, struct {
			Bottles int
			Forms   []string
		}{
			Bottles: i,
			Forms:   []string{"стояла", "стояли", "стояло"},
		})

		fmt.Println(msg)
	}
}

Вариант вывода:

99 бутылок пива стояло на столе, одна из них упала и их осталось 98
98 бутылок пива стояло на столе, одна из них грохнулась и их осталось 97
97 бутылок пива стояло на столе, одна из них разбилась и их осталось 96
96 бутылок пива стояло на столе, одна из них грохнулась и их осталось 95
95 бутылок пива стояло на столе, одна из них упала и их осталось 94
94 бутылки пива стояли на столе, одна из них разбилась и их осталось 93
93 бутылки пива стояли на столе, одна из них грохнулась и их осталось 92
92 бутылки пива стояли на столе, одна из них разбилась и их осталось 91
91 бутылка пива стояла на столе, одна из них упала и их осталось 90
Опции

Передаются при создании нового объекта.

WithLang(string) язык согласования с числом, возможные значение "en" и "ru", по умолчанию "ru"

WithDelim(string) разделитель слов в строке, по умолчанию "|"

WithFunc(string, interface{}) возможность определить собственную функцию для использования в шаблонах

WithMapSize(int) исходный размер мапы для хранения шаблонов после парсинга, по умолчанию 10

Работа с шаблонами

При первом вызове шаблона, происходит его парсинг. Результат помещается в мапу для ускорения последующих операций с этим шаблоном. Для ускорения первого вызова шаблона можно заполнить мапу заранее с помощью метода Prepare(...string). Метод принимают текст шаблона, который служит ключом для поиска бинарной версии шаблона в мапе. Этот подход также поззволяет выявить некорректно составленные шаблоны на раннем этапе.

Documentation

Index

Constants

View Source
const (
	LangEnglish string = "en"
	LangRussian string = "ru"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Option

type Option func(options *options) error

func WithDelim

func WithDelim(delim string) Option

WithDelim задает разделитель элементов в строке. Значение по умолчанию "|".

func WithFunc

func WithFunc(name string, fn interface{}) Option

WithFunc передает собственную функцию, которая может быть использована в шаблонах.

func WithLang

func WithLang(lang string) Option

WithLang задает язык для согласования с числом. Значение по умолчанию "ru".

func WithMapSize

func WithMapSize(size int) Option

WithMapSize задает первоначальный размер мапы для кэша. Значение по умолчанию 10.

type Sentence

type Sentence struct {
	// contains filtered or unexported fields
}

func New

func New(opts ...Option) (*Sentence, error)

New создает новый объект. Использовать безопасно в разных горутинах.

func (*Sentence) MustRender

func (s *Sentence) MustRender(pattern string, data interface{}) string

MustRender производит насыщение шаблона данными. В случае ошибки вызывается panic.

func (*Sentence) Prepare

func (s *Sentence) Prepare(patterns ...string) error

Prepare служит для предварительного заполнения кэша данными.

func (*Sentence) Render

func (s *Sentence) Render(pattern string, data interface{}) (string, error)

Render производит насыщение шаблона данными.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL