mirror of
https://github.com/jeremyd/ergo.git
synced 2026-07-27 17:28:11 -07:00
Update translation framework, add badge to readme
This commit is contained in:
+54
-5
@@ -7,6 +7,7 @@ package irc
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -496,16 +497,18 @@ func LoadConfig(filename string) (config *Config, err error) {
|
||||
continue
|
||||
}
|
||||
|
||||
// only load .lang.yaml files
|
||||
// only load core .lang.yaml files, and ignore help/irc files
|
||||
name := f.Name()
|
||||
if !strings.HasSuffix(strings.ToLower(name), ".lang.yaml") {
|
||||
lowerName := strings.ToLower(name)
|
||||
if !strings.HasSuffix(lowerName, ".lang.yaml") {
|
||||
continue
|
||||
}
|
||||
// don't load our example file in practice
|
||||
if strings.ToLower(name) == "example.lang.yaml" {
|
||||
// don't load our example files in practice
|
||||
if strings.HasPrefix(lowerName, "example") {
|
||||
continue
|
||||
}
|
||||
|
||||
// load core info file
|
||||
data, err = ioutil.ReadFile(filepath.Join(config.Languages.Path, name))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not load language file [%s]: %s", name, err.Error())
|
||||
@@ -516,6 +519,52 @@ func LoadConfig(filename string) (config *Config, err error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not parse language file [%s]: %s", name, err.Error())
|
||||
}
|
||||
langInfo.Translations = make(map[string]string)
|
||||
|
||||
// load actual translation files
|
||||
var tlList map[string]string
|
||||
|
||||
// load irc strings file
|
||||
ircName := strings.TrimSuffix(name, ".lang.yaml") + "-irc.lang.json"
|
||||
|
||||
data, err = ioutil.ReadFile(filepath.Join(config.Languages.Path, ircName))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not load language's irc file [%s]: %s", ircName, err.Error())
|
||||
}
|
||||
|
||||
err = json.Unmarshal(data, &tlList)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not parse language's irc file [%s]: %s", ircName, err.Error())
|
||||
}
|
||||
|
||||
for key, value := range tlList {
|
||||
// because of how crowdin works, this is how we skip untranslated lines
|
||||
if key == value {
|
||||
continue
|
||||
}
|
||||
langInfo.Translations[key] = value
|
||||
}
|
||||
|
||||
// load help strings file
|
||||
helpName := strings.TrimSuffix(name, ".lang.yaml") + "-help.lang.json"
|
||||
|
||||
data, err = ioutil.ReadFile(filepath.Join(config.Languages.Path, helpName))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not load language's help file [%s]: %s", helpName, err.Error())
|
||||
}
|
||||
|
||||
err = json.Unmarshal(data, &tlList)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Could not parse language's help file [%s]: %s", helpName, err.Error())
|
||||
}
|
||||
|
||||
for key, value := range tlList {
|
||||
// because of how crowdin works, this is how we skip untranslated lines
|
||||
if key == value {
|
||||
continue
|
||||
}
|
||||
langInfo.Translations[key] = value
|
||||
}
|
||||
|
||||
// confirm that values are correct
|
||||
if langInfo.Code == "en" {
|
||||
@@ -527,7 +576,7 @@ func LoadConfig(filename string) (config *Config, err error) {
|
||||
}
|
||||
|
||||
if len(langInfo.Translations) == 0 {
|
||||
return nil, fmt.Errorf("Language file [%s] contains no translations", name)
|
||||
return nil, fmt.Errorf("Language [%s / %s] contains no translations", langInfo.Code, langInfo.Name)
|
||||
}
|
||||
|
||||
// check for duplicate languages
|
||||
|
||||
+2
-2
@@ -372,10 +372,10 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
|
||||
var snoDescription string
|
||||
if durationIsUsed {
|
||||
client.Notice(fmt.Sprintf("Added temporary (%s) D-Line for %s", duration.String(), hostString))
|
||||
client.Notice(fmt.Sprintf(client.t("Added temporary (%s) D-Line for %s"), duration.String(), hostString))
|
||||
snoDescription = fmt.Sprintf(ircfmt.Unescape("%s [%s]$r added temporary (%s) D-Line for %s"), client.nick, operName, duration.String(), hostString)
|
||||
} else {
|
||||
client.Notice(fmt.Sprintf("Added D-Line for %s", hostString))
|
||||
client.Notice(fmt.Sprintf(client.t("Added D-Line for %s"), hostString))
|
||||
snoDescription = fmt.Sprintf(ircfmt.Unescape("%s [%s]$r added D-Line for %s"), client.nick, operName, hostString)
|
||||
}
|
||||
server.snomasks.Send(sno.LocalXline, snoDescription)
|
||||
|
||||
+9
-1
@@ -34,7 +34,15 @@ func NewLanguageManager(defaultLang string, languageData map[string]LangData) *L
|
||||
// load language data
|
||||
for name, data := range languageData {
|
||||
lm.Info[name] = data
|
||||
lm.translations[name] = data.Translations
|
||||
|
||||
// make sure we don't include empty translations
|
||||
lm.translations[name] = make(map[string]string)
|
||||
for key, value := range data.Translations {
|
||||
if strings.TrimSpace(value) == "" {
|
||||
continue
|
||||
}
|
||||
lm.translations[name][key] = value
|
||||
}
|
||||
}
|
||||
|
||||
return &lm
|
||||
|
||||
+20
-12
@@ -2235,7 +2235,7 @@ func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool
|
||||
}
|
||||
|
||||
var (
|
||||
infoString = strings.Split(` ▄▄▄ ▄▄▄· ▄▄ • ▐ ▄
|
||||
infoString1 = strings.Split(` ▄▄▄ ▄▄▄· ▄▄ • ▐ ▄
|
||||
▪ ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪ •█▌▐█▪
|
||||
▄█▀▄ ▐▀▀▄ ▄█▀▀█ ▄█ ▀█▄ ▄█▀▄▪▐█▐▐▌ ▄█▀▄
|
||||
▐█▌.▐▌▐█•█▌▐█ ▪▐▌▐█▄▪▐█▐█▌ ▐▌██▐█▌▐█▌.▐▌
|
||||
@@ -2243,17 +2243,11 @@ var (
|
||||
|
||||
https://oragono.io/
|
||||
https://github.com/oragono/oragono
|
||||
|
||||
Oragono is released under the MIT license.
|
||||
|
||||
Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on <3
|
||||
|
||||
Core Developers:
|
||||
Daniel Oakley, DanielOaks, <daniel@danieloaks.net>
|
||||
`, "\n")
|
||||
infoString2 = strings.Split(` Daniel Oakley, DanielOaks, <daniel@danieloaks.net>
|
||||
Shivaram Lingamneni, slingamn, <slingamn@cs.stanford.edu>
|
||||
|
||||
Contributors and Former Developers:
|
||||
3onyc
|
||||
`, "\n")
|
||||
infoString3 = strings.Split(` 3onyc
|
||||
Edmund Huber
|
||||
Euan Kemp (euank)
|
||||
Jeremy Latt
|
||||
@@ -2267,7 +2261,21 @@ Contributors and Former Developers:
|
||||
)
|
||||
|
||||
func infoHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
||||
for _, line := range infoString {
|
||||
// we do the below so that the human-readable lines in info can be translated.
|
||||
for _, line := range infoString1 {
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, line)
|
||||
}
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, client.t("Oragono is released under the MIT license."))
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, "")
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, client.t("Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on <3"))
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, "")
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, client.t("Core Developers:"))
|
||||
for _, line := range infoString2 {
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, line)
|
||||
}
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, "")
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, client.t("Contributors and Former Developers:"))
|
||||
for _, line := range infoString3 {
|
||||
client.Send(nil, server.name, RPL_INFO, client.nick, line)
|
||||
}
|
||||
client.Send(nil, server.name, RPL_ENDOFINFO, client.nick, "End of /INFO")
|
||||
|
||||
Reference in New Issue
Block a user