From c6b9fe021848ea2965527090280db13a5ec2dea2 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Tue, 19 Feb 2019 02:54:57 -0500 Subject: [PATCH 01/99] fix #384 --- irc/client.go | 2 +- irc/config.go | 122 ++------------------------ irc/getters.go | 25 +++++- irc/handlers.go | 38 ++++---- irc/help.go | 63 ++++++++------ irc/languages/languages.go | 172 ++++++++++++++++++++++++++++--------- irc/server.go | 45 +++------- 7 files changed, 224 insertions(+), 243 deletions(-) diff --git a/irc/client.go b/irc/client.go index af91f03e..99d8df2e 100644 --- a/irc/client.go +++ b/irc/client.go @@ -131,6 +131,7 @@ func NewClient(server *Server, conn net.Conn, isTLS bool) { channels: make(ChannelSet), ctime: now, flags: modes.NewModeSet(), + languages: server.Languages().Default(), loginThrottle: connection_limits.GenericThrottle{ Duration: config.Accounts.LoginThrottling.Duration, Limit: config.Accounts.LoginThrottling.MaxAttempts, @@ -143,7 +144,6 @@ func NewClient(server *Server, conn net.Conn, isTLS bool) { nickMaskString: "*", // * is used until actual nick is given history: history.NewHistoryBuffer(config.History.ClientLength), } - client.languages = server.languages.Default() remoteAddr := conn.RemoteAddr() client.realIP = utils.AddrToIP(remoteAddr) diff --git a/irc/config.go b/irc/config.go index 112a5387..7adbe678 100644 --- a/irc/config.go +++ b/irc/config.go @@ -7,13 +7,11 @@ package irc import ( "crypto/tls" - "encoding/json" "fmt" "io/ioutil" "log" "net" "os" - "path/filepath" "regexp" "strings" "time" @@ -283,9 +281,10 @@ type Config struct { Enabled bool Path string Default string - Data map[string]languages.LangData } + languageManager *languages.Manager + Datastore struct { Path string AutoUpgrade bool @@ -638,120 +637,9 @@ func LoadConfig(filename string) (config *Config, err error) { } config.Server.MaxSendQBytes = int(maxSendQBytes) - // get language files - config.Languages.Data = make(map[string]languages.LangData) - if config.Languages.Enabled { - files, err := ioutil.ReadDir(config.Languages.Path) - if err != nil { - return nil, fmt.Errorf("Could not load language files: %s", err.Error()) - } - - for _, f := range files { - // skip dirs - if f.IsDir() { - continue - } - - // only load core .lang.yaml file, and ignore help/irc files - name := f.Name() - lowerName := strings.ToLower(name) - if !strings.HasSuffix(lowerName, ".lang.yaml") { - continue - } - // 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()) - } - - var langInfo languages.LangData - err = yaml.Unmarshal(data, &langInfo) - 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 { - 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 || 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 { - 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 || value == "" { - continue - } - langInfo.Translations[key] = value - } - } - - // confirm that values are correct - if langInfo.Code == "en" { - return nil, fmt.Errorf("Cannot have language file with code 'en' (this is the default language using strings inside the server code). If you're making an English variant, name it with a more specific code") - } - - if len(langInfo.Translations) == 0 { - // skip empty translations - continue - } - - if langInfo.Code == "" || langInfo.Name == "" || langInfo.Contributors == "" { - return nil, fmt.Errorf("Code, name or contributors is empty in language file [%s]", name) - } - - // check for duplicate languages - _, exists := config.Languages.Data[strings.ToLower(langInfo.Code)] - if exists { - return nil, fmt.Errorf("Language code [%s] defined twice", langInfo.Code) - } - - // and insert into lang info - config.Languages.Data[strings.ToLower(langInfo.Code)] = langInfo - } - - // confirm that default language exists - if config.Languages.Default == "" { - config.Languages.Default = "en" - } else { - config.Languages.Default = strings.ToLower(config.Languages.Default) - } - - _, exists := config.Languages.Data[config.Languages.Default] - if config.Languages.Default != "en" && !exists { - return nil, fmt.Errorf("Cannot find default language [%s]", config.Languages.Default) - } + config.languageManager, err = languages.NewManager(config.Languages.Enabled, config.Languages.Path, config.Languages.Default) + if err != nil { + return nil, fmt.Errorf("Could not load languages: %s", err.Error()) } // RecoverFromErrors defaults to true diff --git a/irc/getters.go b/irc/getters.go index 1f6ff9cb..863137b7 100644 --- a/irc/getters.go +++ b/irc/getters.go @@ -5,13 +5,15 @@ package irc import ( "github.com/oragono/oragono/irc/isupport" + "github.com/oragono/oragono/irc/languages" "github.com/oragono/oragono/irc/modes" ) -func (server *Server) Config() *Config { +func (server *Server) Config() (config *Config) { server.configurableStateMutex.RLock() - defer server.configurableStateMutex.RUnlock() - return server.config + config = server.config + server.configurableStateMutex.RUnlock() + return } func (server *Server) ISupport() *isupport.List { @@ -58,6 +60,10 @@ func (server *Server) GetOperator(name string) (oper *Oper) { return server.config.operators[name] } +func (server *Server) Languages() (lm *languages.Manager) { + return server.Config().languageManager +} + func (client *Client) Nick() string { client.stateMutex.RLock() defer client.stateMutex.RUnlock() @@ -191,6 +197,19 @@ func (client *Client) SetAccountName(account string) (changed bool) { return } +func (client *Client) Languages() (languages []string) { + client.stateMutex.RLock() + languages = client.languages + client.stateMutex.RUnlock() + return languages +} + +func (client *Client) SetLanguages(languages []string) { + client.stateMutex.Lock() + client.languages = languages + client.stateMutex.Unlock() +} + func (client *Client) HasMode(mode modes.Mode) bool { // client.flags has its own synch return client.flags.HasMode(mode) diff --git a/irc/handlers.go b/irc/handlers.go index 90f345f1..dc46eb1b 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -988,11 +988,7 @@ Get an explanation of , or "index" for a list of help topics.`), rb) // handle index if argument == "index" { - if client.HasMode(modes.Operator) { - client.sendHelp("HELP", GetHelpIndex(client.languages, HelpIndexOpers), rb) - } else { - client.sendHelp("HELP", GetHelpIndex(client.languages, HelpIndex), rb) - } + client.sendHelp("HELP", server.helpIndexManager.GetIndex(client.Languages(), client.HasMode(modes.Operator)), rb) return false } @@ -1088,7 +1084,7 @@ func infoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp rb.Add(nil, server.name, RPL_INFO, client.nick, line) } // show translators for languages other than good ole' regular English - tlines := server.languages.Translators() + tlines := server.Languages().Translators() if 0 < len(tlines) { rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Translators:")) for _, line := range tlines { @@ -1422,12 +1418,14 @@ func klineHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res // LANGUAGE { } func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool { + nick := client.Nick() alreadyDoneLanguages := make(map[string]bool) var appliedLanguages []string - supportedLanguagesCount := server.languages.Count() + lm := server.Languages() + supportedLanguagesCount := lm.Count() if supportedLanguagesCount < len(msg.Params) { - rb.Add(nil, client.server.name, ERR_TOOMANYLANGUAGES, client.nick, strconv.Itoa(supportedLanguagesCount), client.t("You specified too many languages")) + rb.Add(nil, client.server.name, ERR_TOOMANYLANGUAGES, nick, strconv.Itoa(supportedLanguagesCount), client.t("You specified too many languages")) return false } @@ -1441,9 +1439,9 @@ func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb * continue } - _, exists := server.languages.Info[value] + _, exists := lm.Languages[value] if !exists { - rb.Add(nil, client.server.name, ERR_NOLANGUAGE, client.nick, client.t("Languages are not supported by this server")) + rb.Add(nil, client.server.name, ERR_NOLANGUAGE, nick, fmt.Sprintf(client.t("Language %s is not supported by this server"), value)) return false } @@ -1456,20 +1454,16 @@ func languageHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb * appliedLanguages = append(appliedLanguages, value) } - client.stateMutex.Lock() - if len(appliedLanguages) == 1 && appliedLanguages[0] == "en" { - // premature optimisation ahoy! - client.languages = []string{} - } else { - client.languages = appliedLanguages + var langsToSet []string + if !(len(appliedLanguages) == 1 && appliedLanguages[0] == "en") { + langsToSet = appliedLanguages } - client.stateMutex.Unlock() + client.SetLanguages(langsToSet) - params := []string{client.nick} - for _, lang := range appliedLanguages { - params = append(params, lang) - } - params = append(params, client.t("Language preferences have been set")) + params := make([]string, len(appliedLanguages)+2) + params[0] = nick + copy(params[1:], appliedLanguages) + params[len(params)-1] = client.t("Language preferences have been set") rb.Add(nil, client.server.name, RPL_YOURLANGUAGESARE, params...) diff --git a/irc/help.go b/irc/help.go index e2a94e0f..b8c17d04 100644 --- a/irc/help.go +++ b/irc/help.go @@ -7,6 +7,7 @@ import ( "fmt" "sort" "strings" + "sync" "github.com/oragono/oragono/irc/languages" ) @@ -603,13 +604,15 @@ func modesTextGenerator(client *Client) string { return client.t(cmodeHelpText) + "\n\n" + client.t(umodeHelpText) } -// HelpIndex contains the list of all help topics for regular users. -var HelpIndex map[string]string +type HelpIndexManager struct { + sync.RWMutex // tier 1 -// HelpIndexOpers contains the list of all help topics for opers. -var HelpIndexOpers map[string]string + langToIndex map[string]string + langToOperIndex map[string]string +} // GenerateHelpIndex is used to generate HelpIndex. +// Returns: a map from language code to the help index in that language. func GenerateHelpIndex(lm *languages.Manager, forOpers bool) map[string]string { // generate the help entry lists var commands, isupport, information []string @@ -658,10 +661,7 @@ Information: newHelpIndex["en"] = fmt.Sprintf(defaultHelpIndex, commandsString, isupportString, informationString) - lm.RLock() - defer lm.RUnlock() - - for langCode := range lm.Info { + for langCode := range lm.Languages { translatedHelpIndex := lm.Translate([]string{langCode}, defaultHelpIndex) if translatedHelpIndex != defaultHelpIndex { newHelpIndex[langCode] = fmt.Sprintf(translatedHelpIndex, commandsString, isupportString, informationString) @@ -671,22 +671,16 @@ Information: return newHelpIndex } -// GenerateHelpIndices generates our help indexes and confirms we have HELP entries for every command. -func GenerateHelpIndices(lm *languages.Manager) error { - // startup check that we have HELP entries for every command - if len(HelpIndex) == 0 && len(HelpIndexOpers) == 0 { - for name := range Commands { - _, exists := Help[strings.ToLower(name)] - if !exists { - return fmt.Errorf("Help entry does not exist for command %s", name) - } - } - } - +// GenerateIndices regenerates our help indexes for each currently enabled language. +func (hm *HelpIndexManager) GenerateIndices(lm *languages.Manager) { // generate help indexes - HelpIndex = GenerateHelpIndex(lm, false) - HelpIndexOpers = GenerateHelpIndex(lm, true) - return nil + langToIndex := GenerateHelpIndex(lm, false) + langToOperIndex := GenerateHelpIndex(lm, true) + + hm.Lock() + defer hm.Unlock() + hm.langToIndex = langToIndex + hm.langToOperIndex = langToOperIndex } // sendHelp sends the client help of the given string. @@ -709,13 +703,30 @@ func (client *Client) sendHelp(name string, text string, rb *ResponseBuffer) { } // GetHelpIndex returns the help index for the given language. -func GetHelpIndex(languages []string, helpIndex map[string]string) string { +func (hm *HelpIndexManager) GetIndex(languages []string, oper bool) string { + hm.RLock() + langToIndex := hm.langToIndex + if oper { + langToIndex = hm.langToOperIndex + } + hm.RUnlock() + for _, lang := range languages { - index, exists := helpIndex[lang] + index, exists := langToIndex[lang] if exists { return index } } // 'en' always exists - return helpIndex["en"] + return langToIndex["en"] +} + +func init() { + // startup check that we have HELP entries for every command + for name := range Commands { + _, exists := Help[strings.ToLower(name)] + if !exists { + panic(fmt.Sprintf("Help entry does not exist for command %s", name)) + } + } } diff --git a/irc/languages/languages.go b/irc/languages/languages.go index 39d43e73..34a33621 100644 --- a/irc/languages/languages.go +++ b/irc/languages/languages.go @@ -4,10 +4,25 @@ package languages import ( + "encoding/json" "fmt" + "io/ioutil" + "path/filepath" "sort" + "strconv" "strings" - "sync" + + "gopkg.in/yaml.v2" +) + +const ( + // for a language (e.g., `fi-FI`) to be supported + // it must have a metadata file named, e.g., `fi-FI.lang.yaml` + metadataFileSuffix = ".lang.yaml" +) + +var ( + stringsFileSuffixes = []string{"-irc.lang.json", "-help.lang.json", "-nickserv.lang.json", "-hostserv.lang.json", "-chanserv.lang.json"} ) // LangData is the data contained in a language file. @@ -16,76 +31,144 @@ type LangData struct { Code string Contributors string Incomplete bool - Translations map[string]string } // Manager manages our languages and provides translation abilities. type Manager struct { - sync.RWMutex - Info map[string]LangData + Languages map[string]LangData translations map[string]map[string]string defaultLang string } // NewManager returns a new Manager. -func NewManager(defaultLang string, languageData map[string]LangData) *Manager { - lm := Manager{ - Info: make(map[string]LangData), +func NewManager(enabled bool, path string, defaultLang string) (lm *Manager, err error) { + lm = &Manager{ + Languages: make(map[string]LangData), translations: make(map[string]map[string]string), defaultLang: defaultLang, } // make fake "en" info - lm.Info["en"] = LangData{ + lm.Languages["en"] = LangData{ Code: "en", Name: "English", Contributors: "Oragono contributors and the IRC community", } - // load language data - for name, data := range languageData { - lm.Info[name] = data - - // 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 + if enabled { + err = lm.loadData(path) + if err == nil { + // successful load, check that defaultLang is sane + _, ok := lm.Languages[lm.defaultLang] + if !ok { + err = fmt.Errorf("Cannot find default language [%s]", lm.defaultLang) } - lm.translations[name][key] = value } + } else { + lm.defaultLang = "en" } - return &lm + return +} + +func (lm *Manager) loadData(path string) (err error) { + files, err := ioutil.ReadDir(path) + if err != nil { + return + } + + // 1. for each language that has a ${langcode}.lang.yaml in the languages path + // 2. load ${langcode}.lang.yaml + // 3. load ${langcode}-irc.lang.json and friends as the translations + for _, f := range files { + if f.IsDir() { + continue + } + // glob up *.lang.yaml in the directory + name := f.Name() + if !strings.HasSuffix(name, metadataFileSuffix) { + continue + } + prefix := strings.TrimSuffix(name, metadataFileSuffix) + + // load, e.g., `zh-CN.lang.yaml` + var data []byte + data, err = ioutil.ReadFile(filepath.Join(path, name)) + if err != nil { + return + } + var langInfo LangData + err = yaml.Unmarshal(data, &langInfo) + if err != nil { + return err + } + + if langInfo.Code == "en" { + return fmt.Errorf("Cannot have language file with code 'en' (this is the default language using strings inside the server code). If you're making an English variant, name it with a more specific code") + } + + // check for duplicate languages + _, exists := lm.Languages[strings.ToLower(langInfo.Code)] + if exists { + return fmt.Errorf("Language code [%s] defined twice", langInfo.Code) + } + + // slurp up all translation files with `prefix` into a single translation map + translations := make(map[string]string) + for _, translationSuffix := range stringsFileSuffixes { + stringsFilePath := filepath.Join(path, prefix+translationSuffix) + data, err = ioutil.ReadFile(stringsFilePath) + if err != nil { + continue // skip missing paths + } + var tlList map[string]string + err = json.Unmarshal(data, &tlList) + if err != nil { + return fmt.Errorf("invalid json for translation file %s: %s", stringsFilePath, err.Error()) + } + + for key, value := range tlList { + // because of how crowdin works, this is how we skip untranslated lines + if key == value || strings.TrimSpace(value) == "" { + continue + } + translations[key] = value + } + } + + if len(translations) == 0 { + // skip empty translations + continue + } + + // sanity check the language definition from the yaml file + if langInfo.Code == "" || langInfo.Name == "" || langInfo.Contributors == "" { + return fmt.Errorf("Code, name or contributors is empty in language file [%s]", name) + } + + key := strings.ToLower(langInfo.Code) + lm.Languages[key] = langInfo + lm.translations[key] = translations + } + + return nil } // Default returns the default languages. func (lm *Manager) Default() []string { - lm.RLock() - defer lm.RUnlock() - - if lm.defaultLang == "" { - return []string{} - } return []string{lm.defaultLang} } // Count returns how many languages we have. func (lm *Manager) Count() int { - lm.RLock() - defer lm.RUnlock() - - return len(lm.Info) + return len(lm.Languages) } // Translators returns the languages we have and the translators. func (lm *Manager) Translators() []string { - lm.RLock() - defer lm.RUnlock() - var tlist sort.StringSlice - for _, info := range lm.Info { + for _, info := range lm.Languages { if info.Code == "en" { continue } @@ -98,12 +181,9 @@ func (lm *Manager) Translators() []string { // Codes returns the proper language codes for the given casefolded language codes. func (lm *Manager) Codes(codes []string) []string { - lm.RLock() - defer lm.RUnlock() - var newCodes []string for _, code := range codes { - info, exists := lm.Info[code] + info, exists := lm.Languages[code] if exists { newCodes = append(newCodes, info.Code) } @@ -123,9 +203,6 @@ func (lm *Manager) Translate(languages []string, originalString string) string { return originalString } - lm.RLock() - defer lm.RUnlock() - for _, lang := range languages { lang = strings.ToLower(lang) if lang == "en" { @@ -149,3 +226,18 @@ func (lm *Manager) Translate(languages []string, originalString string) string { // didn't find any translation return originalString } + +func (lm *Manager) CapValue() string { + langCodes := make([]string, len(lm.Languages)+1) + langCodes[0] = strconv.Itoa(len(lm.Languages)) + i := 1 + for _, info := range lm.Languages { + codeToken := info.Code + if info.Incomplete { + codeToken = "~" + info.Code + } + langCodes[i] = codeToken + i += 1 + } + return strings.Join(langCodes, ",") +} diff --git a/irc/server.go b/irc/server.go index fdf4f01e..1f2b78f8 100644 --- a/irc/server.go +++ b/irc/server.go @@ -25,7 +25,6 @@ import ( "github.com/oragono/oragono/irc/caps" "github.com/oragono/oragono/irc/connection_limits" "github.com/oragono/oragono/irc/isupport" - "github.com/oragono/oragono/irc/languages" "github.com/oragono/oragono/irc/logger" "github.com/oragono/oragono/irc/modes" "github.com/oragono/oragono/irc/sno" @@ -76,9 +75,9 @@ type Server struct { connectionThrottler *connection_limits.Throttler ctime time.Time dlines *DLineManager + helpIndexManager HelpIndexManager isupport *isupport.List klines *KLineManager - languages *languages.Manager listeners map[string]*ListenerWrapper logger *logger.Manager monitorManager *MonitorManager @@ -119,7 +118,6 @@ func NewServer(config *Config, logger *logger.Manager) (*Server, error) { clients: NewClientManager(), connectionLimiter: connection_limits.NewLimiter(), connectionThrottler: connection_limits.NewThrottler(), - languages: languages.NewManager(config.Languages.Default, config.Languages.Data), listeners: make(map[string]*ListenerWrapper), logger: logger, monitorManager: NewMonitorManager(), @@ -137,11 +135,6 @@ func NewServer(config *Config, logger *logger.Manager) (*Server, error) { return nil, err } - // generate help info - if err := GenerateHelpIndices(server.languages); err != nil { - return nil, err - } - // Attempt to clean up when receiving these signals. signal.Notify(server.signals, ServerExitSignals...) signal.Notify(server.rehashSignal, syscall.SIGHUP) @@ -468,11 +461,9 @@ func (server *Server) tryRegister(c *Client) { // t returns the translated version of the given string, based on the languages configured by the client. func (client *Client) t(originalString string) string { - // grab this mutex to protect client.languages - client.stateMutex.RLock() - defer client.stateMutex.RUnlock() - - return client.server.languages.Translate(client.languages, originalString) + // TODO(slingamn) investigate a fast path for this, using an atomic load to see if translation is disabled + languages := client.Languages() + return client.server.Languages().Translate(languages, originalString) } // MOTD serves the Message of the Day. @@ -536,9 +527,10 @@ func (client *Client) getWhoisOf(target *Client, rb *ResponseBuffer) { rb.Add(nil, client.server.name, RPL_WHOISBOT, cnick, tnick, ircfmt.Unescape(fmt.Sprintf(client.t("is a $bBot$b on %s"), client.server.Config().Network.Name))) } - if 0 < len(target.languages) { + tLanguages := target.Languages() + if 0 < len(tLanguages) { params := []string{cnick, tnick} - for _, str := range client.server.languages.Codes(target.languages) { + for _, str := range client.server.Languages().Codes(tLanguages) { params = append(params, str) } params = append(params, client.t("can speak these languages")) @@ -655,31 +647,16 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) { updatedCaps := caps.NewSet() // Translations + server.logger.Debug("server", "Regenerating HELP indexes for new languages") + server.helpIndexManager.GenerateIndices(config.languageManager) + currentLanguageValue, _ := CapValues.Get(caps.Languages) - - langCodes := []string{strconv.Itoa(len(config.Languages.Data) + 1), "en"} - for _, info := range config.Languages.Data { - if info.Incomplete { - langCodes = append(langCodes, "~"+info.Code) - } else { - langCodes = append(langCodes, info.Code) - } - } - newLanguageValue := strings.Join(langCodes, ",") - server.logger.Debug("server", "Languages:", newLanguageValue) - + newLanguageValue := config.languageManager.CapValue() if currentLanguageValue != newLanguageValue { updatedCaps.Add(caps.Languages) CapValues.Set(caps.Languages, newLanguageValue) } - lm := languages.NewManager(config.Languages.Default, config.Languages.Data) - - server.logger.Debug("server", "Regenerating HELP indexes for new languages") - GenerateHelpIndices(lm) - - server.languages = lm - // SASL authPreviouslyEnabled := oldConfig != nil && oldConfig.Accounts.AuthenticationEnabled if config.Accounts.AuthenticationEnabled && !authPreviouslyEnabled { From b6feca05a335852142b1fb41cafeb2a1ec4a05db Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 21 Feb 2019 03:29:39 -0500 Subject: [PATCH 02/99] first pass at #409 --- .travis.yml | 4 ---- Makefile | 10 +++++----- install.sh | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 9 deletions(-) create mode 100755 install.sh diff --git a/.travis.yml b/.travis.yml index 972a1c6a..58a3b553 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,6 @@ language: go go: - "1.11.x" -install: make deps - script: -- wget https://github.com/goreleaser/goreleaser/releases/download/v0.62.2/goreleaser_Linux_x86_64.tar.gz -- tar -xzf goreleaser_Linux_x86_64.tar.gz -C $GOPATH/bin - make - make test diff --git a/Makefile b/Makefile index 864031f0..8b35ab9d 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ -.PHONY: all build +.PHONY: all install release capdefs deps test capdef_file = ./irc/caps/defs.go -all: build +all: install -build: - goreleaser --snapshot --rm-dist +install: deps + ./install.sh -buildrelease: +release: goreleaser --skip-publish --rm-dist capdefs: diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..c3c7a6e5 --- /dev/null +++ b/install.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +if [ -z "$GOPATH" ]; then + echo \$GOPATH is unset: see https://golang.org/doc/code.html for details + exit 1 +fi + +EXPECTED_DIR=${GOPATH}/src/github.com/oragono/oragono + +if [ `pwd` != "$EXPECTED_DIR" ] ; then + echo working checkout is not where \$GOPATH expects it: should be $EXPECTED_DIR + exit 1 +fi + +go install -v +echo successfully installed as ${GOPATH}/bin/oragono From 00c62ddabef5a736d7f3c8fe738f8f232104cd8d Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 21 Feb 2019 03:49:06 -0500 Subject: [PATCH 03/99] documentation update --- DEVELOPING.md | 9 ++++++++- README.md | 24 +++++++++++------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/DEVELOPING.md b/DEVELOPING.md index 839ea879..d7a9ec4f 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -2,6 +2,13 @@ This is just a bunch of tips and tricks we keep in mind while developing Oragono. If you wanna help develop as well, they might also be worth keeping in mind! +## Golang issues + +You should use the [latest distribution of the Go language for your OS and architecture](https://golang.org/dl/). (If `uname -m` on your Raspberry Pi reports `armv7l`, use the `armv6l` distribution of Go; if it reports v8, you may be able to use the `arm64` distribution.) + +Oragono vendors all its dependencies. The vendored code is tracked via a git submodule: `vendor/` is a submodule pointing to the [oragono-vendor](https://github.com/oragono/oragono-vendor) repository. As long as you're not modifying the vendored dependencies, `make` should take care of everything for you --- but if you are, see the "vendor" section below. + +Because of this, Oragono is self-contained and you should not need to fetch any dependencies with `go get`. Doing so is not recommended, since it may fetch incompatible versions of the dependencies. If you're having trouble building the code, it's very likely because your clone of the repository is in the wrong place: Go is very opinionated about where you should keep your code. Take a look at the [go workspaces documentation](https://golang.org/doc/code.html) if you're having trouble. ## Branches @@ -21,7 +28,7 @@ Develop branches are either used to work out implementation details in preperati 5. Remove unused sections from the changelog, change the date/version number and write release notes. 6. Commit the new changelog and constants change. 7. Tag the release with `git tag v0.0.0 -m "Release v0.0.0"` (`0.0.0` replaced with the real ver number). -8. Build binaries using the Makefile, upload release to Github including the changelog and binaries. +8. Build binaries using `make release`, upload release to Github including the changelog and binaries. 9. If it's a proper release (i.e. not an alpha/beta), merge the updates into the `stable` branch. Once it's built and released, you need to setup the new development version. To do so: diff --git a/README.md b/README.md index f0d44db1..a6d26ab4 100644 --- a/README.md +++ b/README.md @@ -70,21 +70,19 @@ The `stable` branch contains the latest release. You can run this for a producti #### Building -Clone the appropriate branch. You should also run this command to set up vendored dependencies: -``` -git submodule update --init -``` +You'll need an [up-to-date distribution of the Go language for your OS and architecture](https://golang.org/dl/). You'll also need to set up a [Go workspace](https://golang.org/doc/code.html). Typically, this is just a directory `~/go`, with the `GOPATH` environment variable exported to its path with `export GOPATH=~/go`. -From the root folder, you can run `make`, using [GoReleaser](https://goreleaser.com/) to generate all of our release binaries in `/dist`: -``` +Clone the repository where `go` expects it to be and then run `make`, i.e., + +```bash +mkdir -p ${GOPATH}/src/github.com/oragono +cd ${GOPATH}/src/github.com/oragono +git clone https://github.com/oragono/oragono +cd oragono +# check out the appropriate branch if necessary +# now, this will install a development copy of oragono at ${GOPATH}/bin/oragono: make -``` - -However, when just developing I instead just use this command to rebuild and run Oragono on the fly with the latest changes: -``` -go run oragono.go -``` - +```` ## Configuration From 4af56f2daec11f39faadb4429f759e8810d7438a Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 21 Feb 2019 05:43:15 -0500 Subject: [PATCH 04/99] add missing `set -e` ensuring that install.sh exits 1 if `go install` fails, which ensures that make sees the failure --- install.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install.sh b/install.sh index c3c7a6e5..5da12cb1 100755 --- a/install.sh +++ b/install.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -e + if [ -z "$GOPATH" ]; then echo \$GOPATH is unset: see https://golang.org/doc/code.html for details exit 1 From 98ab3d14ee41b33e0cc3eabf35c20c86372073c5 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Thu, 21 Feb 2019 16:20:03 -0500 Subject: [PATCH 05/99] improved error messages from walking someone through the steps --- install.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 5da12cb1..96d60781 100755 --- a/install.sh +++ b/install.sh @@ -3,14 +3,24 @@ set -e if [ -z "$GOPATH" ]; then - echo \$GOPATH is unset: see https://golang.org/doc/code.html for details + echo Error: \$GOPATH is unset + echo See https://golang.org/doc/code.html for details, or try these steps: + echo -e "\tmkdir -p ~/go" + echo -e "\texport GOPATH=~/go" exit 1 fi EXPECTED_DIR=${GOPATH}/src/github.com/oragono/oragono -if [ `pwd` != "$EXPECTED_DIR" ] ; then - echo working checkout is not where \$GOPATH expects it: should be $EXPECTED_DIR +if [ "$PWD" != "$EXPECTED_DIR" ] ; then + echo Error: working directory is not where \$GOPATH expects it to be + echo "Expected: $EXPECTED_DIR" + echo "Actual: $PWD" + echo See https://golang.org/doc/code.html for details, or try these steps: + echo -e "\tmkdir -p ${GOPATH}/src/github.com/oragono" + echo -e "\tcd ${GOPATH}/src/github.com/oragono" + echo -e "\tmv $PWD oragono" + echo -e "\tcd oragono" exit 1 fi From 3839dfc5e23e1bfc8a700dfc1b49036b29e858f0 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:47 +1000 Subject: [PATCH 06/99] New translations irc.lang.json (Chinese Traditional) --- languages/zh-TW-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/zh-TW-irc.lang.json b/languages/zh-TW-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/zh-TW-irc.lang.json +++ b/languages/zh-TW-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From 4abb4642a549cc4d22775a81eab2085eeec3dc72 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:50 +1000 Subject: [PATCH 07/99] New translations irc.lang.json (Afrikaans) --- languages/af-ZA-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/af-ZA-irc.lang.json b/languages/af-ZA-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/af-ZA-irc.lang.json +++ b/languages/af-ZA-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From a71671e2cd1817cf3679e5ff6231ef57a2ca5660 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:52 +1000 Subject: [PATCH 08/99] New translations irc.lang.json (Arabic) --- languages/ar-SA-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/ar-SA-irc.lang.json b/languages/ar-SA-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/ar-SA-irc.lang.json +++ b/languages/ar-SA-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From ab8b401c8645933e9a344b6af2b85ed87be5edc9 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:53 +1000 Subject: [PATCH 09/99] New translations irc.lang.json (Catalan) --- languages/ca-ES-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/ca-ES-irc.lang.json b/languages/ca-ES-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/ca-ES-irc.lang.json +++ b/languages/ca-ES-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From d39c471fafeba025e384c93138b1a622c6e32256 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:55 +1000 Subject: [PATCH 10/99] New translations irc.lang.json (Chinese Simplified) --- languages/zh-CN-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/zh-CN-irc.lang.json b/languages/zh-CN-irc.lang.json index f6cc065c..18fc0eac 100644 --- a/languages/zh-CN-irc.lang.json +++ b/languages/zh-CN-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "*** 找不到您的用户名", "*** Found your username": "*** 已找到您的用户名", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "账户已存在", "Account created": "账户已创建完成", - "Account created, pending verification; verification code has been sent to %s:%s": "帐户已创建, 等待验证。验证码已发送到 %s: %s", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "不存在该账户", "Account name is not valid": "账户名无效", - "Account registration has been disabled": "帐户注册已被禁用", "Account registration is disabled": "帐户注册已被禁用", "Account: %s": "账户:%s", "Actual user@host, Actual IP": "实际 user@host, 实际 ip", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "为%[2]s添加临时 (%[1]s) D-Line", "Added temporary (%[1]s) K-Line for %[2]s": "为%[2]s添加临时 (%[1]s) K-Line", "Additional grouped nick: %s": "添加绑定昵称:%s", - "An account already exists for your certificate fingerprint": "您的证书已注册帐户", "An error occurred": "", "Authentication successful": "身份验证成功", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "未能加入频道(+%s)", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "未能恢复连接,连接注册已经被完成", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "不过恢复连接,恢复前后必须为有TLS证书", - "Cannot resume connection, old client not found": "未能恢复连接,恢复前数据未找到", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "未能发送到频道", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "频道%s成功注册", "Channel does not exist": "频道不存在", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "JOIN 0 不被允许", @@ -114,6 +110,7 @@ "Nickname is already in use": "该昵称已被使用", "Nickname is reserved by a different account": "该昵称已被其它账户预约", "No DLINEs have been set!": "DLINEs 尚未设置", + "No changes were made": "", "No command given": "没有指定指令", "No masks given": "没有设置标识选项", "No nickname given": "没有指定昵称", @@ -121,7 +118,6 @@ "No such channel": "没有该频道", "No such nick": "没有该昵称", "No topic is set": "话题未设置", - "No username supplied": "没有提供用户名", "Not enough parameters": "没有足够的参数", "Only channel founders can change registered channels": "只有频道创建者才可以更改已注册频道", "Oragono is released under the MIT license.": "Oragono基于MIT证书发布。", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "代理IP地址不可用: [%s]", "Received malformed line": "接收到的格式不正确的行", "Registered at: %s": "您欲注册的账户或聊天室已存在于:%s", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "注册需要合法e-mail邮箱", "Rehashing": "配置文件正在重载", "Remote servers not yet supported": "远程服务器尚未提供该指令", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "成功绑定昵称%s到您的用户", "Successfully op'd in channel %s": "成功操作频道%s", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "成功从你的账户解绑昵称%s", "Successfully unregistered account %s": "成功删除账户%s", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "感谢 Jeremy Latt 建立了作为该项目根基的项目Ergonomadic。", + "That channel is not registered": "", "That nickname is already reserved by someone else": "该昵称已被其他人占用", "That nickname is not registered": "该昵称尚未注册", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "共有 %[1]d 在线用户和 %[2]d 隐身用户于 %[3]d 服务器", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "无该用户名", "They aren't on that channel": "您不在该频道", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "您在ban列表中。您必须使用指令解封自己: /DLINE MYSELF ", @@ -176,12 +175,12 @@ "This server was created %s": "该服务器已被创建%s", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "时间戳并非2006-01-02T15:04:05.999Z格式,已忽略", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "请使用下列指令之一验证您的账户:", "Translators:": "译者:", "Unknown command": "不存在该命令", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "未知子命令", "User doesn't have roleplaying mode enabled": "用户未启用角色扮演模式", "Verification code: %s": "验证码:%s", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "您的当前地址不可用WEBIRC指令或密码错误", "Welcome to the Internet Relay Network %s": "欢迎来到IRC%s", "You are banned from this server (%s)": "您已被该服务器禁封(%s)", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "您不再被标记为离开", "You are not using a TLS certificate": "您当前没有使用 TLS 证书", "You are now an IRC operator": "您现在已是IRC管理员", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "您不能解绑您的基础用户名(请尝试删除您的账户作为替代)", "You don't have enough channel privileges": "", "You don't own that nick": "您不能拥有该昵称", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "您已被该服务器禁封(%s)", "You have been marked as being away": "您已标记为离开", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "您已经占用了太多昵称(您可以使用 /NS DROP先移除一些昵称)", "You may not reregister": "您无须重新注册", "You must be an oper on the channel to register it": "您必须是频道管理员才可注册它", From 4d4846c90f882ad61da2cae8a947aea7559445ff Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:57 +1000 Subject: [PATCH 11/99] New translations irc.lang.json (Czech) --- languages/cs-CZ-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/cs-CZ-irc.lang.json b/languages/cs-CZ-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/cs-CZ-irc.lang.json +++ b/languages/cs-CZ-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From d2bbe2cced24d0085b05912510bc9c953e65915d Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:01:59 +1000 Subject: [PATCH 12/99] New translations irc.lang.json (Danish) --- languages/da-DK-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/da-DK-irc.lang.json b/languages/da-DK-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/da-DK-irc.lang.json +++ b/languages/da-DK-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From 59308f07bc6ee3a755f2522ffd50564677b06450 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:01 +1000 Subject: [PATCH 13/99] New translations irc.lang.json (Dutch) --- languages/nl-NL-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/nl-NL-irc.lang.json b/languages/nl-NL-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/nl-NL-irc.lang.json +++ b/languages/nl-NL-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From 927c329755d7a7b7cad47bccbf4f4231d8b6c523 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:03 +1000 Subject: [PATCH 14/99] New translations irc.lang.json (English, Australia) --- languages/en-AU-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/en-AU-irc.lang.json b/languages/en-AU-irc.lang.json index 0c508c70..432892cb 100644 --- a/languages/en-AU-irc.lang.json +++ b/languages/en-AU-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "*** We couldn't find your username, mate", "*** Found your username": "*** We found your username, mate", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "Sorry mate, someone else already grabbed that name", "Account created": "Strewth, we made your account!", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "Mate, that account name looks dodgy. Fix it up and try again", - "Account registration has been disabled": "", "Account registration is disabled": "Sorry mate, the coppers have turned off account reg. Maybe ask 'em to switch it back on or try again later", "Account: %s": "", "Actual user@host, Actual IP": "Actual user@host, Actual IP", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "Gotcha mate, we've banned %[2]s for %[1]s", "Added temporary (%[1]s) K-Line for %[2]s": "Gotcha mate, we've banned %[2]s for %[1]s", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "You've logged in mate!", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "Sorry mate, can't join that channel (+%s)", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "Sorry mate, can't send that message to that channel", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "Noice mate, you successfully regged %s", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "Can't run JOIN 0 here, mate", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "Mate, are you all together? That message needs more params", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "Thanks to Jeremy Latt for founding Ergonomadic, you're a ledge mate", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "Sorry mate, I dunno that command", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "Sorry mate, I dunno that subcommand", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "You're not using a TLS cert, mate", "You are now an IRC operator": "You're now an IRCop mate. Keep it fair dinkum, ey?", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "Sorry mate, we've banned ya' (%s)", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "You can't re-reg mate", "You must be an oper on the channel to register it": "", From b33666219778dc3fc84f86560b79565db8e091e3 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:05 +1000 Subject: [PATCH 15/99] New translations irc.lang.json (Finnish) --- languages/fi-FI-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/fi-FI-irc.lang.json b/languages/fi-FI-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/fi-FI-irc.lang.json +++ b/languages/fi-FI-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From c2fdb42ee506426cc0e03024a46080bf7883f0d2 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:07 +1000 Subject: [PATCH 16/99] New translations irc.lang.json (French) --- languages/fr-FR-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/fr-FR-irc.lang.json b/languages/fr-FR-irc.lang.json index e0024309..f1e3c0a7 100644 --- a/languages/fr-FR-irc.lang.json +++ b/languages/fr-FR-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "Utilise vraiment l'addresse", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "Impossible de joindre (+%s)", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "Impossible d'envoyer à la chaîne", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "Ce nom est déjà utilisé", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "Aucun nom donné", @@ -121,7 +118,6 @@ "No such channel": "Aucune chaîne", "No such nick": "Aucun(e) client/chaîne", "No topic is set": "Il n'y a pas de sujet", - "No username supplied": "", "Not enough parameters": "Pas assez de paramètres", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "Le serveur relit le fichier de configuration", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "Il y a %[1]d clients et %[2]d invisibles sur %[3]d serveurs", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "Il n'y avait pas un tel nom", "They aren't on that channel": "Il n'est pas sur cette chaîne", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "Ce serveur a été crée %s", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "Commande inconnue", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "Sous-commande inconnue", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "Vous êtes interdit d'utiliser ce serveur (%s)", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "Vous n'êtes plus marqué 'absent'", "You are not using a TLS certificate": "", "You are now an IRC operator": "Vous êtes maintenant un opérateur IRC", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "Vous avez été interdit d'utiliser ce serveur (%s)", "You have been marked as being away": "Vous êtes maintenant marqué 'absent'", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "Vous ne pouvez pas vous enregistrer à nouveau", "You must be an oper on the channel to register it": "", From b10c6ab9e7aa52c5dc15ec6897ae64743ca9aebf Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:09 +1000 Subject: [PATCH 17/99] New translations irc.lang.json (German) --- languages/de-DE-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/de-DE-irc.lang.json b/languages/de-DE-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/de-DE-irc.lang.json +++ b/languages/de-DE-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From 5fbd4052a49b1960b7c447ecb964af0bb51c3b27 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:11 +1000 Subject: [PATCH 18/99] New translations irc.lang.json (Greek) --- languages/el-GR-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/el-GR-irc.lang.json b/languages/el-GR-irc.lang.json index eb5e1913..150039bc 100644 --- a/languages/el-GR-irc.lang.json +++ b/languages/el-GR-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "*** Δεν ήταν δυνατή η εύρεση του ονόματος του χρήστη", "*** Found your username": "*** Βρέθηκε το όνομα του χρήστη σας", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "Ο λογαριασμός υπάρχει ήδη", "Account created": "Ο λογαριασμός δημιουργήθηκε", - "Account created, pending verification; verification code has been sent to %s:%s": "Ο λογαριασμός δημιουργήθηκε. Εκκρεμεί επαλήθευση. Ο κωδικός επαλήθευσης έχει σταλεί στο %s: %s", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "Ο λογαριασμός δεν υπάρχει", "Account name is not valid": "Το όνομα του λογαριασμού δεν είναι έγκυρο", - "Account registration has been disabled": "Η εγγραφή του λογαριασμού έχει απενεργοποιηθεί", "Account registration is disabled": "Η εγγραφή λογαριασμού είναι απενεργοποιημένη", "Account: %s": "Λογαριασμός: %s", "Actual user@host, Actual IP": "Πραγματικό user@host, πραγματική IP", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "Προστέθηκε προσωρινά (%[1]s) D-Line για %[2]s", "Added temporary (%[1]s) K-Line for %[2]s": "Προστέθηκε προσωρινά (%[1]s) Κ-Line για %[2]s", "Additional grouped nick: %s": "Επιπλέον ομαδοποιημένων nick: %s", - "An account already exists for your certificate fingerprint": "Υπάρχει ήδη λογαριασμός για το δακτυλικό σας αποτύπωμα πιστοποιητικού", "An error occurred": "", "Authentication successful": "Ο έλεγχος της ταυτότητας ήταν επιτυχής", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "Δεν είναι δυνατή η σύνδεση στο κανάλι (+%s)", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "Δεν είναι δυνατή η συνέχιση της σύνδεσης, η εγγραφή σύνδεσης έχει ήδη ολοκληρωθεί", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "Δεν είναι δυνατή η συνέχιση της σύνδεσης, παλαιοί και νέοι πελάτες πρέπει να έχουν TLS", - "Cannot resume connection, old client not found": "Δεν είναι δυνατή η συνέχιση της σύνδεσης, ο παλαιός πελάτης δεν βρέθηκε", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "Δεν είναι δυνατή η αποστολή στο κανάλι", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "Το κανάλι %s δημιουργήθηκε επιτυχώς", "Channel does not exist": "Το κανάλι δεν υπάρχει", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "JOIN 0 δεν επιτρέπεται", @@ -114,6 +110,7 @@ "Nickname is already in use": "Το ψευδώνυμο είναι ήδη σε χρήση", "Nickname is reserved by a different account": "Το ψευδώνυμο κρατείται από διαφορετικό λογαριασμό", "No DLINEs have been set!": "Δεν έχουν οριστεί DLINEs!", + "No changes were made": "", "No command given": "Δεν δόθηκε καμία εντολή", "No masks given": "Δεν δόθηκαν μάσκες", "No nickname given": "Δεν δόθηκε ψευδώνυμο", @@ -121,7 +118,6 @@ "No such channel": "Δεν υπάρχει τέτοιο κανάλι", "No such nick": "Δεν υπάρχει τέτοιο ψευδώνυμο", "No topic is set": "Δεν έχει οριστεί θέμα", - "No username supplied": "Δεν παρέχεται κανένα όνομα χρήστη", "Not enough parameters": "Δεν υπάρχει αρκετή παράμετροι", "Only channel founders can change registered channels": "Μόνο οι ιδρυτές καναλιών μπορούν να αλλάξουν καταχωρημένα κανάλια", "Oragono is released under the MIT license.": "Το oragono απελευθερώνεται βάσει της άδειας MIT.", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "Η διεύθυνση IP του διακομιστή μεσολάβησης δεν είναι έγκυρη: [%s]", "Received malformed line": "Παραλήφθηκε παραμορφωμένη γραμμή", "Registered at: %s": "Εγγραφή στο: %s", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "Η εγγραφή απαιτεί έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου", "Rehashing": "Ανανέωση", "Remote servers not yet supported": "Δεν υποστηρίζονται ακόμη απομακρυσμένοι διακομιστές", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "Επιτυχής ομαδοποίησης ψευδώνυμου %s με τον λογαριασμό σας", "Successfully op'd in channel %s": "Επιτυχής χειριστής στο κανάλι %s", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "Επιτυχής ομαδοποίηση ψευδώνυμου %s με τον λογαριασμό σας", "Successfully unregistered account %s": "Επιτυχής μη καταχωρισμένος λογαριασμός %s", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "Ευχαριστώ στον Jeremy Latt για την ίδρυση του Ergonomadic, στο έργο το οποίο βασίζεται", + "That channel is not registered": "", "That nickname is already reserved by someone else": "Αυτό το ψευδώνυμο έχει ήδη δεσμευτεί από κάποιον άλλο", "That nickname is not registered": "Αυτό το ψευδώνυμο δεν έχει καταχωριστεί", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "Υπάρχουν %[1]d χρήστες και %[2]d αόρατοι στο %[3]d διακομιστή (ές)", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "Δεν υπήρχε τέτοιο ψευδώνυμο", "They aren't on that channel": "Δεν είναι σε αυτό το κανάλι", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "Αυτή η απαγόρευση σας ταιριάζει. Για να ορίσετε τον εαυτό σας με το DLINE, πρέπει να χρησιμοποιήσετε την εντολή: /DLINE τον εαυτό μου <επιχειρήματα>", @@ -176,12 +175,12 @@ "This server was created %s": "Αυτός ο διακομιστής δημιουργήθηκε %s", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "Δεν υπάρχει χρονική σήμανση 2006-01-02T15:04:05.999Z μορφοποίηση, αγνοώντας το", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "Για να επαληθεύσετε τον λογαριασμό σας, εκδώστε μία από αυτές τις εντολές:", "Translators:": "Μεταφραστές:", "Unknown command": "Άγνωστη εντολή", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "Άγνωστh δευτερεύουσα εντολή", "User doesn't have roleplaying mode enabled": "Ο χρήστης δεν έχει ενεργοποιημένη τη λειτουργία ρόλου παιχνιδιού", "Verification code: %s": "Κωδικός επαλήθευσης: %s", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "Η εντολή WEBIRC δεν μπορεί να χρησιμοποιηθεί από τη διεύθυνσή σας ή έχει δοθεί λάθος κωδικός πρόσβασης", "Welcome to the Internet Relay Network %s": "Καλώς ήλθατε στο Δίκτυο Αναμεταδόσεων στο Διαδίκτυο %s", "You are banned from this server (%s)": "Είστε αποκλεισμένος από αυτόν το διακομιστή (%s)", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "Δεν είστε πλέον χαρακτηρισμένος ως απομακρυσμένος", "You are not using a TLS certificate": "Δεν χρησιμοποιείτε πιστοποιητικό TLS", "You are now an IRC operator": "Τώρα είστε χειριστής IRC", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "Δεν μπορείτε να ομαδοποιήσετε το κύριο ψευδώνυμό σας (αντιθέτως δοκιμάστε να καταργήσετε την καταχώριση του λογαριασμού σας)", "You don't have enough channel privileges": "", "You don't own that nick": "Δεν διαθέτετε αυτό το ψευδώνυμο", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "Έχετε απαγορευτεί από αυτόν το διακομιστή (%s)", "You have been marked as being away": "Έχετε επισημανθεί ως μακριά", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "Έχετε ήδη πάρα πολλά ψευδώνυμα δεσμευμένα (μπορείτε να καταργήσετε μερικά με /NS DROP)", "You may not reregister": "Δεν μπορείτε να κάνετε εκ νέου εγγραφή", "You must be an oper on the channel to register it": "Πρέπει να είστε χειριστής στο κανάλι για να την καταχωρήσετε", From 7147a1826f4bd19118bc77d7dc750236e5cbe831 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:14 +1000 Subject: [PATCH 19/99] New translations irc.lang.json (Hebrew) --- languages/he-IL-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/he-IL-irc.lang.json b/languages/he-IL-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/he-IL-irc.lang.json +++ b/languages/he-IL-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From be91fa1b7435a0f56443d9f5adfa397accb5dd15 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:16 +1000 Subject: [PATCH 20/99] New translations irc.lang.json (Italian) --- languages/it-IT-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/it-IT-irc.lang.json b/languages/it-IT-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/it-IT-irc.lang.json +++ b/languages/it-IT-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From fd28d93803a375ce40561454391ae8d39d9e80cd Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:22 +1000 Subject: [PATCH 21/99] New translations irc.lang.json (Hungarian) --- languages/hu-HU-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/hu-HU-irc.lang.json b/languages/hu-HU-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/hu-HU-irc.lang.json +++ b/languages/hu-HU-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From a90274e277d97ee487e7894d28da3729eb30f877 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:24 +1000 Subject: [PATCH 22/99] New translations irc.lang.json (Japanese) --- languages/ja-JP-irc.lang.json | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/languages/ja-JP-irc.lang.json b/languages/ja-JP-irc.lang.json index 77e8338a..2e124b26 100644 --- a/languages/ja-JP-irc.lang.json +++ b/languages/ja-JP-irc.lang.json @@ -1,12 +1,12 @@ { "$bWarning: unregistering this account will remove its stored privileges.$b": "", "$bWarning: unregistering this channel will remove all stored channel attributes.$b": "", - "%d. User %s requests vhost: %s": "", - "%s [account: %s] joined the channel": "", + "%[1]d. User %[2]s requests vhost: %[3]s": "", + "%[1]s [account: %[2]s] joined the channel": "", + "%[1]s kicked %[2]s (%[3]s)": "", + "%[1]s left the channel (%[2]s)": "", + "%[1]s quit (%[2]s)": "", "%s joined the channel": "", - "%s kicked %s (%s)": "", - "%s left the channel (%s)": "", - "%s quit (%s)": "", "*** $bEnd of %s HELP$b ***": "", "*** Could not find your username": "", "*** Found your username": "", @@ -16,15 +16,14 @@ "... and other commands which have been disabled": "", "A request is pending for vhost: %s": "", "A request was previously made for vhost: %s": "", + "Account %[1]s has vhost: %[2]s": "", + "Account %[1]s receives mode +%[2]s": "", "Account %s has no vhost": "", - "Account %s has vhost: %s": "", - "Account %s receives mode +%s": "", "Account already exists": "", "Account created": "", - "Account created, pending verification; verification code has been sent to %s:%s": "", + "Account created, pending verification; verification code has been sent to %s": "", "Account does not exist": "", "Account name is not valid": "", - "Account registration has been disabled": "", "Account registration is disabled": "", "Account: %s": "", "Actual user@host, Actual IP": "", @@ -33,7 +32,6 @@ "Added temporary (%[1]s) D-Line for %[2]s": "", "Added temporary (%[1]s) K-Line for %[2]s": "", "Additional grouped nick: %s": "", - "An account already exists for your certificate fingerprint": "", "An error occurred": "", "Authentication successful": "", "Bad or unauthorized PROXY command": "", @@ -45,12 +43,10 @@ "Cannot join channel (+%s)": "", "Cannot resume connection": "", "Cannot resume connection, connection registration has already been completed": "", - "Cannot resume connection, invalid resume token": "", "Cannot resume connection, old and new clients must have TLS": "", - "Cannot resume connection, old client not found": "", + "Cannot resume connection, token is not valid": "", "Cannot send to channel": "", - "Change was a no-op": "", - "Channel %s has %d persistent modes set": "", + "Channel %[1]s has %[2]d persistent modes set": "", "Channel %s is now unregistered": "", "Channel %s successfully registered": "", "Channel does not exist": "", @@ -101,7 +97,7 @@ "Invalid account name": "", "Invalid mode change": "", "Invalid parameters": "", - "Invalid parameters. For usage, do /msg %s HELP %s": "", + "Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "", "Invalid vhost": "", "It was rejected for reason: %s": "", "JOIN 0 is not allowed": "", @@ -114,6 +110,7 @@ "Nickname is already in use": "", "Nickname is reserved by a different account": "", "No DLINEs have been set!": "", + "No changes were made": "", "No command given": "", "No masks given": "", "No nickname given": "", @@ -121,7 +118,6 @@ "No such channel": "", "No such nick": "", "No topic is set": "", - "No username supplied": "", "Not enough parameters": "", "Only channel founders can change registered channels": "", "Oragono is released under the MIT license.": "", @@ -135,6 +131,7 @@ "Proxied IP address is not valid: [%s]": "", "Received malformed line": "", "Registered at: %s": "", + "Registered channel: %s": "", "Registration requires a valid e-mail address": "", "Rehashing": "", "Remote servers not yet supported": "", @@ -157,16 +154,18 @@ "Successfully enabled your vhost": "", "Successfully grouped nick %s with your account": "", "Successfully op'd in channel %s": "", + "Successfully registered account %s": "", "Successfully rejected vhost request for %s": "", "Successfully set mode %s": "", "Successfully set vhost": "", "Successfully ungrouped nick %s with your account": "", "Successfully unregistered account %s": "", "Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on": "", + "That channel is not registered": "", "That nickname is already reserved by someone else": "", "That nickname is not registered": "", + "There are %[1]d pending requests for vhosts (%[2]d displayed)": "", "There are %[1]d users and %[2]d invisible on %[3]d server(s)": "", - "There are %d pending requests for vhosts (%d displayed)": "", "There was no such nickname": "", "They aren't on that channel": "", "This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF ": "", @@ -176,12 +175,12 @@ "This server was created %s": "", "This vhost is currently disabled, but can be enabled with /HS ON": "", "Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "", - "To confirm account unregistration, type: /NS UNREGISTER %s %s": "", - "To confirm channel unregistration, type: /CS UNREGISTER %s %s": "", + "To confirm account unregistration, type: /NS UNREGISTER %[1]s %[2]s": "", + "To confirm channel unregistration, type: /CS UNREGISTER %[1]s %[2]s": "", "To verify your account, issue one of these commands:": "", "Translators:": "", "Unknown command": "", - "Unknown command. To see available commands, run": "", + "Unknown command. To see available commands, run: /%s HELP": "", "Unknown subcommand": "", "User doesn't have roleplaying mode enabled": "", "Verification code: %s": "", @@ -189,6 +188,7 @@ "WEBIRC command is not usable from your address or incorrect password given": "", "Welcome to the Internet Relay Network %s": "", "You are banned from this server (%s)": "", + "You are no longer authorized to be on this server": "", "You are no longer marked as being away": "", "You are not using a TLS certificate": "", "You are now an IRC operator": "", @@ -197,8 +197,10 @@ "You can't ungroup your primary nickname (try unregistering your account instead)": "", "You don't have enough channel privileges": "", "You don't own that nick": "", + "You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "", "You have been banned from this server (%s)": "", "You have been marked as being away": "", + "You have joined too many channels": "", "You have too many nicks reserved already (you can remove some with /NS DROP)": "", "You may not reregister": "", "You must be an oper on the channel to register it": "", From 3dc24d2b210ef8a9436876dd3e3553f66397c800 Mon Sep 17 00:00:00 2001 From: Daniel Oaks Date: Sun, 24 Feb 2019 18:02:25 +1000 Subject: [PATCH 23/99] New translations help.lang.json (Polish) --- languages/pl-PL-help.lang.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/languages/pl-PL-help.lang.json b/languages/pl-PL-help.lang.json index e034a725..4232ac73 100644 --- a/languages/pl-PL-help.lang.json +++ b/languages/pl-PL-help.lang.json @@ -1,5 +1,5 @@ { - "= Help Topics =\n\nCommands:\n%s\n\nRPL_ISUPPORT Tokens:\n%s\n\nInformation:\n%s": "", + "= Help Topics =\n\nCommands:\n%[1]s\n\nRPL_ISUPPORT Tokens:\n%[2]s\n\nInformation:\n%[3]s": "", "== Channel Modes ==\n\nOragono supports the following channel modes:\n\n +b | Client masks that are banned from the channel (e.g. *!*@127.0.0.1)\n +e | Client masks that are exempted from bans.\n +I | Client masks that are exempted from the invite-only flag.\n +i | Invite-only mode, only invited clients can join the channel.\n +k | Key required when joining the channel.\n +l | Client join limit for the channel.\n +m | Moderated mode, only privileged clients can talk on the channel.\n +n | No-outside-messages mode, only users that are on the channel can send\n | messages to it.\n +R | Only registered users can talk in the channel.\n +s | Secret mode, channel won't show up in /LIST or whois replies.\n +t | Only channel opers can modify the topic.\n\n= Prefixes =\n\n +q (~) | Founder channel mode.\n +a (&) | Admin channel mode.\n +o (@) | Operator channel mode.\n +h (%) | Halfop channel mode.\n +v (+) | Voice channel mode.": "", "== Server Notice Masks ==\n\nOragono supports the following server notice masks for operators:\n\n a | Local announcements.\n c | Local client connections.\n j | Local channel actions.\n k | Local kills.\n n | Local nick changes.\n o | Local oper actions.\n q | Local quits.\n t | Local /STATS usage.\n u | Local client account actions.\n x | Local X-lines (DLINE/KLINE/etc).\n\nTo set a snomask, do this with your nickname:\n\n /MODE +s \n\nFor instance, this would set the kill, oper, account and xline snomasks on dan:\n\n /MODE dan +s koux": "", "== User Modes ==\n\nOragono supports the following user modes:\n\n +a | User is marked as being away. This mode is set with the /AWAY command.\n +i | User is marked as invisible (their channels are hidden from whois replies).\n +o | User is an IRC operator.\n +R | User only accepts messages from other registered users. \n +s | Server Notice Masks (see help with /HELPOP snomasks).\n +Z | User is connected via TLS.": "", @@ -10,11 +10,13 @@ "AWAY [message]\n\nIf [message] is sent, marks you away. If [message] is not sent, marks you no\nlonger away.": "", "CAP [:]\n\nUsed in capability negotiation. See the IRCv3 specs for more info:\nhttp://ircv3.net/specs/core/capability-negotiation-3.1.html\nhttp://ircv3.net/specs/core/capability-negotiation-3.2.html": "", "CHANSERV [params]\n\nChanServ controls channel registrations.": "", + "CHATHISTORY [params]\n\nCHATHISTORY is an experimental history replay command. See these documents:\nhttps://github.com/MuffinMedic/ircv3-specifications/blob/chathistory/extensions/chathistory.md\nhttps://gist.github.com/DanielOaks/c104ad6e8759c01eb5c826d627caf80d": "", "CS [params]\n\nChanServ controls channel registrations.": "", "DEBUG