/*
SGBlog -- Git-backed CGI/UCSPI blogging/phlogging/gemlogging engine
-Copyright (C) 2020-2022 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2020-2023 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
import (
"crypto/sha1"
+ "embed"
"encoding/json"
"flag"
"fmt"
- "io/ioutil"
+ "io/fs"
"log"
+ "os"
"regexp"
"strings"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
"github.com/hjson/hjson-go"
+ "github.com/vorlif/spreak"
+ "golang.org/x/text/language"
)
const (
commentsTree *object.Tree
topicsRef *plumbing.Reference
topicsTree *object.Tree
+
+ localizer *spreak.Localizer
+
+ //go:embed locale/*
+ locales embed.FS
)
type Cfg struct {
GitPath string
Branch string
Title string
+ Lang string
URLPrefix string
TopicsCachePath string
GopherDomain string
+
+ ImgPath string
+ ImgDomain string
}
func msgSplit(msg string) []string {
}
func readCfg(cfgPath string) (*Cfg, error) {
- cfgRaw, err := ioutil.ReadFile(cfgPath)
+ cfgRaw, err := os.ReadFile(cfgPath)
if err != nil {
return nil, err
}
return cfg, nil
}
+func initLocalizer(lang string) {
+ fsys, _ := fs.Sub(locales, "locale")
+ bundle, err := spreak.NewBundle(
+ spreak.WithSourceLanguage(language.English),
+ spreak.WithDomainFs(spreak.NoDomain, fsys),
+ spreak.WithLanguage(language.Russian),
+ )
+ if err != nil {
+ log.Fatalln(err)
+ }
+ if lang == "" {
+ lang = language.English.String()
+ }
+ localizer = spreak.NewLocalizer(bundle, language.MustParse(lang))
+}
+
func main() {
gopherCfgPath := flag.String("gopher", "", "Path to gopher-related configuration file")
geminiCfgPath := flag.String("gemini", "", "Path to gemini-related configuration file")