Change: name

This commit is contained in:
kayos@tcp.direct 2021-12-26 03:14:45 -08:00
parent 1689ba51a9
commit 468c1b24fd
257 changed files with 130 additions and 6713 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,59 +0,0 @@
# MOTD Formatting Codes
If `motd-formatting` is enabled in the config file, you can use special escape codes to easily get bold, coloured,
italic, and other types of specially-formatted text.
Our formatting character is '$', and this followed by specific letters means that the text after it is formatted in the
given way. Here are the character pairs and what they output:
--------------------------
Escape | Output
--------------------------
$$ | Dollar sign ($)
$b | Bold
$c | Color code
$i | Italics
$u | Underscore
$r | Reset
--------------------------
## Color codes
After the color code (`$c`), you can use square brackets to specify which foreground and background colors to output.
For example:
This line outputs red text:
`This is $c[red]really cool text!`
This line outputs red text with a light blue background:
`This is $c[red,light blue]22% cooler!`
If you're familiar with IRC colors you can also use the raw numbers you're used to:
`This is $c13pink text`
Here are the color names we support, and which IRC colors they map to:
--------------------
Code | Name
--------------------
00 | white
01 | black
02 | blue
03 | green
04 | red
05 | brown
06 | magenta
07 | orange
08 | yellow
09 | light green
10 | cyan
11 | light cyan
12 | light blue
13 | pink
14 | grey
15 | light grey
--------------------
In addition, some newer clients can make use of the colour codes 16-98, though they don't have any names assigned. Take
a look at this table to see which colours these numbers are:
https://modern.ircdocs.horse/formatting.html#colors-16-98

View File

@ -1,171 +0,0 @@
__ __ ______ ___ ______ ___
__/ // /_/ ____/ __ \/ ____/ __ \
/_ // __/ __/ / /_/ / / __/ / / /
/_ // __/ /___/ _, _/ /_/ / /_/ /
/_//_/ /_____/_/ |_|\____/\____/
Ergo IRCd Manual
https://ergo.chat/
_Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn@cs.stanford.edu>_
--------------------------------------------------------------------------------------------
Table of Contents
- [Introduction](#introduction)
- [About IRC](#about-irc)
- [How Ergo is different](#how-ergo-is-different)
- [Account registration](#account-registration)
- [Channel registration](#channel-registration)
- [Always-on](#always-on)
- [Multiclient](#multiclient)
- [History](#history)
--------------------------------------------------------------------------------------------
# Introduction
Welcome to Ergo, a modern IRC server!
This guide is for end users of Ergo (people using Ergo to chat). If you're installing your own Ergo instance, you should
consult the official manual instead (a copy should be bundled with your release, in the `docs/` directory).
This guide assumes that Ergo is in its default or recommended configuration; Ergo server administrators can change
settings to make the server behave differently. If something isn't working as expected, ask your server administrator
for help.
# About IRC
Before continuing, you should be familiar with basic features of the IRC platform. If you're comfortable with IRC, you
can skip this section.
[IRC](https://en.wikipedia.org/wiki/Internet_Relay_Chat) is a chat platform invented in 1988, which makes it older than
the World Wide Web! At its most basic level, IRC is a chat system composed of chat rooms; these are called "channels"
and their names begin with a `#` character (this is actually the origin of
the [hashtag](https://www.cmu.edu/homepage/computing/2014/summer/originstory.shtml)!). As a user, you "join" the
channels you're interested in, enabling you to participate in those discussions.
Here are some guides covering the basics of IRC:
* [Fedora Magazine: Beginner's Guide to IRC](https://fedoramagazine.org/beginners-guide-irc/)
* [IRCHelp's IRC Tutorial](https://www.irchelp.org/faq/irctutorial.html) (in particular, section 3, "Beyond the Basics")
# How Ergo is different
Ergo differs in many ways from conventional IRC servers. If you're *not* familiar with other IRC servers, you may want
to skip this section. Here are some of the most salient differences:
* Ergo integrates a "bouncer" into the server. In particular:
* Ergo stores message history for later retrieval.
* You can be "present" on the server (joined to channels, able to receive DMs) without having an active client
connection to the server.
* Conversely, you can use multiple clients to view / control the same presence (nickname) on the server, as long as
you authenticate with SASL when connecting.
* Ergo integrates "services" into the server. In particular:
* Nicknames are strictly reserved: once you've registered your nickname, you must log in in order to use it.
Consequently, SASL is more important when using Ergo than in other systems.
* All properties of registered channels are protected without the need for `ChanServ` to be joined to the channel.
* Ergo "cloaks", i.e., cryptographically scrambles, end user IPs so that they are not displayed publicly.
* By default, the user/ident field is inoperative in Ergo: it is always set to `~u`, regardless of the `USER` command or
the client's support for identd. This is because it is not in general a reliable or trustworthy way to distinguish
users coming from the same IP. Ergo's integrated bouncer features should reduce the need for shared shell hosts and
hosted bouncers (one of the main remaining use cases for identd).
* By default, Ergo is only accessible via TLS.
# Account registration
Although (as in other IRC systems) basic chat functionality is available without creating an account, most of Ergo's
features require an account. You can create an account by sending a direct message to `NickServ`. (In IRC
jargon, `NickServ` is a "network service", but if you're not familiar with the concept you can just think of it as a bot
or a text user interface.) In a typical client, this will be:
```
/msg NickServ register mySecretPassword validEmailAddress@example.com
```
This registers your current nickname as your account name, with the password `mySecretPassword` (replace this with your
own secret password!)
Once you have registered your account, you must configure SASL in your client, so that you will be logged in
automatically on each connection. [libera.chat's SASL guide](https://libera.chat/guides/sasl) covers most popular
clients.
If your client doesn't support SASL, you can typically use the "server password" (`PASS`) field in your client to log
into your account automatically when connecting. Set the server password to `accountname:accountpassword`,
where `accountname` is your account name and `accountpassword` is your account password.
# Channel registration
Once you've registered your nickname, you can use it to register channels. By default, channels are ephemeral; they go
away when there are no longer any users in the channel, or when the server is restarted. Registering a channel gives you
permanent control over it, and ensures that its settings will persist. To register a channel, send a message
to `ChanServ`:
```
/msg ChanServ register #myChannel
```
You must already be an operator (have the `+o` channel mode --- your client may display this as an `@` next to your
nickname). If you're not a channel operator in the channel you want to register, ask your server administrator for help.
# Always-on
By default, if you lose your connection to the IRC server, you are no longer present on the server; other users will see
that you have "quit", you will no longer appear in channel lists, and you will not be able to receive direct messages.
Ergo supports "always-on clients", where you remain on the server even when you are disconnected. To enable this, you
can send a message to `NickServ`:
```
/msg NickServ set always-on true
```
# Multiclient
Ergo natively supports attaching multiple clients to the same nickname (this normally requires the use of an external
bouncer, like ZNC or WeeChat's "relay" functionality). To use this feature, simply authenticate with SASL (or the PASS
workaround, if necessary) when connecting. In the recommended configuration of Ergo, you will receive the nickname
associated with your account, even if you have other clients already using it.
# History
Ergo stores message history on the server side (typically not an unlimited amount --- consult your server's FAQ, or your
server administrator, to find out how much is being stored and how long it's being retained).
1. The [IRCv3 chathistory specification](https://ircv3.net/specs/extensions/chathistory) offers the most fine-grained
control over history replay. It is supported by [Kiwi IRC](https://github.com/kiwiirc/kiwiirc), and hopefully other
clients soon.
1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to
enable support for it explicitly in your client. For example, in [Textual](https://www.codeux.com/textual/), go to "
Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "
Only play back messages you missed". ZNC's wiki page covers other common clients (although if the feature is only
supported via a script or third-party extension, the following option may be easier).
1. If you set your client to always-on (see the previous section for details), you can set a "device ID" for each device
you use. Ergo will then remember the last time your device was present on the server, and each time you sign on, it
will attempt to replay exactly those messages you missed. There are a few ways to set your device ID when connecting:
- You can add it to your SASL username with an `@`, e.g., if your SASL username is `alice` you can
send `alice@phone`
- You can add it in a similar way to your IRC protocol username ("ident"), e.g., `alice@phone`
- If login to user accounts via the `PASS` command is enabled on the server, you can provide it there, e.g., by
sending `alice@phone:hunter2` as the server password
1. If you only have one device, you can set your client to be always-on and
furthermore `/msg NickServ set autoreplay-missed true`. This will replay missed messages, with the caveat that you
must be connecting with at most one client at a time.
1. You can manually request history using `/history #channel 1h` (the parameter is either a message count or a time
duration). (Depending on your client, you may need to use `/QUOTE history` instead.)
1. You can autoreplay a fixed number of lines (e.g., 25) each time you join a channel
using `/msg NickServ set autoreplay-lines 25`.
# Private channels
If you have registered a channel, you can make it private. The best way to do this is with the `+i` ("invite-only")
mode:
1. Set your channel to be invite-only (`/mode #example +i`)
1. Identify the users you want to be able to access the channel. Ensure that they have registered their accounts (you
should be able to see their registration status if you `/WHOIS` their nicknames).
1. Add the desired nick/account names to the invite exception list (`/mode #example +I alice`)
1. If you want to grant a persistent channel privilege to a user, you can do it
with `CS AMODE` (`/msg ChanServ AMODE #example +o bob`)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,69 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 209">
<defs>
<style>.cls-1{fill:#0f0f0f;}.cls-2{fill:#6a83c1;}.cls-3{fill:#9eb6de;}</style>
</defs>
<title>logo</title>
<path class="cls-1"
d="M96.63,94v21.95H73.8V137H62.39v39.89H73.8v21.95H96.63V220H51V198.87H28.13V178.52H16.72V135.44H28.13V115.91H51V94H96.63Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M621.85,94v21.95H599V137H587.6v39.89H599v21.95h22.84V220H576.18V198.87H553.34V178.52H541.93V135.44h11.41V115.91h22.84V94h45.67Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M713.19,11V52.48h11.43V94H736v41.48h11.43V54.07H736V32.95h22.84V52.48h22.84V95.56H770.29v83H758.86V220H736V178.52H724.62v-83H713.19V198.87H667.52V135.44h11.43V94h11.41V52.48h11.43V11h11.41Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M873,94v21.95H850.2V137H838.79v39.89H850.2v21.95H873V220H827.37V198.87H804.53V178.52H793.12V135.44h11.41V115.91h22.84V94H873Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M154.07,204.11a2.45,2.45,0,0,1,1.78.73,2.51,2.51,0,0,1,0,3.57,2.47,2.47,0,0,1-1.77.72H153.4a2.45,2.45,0,0,1-1.78-.73,2.51,2.51,0,0,1,0-3.57,2.48,2.48,0,0,1,1.78-.72h0.67Z"
transform="translate(-12 -11)"/>
<path class="cls-3" d="M775,192.06v9.41h-9.42v-9.41H775Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M135.6,192.06v9.41h-9.42v-9.41h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M912,192.06v9.41h-9.42v-9.41H912Z" transform="translate(-12 -11)"/>
<path class="cls-1" d="M895.87,115.91v19.54H907.3v43.07H895.87v20.35H873V176.93h11.43V137H873V115.91h22.84Z"
transform="translate(-12 -11)"/>
<path class="cls-1" d="M644.68,115.91v19.54h11.43v43.07H644.68v20.35H621.85V176.93h11.43V137H621.85V115.91h22.84Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M462,32.95V52.48h22.84V74.43H462V54.07H439.16V157.39H462v19.54h34.26V137H484.84V115.91H462V94h45.67v21.95h22.84v62.61H507.67v20.35H416.33V178.52H404.92V137H393.49V115.91h22.84V95.56H404.92V52.48h11.41V32.95H462Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M210.81,32.95V52.48h22.84V95.56H210.81v20.35H165.14v19.54H188v63.43H165.14V178.52H153.73V94h11.41V74.43H188V94h22.84V54.07H165.14V74.43H142.31V32.95h68.51Z"
transform="translate(-12 -11)"/>
<path class="cls-1" d="M119.47,115.91v19.54H130.9v43.07H119.47v20.35H96.63V176.93h11.43V137H96.63V115.91h22.84Z"
transform="translate(-12 -11)"/>
<path class="cls-1" d="M233.65,115.91v19.54h11.43v41.48h11.41v21.95H233.65V178.52H210.81V115.91h22.84Z"
transform="translate(-12 -11)"/>
<path class="cls-1"
d="M347.82,32.95V52.48h22.84v83h11.43v43.07H370.66v20.35H347.82V176.93h11.43V137H347.82V115.91H302.15v83H279.32V178.52H267.91V137H256.48V115.91h22.84V95.56H267.91V52.48h11.41V32.95h68.51ZM325,54.07H302.15V94h45.67V74.43H325V54.07Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M408.56,194a1.9,1.9,0,0,1,0,3.81,1.85,1.85,0,0,1-1.36-.56,1.9,1.9,0,0,1,0-2.69A1.84,1.84,0,0,1,408.56,194Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M85.56,162.63a2.45,2.45,0,0,1,1.78.73,2.51,2.51,0,0,1,0,3.57,2.47,2.47,0,0,1-1.77.72H84.89a2.45,2.45,0,0,1-1.78-.73,2.51,2.51,0,0,1,0-3.57,2.47,2.47,0,0,1,1.77-.73h0.67Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M862,162.63a2.45,2.45,0,0,1,1.78.73,2.51,2.51,0,0,1,0,3.57,2.47,2.47,0,0,1-1.77.72h-0.67a2.45,2.45,0,0,1-1.78-.73,2.51,2.51,0,0,1,0-3.57,2.47,2.47,0,0,1,1.78-.73H862Z"
transform="translate(-12 -11)"/>
<path class="cls-3" d="M341.12,150.58V160H331.7v-9.41h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M478.13,150.58V160h-9.42v-9.41h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M199.38,150.69a4.6,4.6,0,1,1-3.24,1.35A4.45,4.45,0,0,1,199.38,150.69Z"
transform="translate(-12 -11)"/>
<path class="cls-3" d="M660.81,109.09v9.41h-9.42v-9.41h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M523.8,67.61V77h-9.42V67.61h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M21.42,67.61V77H12V67.61h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M546.63,67.61V77h-9.42V67.61h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M797.82,67.61V77H788.4V67.61h9.42Z" transform="translate(-12 -11)"/>
<path class="cls-3" d="M678.93,67.72a4.6,4.6,0,1,1-3.24,1.35,4.45,4.45,0,0,1,3.24-1.35h0Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M248.72,69.54l0.72,0.14,0.61,0.42a1.84,1.84,0,0,1,.56,1.36,1.9,1.9,0,0,1-1.9,1.89,1.84,1.84,0,0,1-1.36-.56,1.82,1.82,0,0,1-.56-1.34A1.9,1.9,0,0,1,248.72,69.54Z"
transform="translate(-12 -11)"/>
<path class="cls-3" d="M496.24,26.24a4.6,4.6,0,1,1,0,9.19A4.59,4.59,0,0,1,493,27.59,4.42,4.42,0,0,1,496.24,26.24Z"
transform="translate(-12 -11)"/>
<path class="cls-2"
d="M362.89,28.06a1.82,1.82,0,0,1,1.34.56,1.85,1.85,0,0,1,.56,1.36,1.9,1.9,0,0,1-1.9,1.89,1.85,1.85,0,0,1-1.36-.56A1.82,1.82,0,0,1,361,30,1.9,1.9,0,0,1,362.89,28.06Z"
transform="translate(-12 -11)"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -18,9 +18,9 @@ import (
"github.com/docopt/docopt-go"
"git.tcp.direct/ircd/ircd-ergo/irc"
"git.tcp.direct/ircd/ircd-ergo/irc/logger"
"git.tcp.direct/ircd/ircd-ergo/irc/mkcerts"
"git.tcp.direct/ircd/ircd/irc"
"git.tcp.direct/ircd/ircd/irc/logger"
"git.tcp.direct/ircd/ircd/irc/mkcerts"
)
// set via linker flags, either by make or by goreleaser:

View File

@ -1,18 +1,3 @@
__ __ ______ ___ ______ ___
__/ // /_/ ____/ __ \/ ____/ __ \
/_ // __/ __/ / /_/ / / __/ / / /
/_ // __/ /___/ _, _/ /_/ / /_/ /
/_//_/ /_____/_/ |_|\____/\____/
This is the default Ergo MOTD.
If motd-formatting is enabled in the config file, you can use the dollarsign character to
create special formatting such as bold, italics and color codes.
For example, here are a few formatted lines (enable motd-formatting to see these in action):
- this is $bbold text$r.
- this is $iitalics text$r.
- this is $c[red]red$c and $c[blue]blue$c text.

2
go.mod
View File

@ -1,4 +1,4 @@
module git.tcp.direct/ircd/ircd-ergo
module git.tcp.direct/ircd/ircd
go 1.17

View File

@ -19,12 +19,12 @@ import (
"github.com/tidwall/buntdb"
"github.com/xdg-go/scram"
"git.tcp.direct/ircd/ircd-ergo/irc/connection_limits"
"git.tcp.direct/ircd/ircd-ergo/irc/email"
"git.tcp.direct/ircd/ircd-ergo/irc/migrations"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/passwd"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/connection_limits"
"git.tcp.direct/ircd/ircd/irc/email"
"git.tcp.direct/ircd/ircd/irc/migrations"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/passwd"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -10,7 +10,7 @@ import (
"fmt"
"net"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// AuthScriptInput AuthScriptInput JSON-serializable input and output types for the script

View File

@ -6,7 +6,7 @@ package caps
import (
"fmt"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// Set holds a set of enabled capabilities.

View File

@ -14,10 +14,10 @@ import (
"git.tcp.direct/ircd/irc-go/ircutils"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
type ChannelSettings struct {
@ -788,6 +788,9 @@ func (channel *Channel) Join(client *Client, key string, isSajoin bool, rb *Resp
(channel.flags.HasMode(modes.RegisteredOnly) || channel.server.Defcon() <= 2) &&
!channel.lists[modes.InviteMask].Match(details.nickMaskCasefolded):
return errRegisteredOnly, forward
default:
//
}
if joinErr := client.addChannel(channel, rb == nil); joinErr != nil {

View File

@ -7,7 +7,7 @@ import (
"sort"
"sync"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
type channelManagerEntry struct {

View File

@ -12,8 +12,8 @@ import (
"github.com/tidwall/buntdb"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// this is exclusively the *persistence* layer for channel registration;

View File

@ -12,9 +12,9 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const chanservHelp = `ChanServ lets you register and manage channels.`

View File

@ -22,13 +22,13 @@ import (
"github.com/ergochat/irc-go/ircreader"
"github.com/xdg-go/scram"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/connection_limits"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/connection_limits"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -8,9 +8,9 @@ import (
"strings"
"sync"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// ClientManager keeps track of clients by nick, enforcing uniqueness of casefolded nicks

View File

@ -6,7 +6,7 @@ package irc
import (
"testing"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
func TestGenerateBatchID(t *testing.T) {

View File

@ -8,7 +8,7 @@ import (
"golang.org/x/crypto/sha3"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
type CloakConfig struct {

View File

@ -26,18 +26,18 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"gopkg.in/yaml.v2"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/cloaks"
"git.tcp.direct/ircd/ircd-ergo/irc/connection_limits"
"git.tcp.direct/ircd/ircd-ergo/irc/custime"
"git.tcp.direct/ircd/ircd-ergo/irc/email"
"git.tcp.direct/ircd/ircd-ergo/irc/isupport"
"git.tcp.direct/ircd/ircd-ergo/irc/jwt"
"git.tcp.direct/ircd/ircd-ergo/irc/languages"
"git.tcp.direct/ircd/ircd-ergo/irc/logger"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/passwd"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/cloaks"
"git.tcp.direct/ircd/ircd/irc/connection_limits"
"git.tcp.direct/ircd/ircd/irc/custime"
"git.tcp.direct/ircd/ircd/irc/email"
"git.tcp.direct/ircd/ircd/irc/isupport"
"git.tcp.direct/ircd/ircd/irc/jwt"
"git.tcp.direct/ircd/ircd/irc/languages"
"git.tcp.direct/ircd/ircd/irc/logger"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/passwd"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// here's how this works: exported (capitalized) members of the config structs

View File

@ -10,8 +10,8 @@ import (
"sync"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -8,7 +8,7 @@ import (
"testing"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/flatip"
)
func easyParseIP(ipstr string) (result flatip.IP) {

View File

@ -14,8 +14,8 @@ import (
"strings"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
"github.com/tidwall/buntdb"
)

View File

@ -12,7 +12,7 @@ import (
"github.com/tidwall/buntdb"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/flatip"
)
const (

View File

@ -12,9 +12,9 @@ import (
"strings"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/custime"
"git.tcp.direct/ircd/ircd-ergo/irc/smtp"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/custime"
"git.tcp.direct/ircd/ircd/irc/smtp"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -10,7 +10,7 @@ import (
"fmt"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// Runtime Errors

View File

@ -9,9 +9,9 @@ import (
"errors"
"net"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -9,10 +9,10 @@ import (
"time"
"unsafe"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/languages"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/languages"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
func (server *Server) Config() (config *Config) {

View File

@ -25,14 +25,14 @@ import (
"github.com/ergochat/irc-go/ircutils"
"golang.org/x/crypto/bcrypt"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/custime"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/jwt"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/custime"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/jwt"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// helper function to parse ACC callbacks, e.g., mailto:person@example.com, tel:16505551234

View File

@ -9,7 +9,7 @@ import (
"strings"
"sync"
"git.tcp.direct/ircd/ircd-ergo/irc/languages"
"git.tcp.direct/ircd/ircd/irc/languages"
)
// HelpEntryType represents the different sorts of help entries that can exist.

View File

@ -7,7 +7,7 @@ import (
"sync"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
type ItemType uint
@ -51,7 +51,7 @@ type Item struct {
// HasMsgid tests whether a message has the message id `msgid`.
func (item *Item) HasMsgid(msgid string) bool {
return item.Message.Msgid == msgid
return false
}
type Predicate func(item *Item) (matches bool)
@ -142,13 +142,6 @@ func (list *Buffer) Add(item Item) {
}
func (list *Buffer) lookup(msgid string) (result Item, found bool) {
predicate := func(item *Item) bool {
return item.HasMsgid(msgid)
}
results := list.matchInternal(predicate, false, 1)
if len(results) != 0 {
return results[0], true
}
return
}

View File

@ -4,7 +4,6 @@
package history
import (
"strings"
"time"
)
@ -82,12 +81,12 @@ func MinMaxAsc(after, before, cutoff time.Time) (min, max time.Time, ascending b
// maps regular msgids from JOIN, etc. to a msgid suitable for attaching
// to a HistServ message describing the JOIN. See #491 for some history.
func HistservMungeMsgid(msgid string) string {
return "_" + msgid
return ""
}
// strips munging from a msgid. future schemes may not support a well-defined
// mapping of munged msgids to true msgids, but munged msgids should always contain
// a _, with metadata in front and data (possibly the true msgid) after.
func NormalizeMsgid(msgid string) string {
return strings.TrimPrefix(msgid, "_")
return ""
}

View File

@ -3,20 +3,8 @@
package irc
import (
"bufio"
"fmt"
"os"
"strconv"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
)
const (
histservHelp = `HistServ provides commands related to history.`
histservHelp = `HistServ is a remnant of bad code. There is no history on ircd.chat.`
)
func histservEnabled(config *Config) bool {
@ -34,203 +22,15 @@ var (
help: `Syntax: $bFORGET <account>$b
FORGET deletes all history messages sent by an account.`,
helpShort: `$bFORGET$b deletes all history messages sent by an account.`,
helpShort: `$bFORGET$b doesn't do anything because there is no history here.`,
capabs: []string{"history"},
enabled: histservEnabled,
minParams: 1,
maxParams: 1,
},
"delete": {
handler: histservDeleteHandler,
help: `Syntax: $bDELETE [target] <msgid>$b
DELETE deletes an individual message by its msgid. The target is a channel
name or nickname; depending on the history implementation, this may or may not
be necessary to locate the message.`,
helpShort: `$bDELETE$b deletes an individual message by its msgid.`,
enabled: histservEnabled,
minParams: 1,
maxParams: 2,
},
"export": {
handler: histservExportHandler,
help: `Syntax: $bEXPORT <account>$b
EXPORT exports all messages sent by an account as JSON. This can be used at
the request of the account holder.`,
helpShort: `$bEXPORT$b exports all messages sent by an account as JSON.`,
enabled: historyComplianceEnabled,
capabs: []string{"history"},
minParams: 1,
maxParams: 1,
},
"play": {
handler: histservPlayHandler,
help: `Syntax: $bPLAY <target> [limit]$b
PLAY plays back history messages, rendering them into direct messages from
HistServ. 'target' is a channel name or nickname to query, and 'limit'
is a message count or a time duration. Note that message playback may be
incomplete or degraded, relative to direct playback from /HISTORY or
CHATHISTORY.`,
helpShort: `$bPLAY$b plays back history messages.`,
enabled: histservEnabled,
minParams: 1,
maxParams: 2,
},
}
)
func histservForgetHandler(service *ircService, server *Server, client *Client, command string, params []string, rb *ResponseBuffer) {
accountName := server.accounts.AccountToAccountName(params[0])
if accountName == "" {
service.Notice(rb, client.t("Could not look up account name, proceeding anyway"))
accountName = params[0]
}
server.ForgetHistory(accountName)
service.Notice(rb, fmt.Sprintf(client.t("Enqueued account %s for message deletion"), accountName))
}
func histservDeleteHandler(service *ircService, server *Server, client *Client, command string, params []string, rb *ResponseBuffer) {
var target, msgid string
if len(params) == 1 {
msgid = params[0]
} else {
target, msgid = params[0], params[1]
}
// operators can delete; if individual delete is allowed, a chanop or
// the message author can delete
accountName := "*"
isChanop := false
isOper := client.HasRoleCapabs("history")
if !isOper {
if server.Config().History.Retention.AllowIndividualDelete {
channel := server.channels.Get(target)
if channel != nil && channel.ClientIsAtLeast(client, modes.Operator) {
isChanop = true
} else {
accountName = client.AccountName()
}
}
}
if !isOper && !isChanop && accountName == "*" {
service.Notice(rb, client.t("Insufficient privileges"))
return
}
err := server.DeleteMessage(target, msgid, accountName)
if err == nil {
service.Notice(rb, client.t("Successfully deleted message"))
} else {
if isOper {
service.Notice(rb, fmt.Sprintf(client.t("Error deleting message: %v"), err))
} else {
service.Notice(rb, client.t("Could not delete message"))
}
}
}
func histservExportHandler(service *ircService, server *Server, client *Client, command string, params []string, rb *ResponseBuffer) {
cfAccount, err := CasefoldName(params[0])
if err != nil {
service.Notice(rb, client.t("Invalid account name"))
return
}
config := server.Config()
// don't include the account name in the filename because of escaping concerns
filename := fmt.Sprintf("%s-%s.json", utils.GenerateSecretToken(), time.Now().UTC().Format(IRCv3TimestampFormat))
pathname := config.getOutputPath(filename)
outfile, err := os.Create(pathname)
if err != nil {
service.Notice(rb, fmt.Sprintf(client.t("Error opening export file: %v"), err))
} else {
service.Notice(rb, fmt.Sprintf(client.t("Started exporting data for account %[1]s to file %[2]s"), cfAccount, filename))
}
go histservExportAndNotify(service, server, cfAccount, outfile, filename, client.Nick())
}
func histservExportAndNotify(service *ircService, server *Server, cfAccount string, outfile *os.File, filename, alertNick string) {
defer server.HandlePanic()
defer outfile.Close()
writer := bufio.NewWriter(outfile)
defer writer.Flush()
client := server.clients.Get(alertNick)
if client != nil && client.HasRoleCapabs("history") {
client.Send(nil, service.prefix, "NOTICE", client.Nick(), fmt.Sprintf(client.t("Data export for %[1]s completed and written to %[2]s"), cfAccount, filename))
}
}
func histservPlayHandler(service *ircService, server *Server, client *Client, command string, params []string, rb *ResponseBuffer) {
items, _, err := easySelectHistory(server, client, params)
if err != nil {
service.Notice(rb, client.t("Could not retrieve history"))
return
}
playMessage := func(timestamp time.Time, nick, message string) {
service.Notice(rb, fmt.Sprintf("%s <%s> %s", timestamp.Format("15:04:05"), NUHToNick(nick), message))
}
for _, item := range items {
// TODO: support a few more of these, maybe JOIN/PART/QUIT
if item.Type != history.Privmsg && item.Type != history.Notice {
continue
}
if len(item.Message.Split) == 0 {
playMessage(item.Message.Time, item.Nick, item.Message.Message)
} else {
for _, pair := range item.Message.Split {
playMessage(item.Message.Time, item.Nick, pair.Message)
}
}
}
service.Notice(rb, client.t("End of history playback"))
}
// handles parameter parsing and history queries for /HISTORY and /HISTSERV PLAY
func easySelectHistory(server *Server, client *Client, params []string) (items []history.Item, channel *Channel, err error) {
channel, sequence, err := server.GetHistorySequence(nil, client, params[0])
if sequence == nil || err != nil {
return nil, nil, errNoSuchChannel
}
var duration time.Duration
maxChathistoryLimit := server.Config().History.ChathistoryMax
limit := 100
if maxChathistoryLimit < limit {
limit = maxChathistoryLimit
}
if len(params) > 1 {
providedLimit, err := strconv.Atoi(params[1])
if err == nil && providedLimit != 0 {
limit = providedLimit
if maxChathistoryLimit < limit {
limit = maxChathistoryLimit
}
} else if err != nil {
duration, err = time.ParseDuration(params[1])
if err == nil {
limit = maxChathistoryLimit
}
}
}
if duration == 0 {
items, err = sequence.Between(history.Selector{}, history.Selector{}, limit)
} else {
now := time.Now().UTC()
start := history.Selector{Time: now}
end := history.Selector{Time: now.Add(-duration)}
items, err = sequence.Between(start, end, limit)
}
return
service.Notice(rb, client.t("ircd.chat does not keep history."))
}

View File

@ -10,8 +10,8 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -12,7 +12,7 @@ import (
"github.com/tidwall/buntdb"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -12,7 +12,7 @@ import (
"github.com/ergochat/irc-go/ircreader"
"github.com/gorilla/websocket"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -13,7 +13,7 @@ import (
"github.com/tidwall/buntdb"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -13,7 +13,7 @@ import (
"github.com/gorilla/websocket"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -8,8 +8,8 @@ import (
"github.com/ergochat/irc-go/ircmsg"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// MessageCache caches serialized IRC messages.

View File

@ -10,9 +10,9 @@ import (
"strconv"
"strings"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -10,7 +10,7 @@ import (
"sort"
"strings"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -7,7 +7,7 @@ import (
"reflect"
"testing"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd/irc/modes"
)
func TestParseDefaultChannelModes(t *testing.T) {

View File

@ -6,7 +6,7 @@ package irc
import (
"sync"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd/irc/caps"
"github.com/ergochat/irc-go/ircmsg"
)

View File

@ -11,10 +11,10 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -13,10 +13,10 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"git.tcp.direct/ircd/ircd-ergo/irc/custime"
"git.tcp.direct/ircd/ircd-ergo/irc/passwd"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/custime"
"git.tcp.direct/ircd/ircd/irc/passwd"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// "enabled" callbacks for specific nickserv commands

View File

@ -9,8 +9,8 @@ import (
"github.com/ergochat/irc-go/ircmsg"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -7,9 +7,9 @@ import (
"fmt"
"strings"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -5,7 +5,7 @@ package irc
import (
"runtime"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// See #237 for context. Operations that might allocate large amounts of temporary

View File

@ -24,14 +24,14 @@ import (
"github.com/tidwall/buntdb"
"git.tcp.direct/ircd/ircd-ergo/irc/caps"
"git.tcp.direct/ircd/ircd-ergo/irc/connection_limits"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/logger"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/caps"
"git.tcp.direct/ircd/ircd/irc/connection_limits"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/logger"
"git.tcp.direct/ircd/ircd/irc/modes"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -14,7 +14,7 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"github.com/ergochat/irc-go/ircmsg"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
// defines an IRC service, e.g., NICKSERV

View File

@ -6,7 +6,7 @@ import (
"github.com/ergochat/irc-go/ircfmt"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd/irc/sno"
)
// SnoManager keeps track of which clients to send snomasks to.

View File

@ -9,7 +9,7 @@ import (
"io"
"sync"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
var (

View File

@ -16,7 +16,7 @@ import (
"golang.org/x/text/unicode/norm"
"golang.org/x/text/width"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

View File

@ -8,7 +8,7 @@ package irc
import (
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/modes"
"git.tcp.direct/ircd/ircd/irc/modes"
)
type empty struct{}

View File

@ -11,10 +11,10 @@ import (
"github.com/ergochat/irc-go/ircmsg"
"git.tcp.direct/ircd/ircd-ergo/irc/custime"
"git.tcp.direct/ircd/ircd-ergo/irc/flatip"
"git.tcp.direct/ircd/ircd-ergo/irc/sno"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/custime"
"git.tcp.direct/ircd/ircd/irc/flatip"
"git.tcp.direct/ircd/ircd/irc/sno"
"git.tcp.direct/ircd/ircd/irc/utils"
)
func consumeDuration(params []string, rb *ResponseBuffer) (duration time.Duration, requireSASL bool, remainingParams []string, err error) {

View File

@ -13,7 +13,7 @@ import (
"time"
"unsafe"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/utils"
)
type MaskInfo struct {

View File

@ -9,8 +9,8 @@ import (
"strings"
"time"
"git.tcp.direct/ircd/ircd-ergo/irc/history"
"git.tcp.direct/ircd/ircd-ergo/irc/utils"
"git.tcp.direct/ircd/ircd/irc/history"
"git.tcp.direct/ircd/ircd/irc/utils"
)
const (

13
languages/README.md vendored
View File

@ -1,13 +0,0 @@
# Oragono's Translations
These translations have been contributed by amazing people using [Crowdin](https://crowdin.com/project/oragono). If
you'd like to fix up a mistake or help add a language, feel free to pop over there! Always interested in new
contributors and language support.
Contributors to translations are noted in the translation's info file (the `yaml` file). You shouldn't be touching these
files manually they should be getting updated through CrowdIn. However, the `example` files exist if you want a
reference for the format. To regenerate the `example` files (that get fed into CrowdIn), look at
the `updatetranslations.py` file in the source directory.
My eventual intent is to use these translations to help create a standard set that other IRC software authors can see,
download, and use in their own software (with proper attribution to the contributors, of course).

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1,13 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Afrikaans"
#code - this is what the language will be referred to in our list of languages
code: "af"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1,13 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "العربية"
#code - this is what the language will be referred to in our list of languages
code: "ar"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1,5 +0,0 @@
{
"Syntax: $bOP #channel [nickname]$b\n\nOP makes the given nickname, or yourself, a channel admin. You can only use\nthis command if you're the founder of the channel.": "Sintaksa: $bOP #kanal [nickname]$b\nOP daje određenom nadimku (nick-u), ili vama samima, administraciju nad kanalom. Ovu naredbu možete koristiti samo ako ste osnivač kanala.",
"Syntax: $bREGISTER #channel$b\n\nREGISTER lets you own the given channel. If you rejoin this channel, you'll be\ngiven admin privs on it. Modes set on the channel and the topic will also be\nremembered.": "Sintaksa: $bREGISTER #kanal$b\n\nREGISTER vam daje vlasništvo nad datim kanalom. Pri ulasku na kanal biće vam date administratorske privilegije. Postavljeni režimi (mode) i teme (Topic) bit će također zapamćeni.",
"Syntax: $bUNREGISTER #channel [code]$b\n\nUNREGISTER deletes a channel registration, allowing someone else to claim it.\nTo prevent accidental unregistrations, a verification code is required;\ninvoking the command without a code will display the necessary code.": "Sintaksa: $bUNREGISTER #kanal [code]$b\n\nUNREGISTER uklanja registraciju kanala, dopuštajući nekom drugom da postane vlasnik. Kako bi se izbjeglo slučajno brisanje, tj. uklanjanje registracije, pri uklanjanju se koristi i verifikacioni ključ.\nPozivanjem same naredbe bez koda prikazat će se potrebni kod/ključ."
}

View File

@ -1,54 +0,0 @@
{
"= Help Topics =\n\nCommands:\n%[1]s\n\nRPL_ISUPPORT Tokens:\n%[2]s\n\nInformation:\n%[3]s": "= Pomoć po temama =\n\nNaredbe:\n%[1]s\n\nRPL_ISUPPORT žetoni (Token-i):\n%[2]s\n\nInformacije:\n%[3]s",
"@+client-only-tags TAGMSG <target>{,<target>}\n\nSends the given client-only tags to the given targets as a TAGMSG. See the IRCv3\nspecs for more info: http://ircv3.net/specs/core/message-tags-3.3.html": "@+oznake-specifične-samo-za-klijent TAGMSG <cilj>{,<cilj>}\n\nDaje zadane oznake specifične samo za klijente danim ciljevima kao TAGMSG. Za više informacija pogledajte IRCv3 specifikacije: http://ircv3.net/specs/core/message-tags-3.3.html",
"AMBIANCE <target> <text to be sent>\n\nThe AMBIANCE command is used to send a scene notification to the given target.": "AMBIANCE <cilj> <poruka koju se šalje>\n\nNaredba AMBIANCE se koristi za slanje obavijesti o sceni/ambijentu zadanom cilju.",
"AUTHENTICATE\n\nUsed during SASL authentication. See the IRCv3 specs for more info:\nhttp://ircv3.net/specs/extensions/sasl-3.1.html": "AUTHENTICATE\n\nKoristi se tijekom SASL provjere autentičnosti. Za više informacija pogledajt IRCv3 specifikacije:\nhttp://ircv3.net/specs/extensions/sasl-3.1.html",
"AWAY [message]\n\nIf [message] is sent, marks you away. If [message] is not sent, marks you no\nlonger away.": "AWAY [poruka]\n\nAko je [poruka] poslana, to Vas označava kao odsutne. Ako [poruka] nije poslana, označava da više niste odsutni.",
"CAP <subcommand> [:<capabilities>]\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": "CAP <podnaredba> [:<sposobnosti>]\n\nKoristi se u pregovaranju o sposobnostima. Za više informacija pogledajte IRCv3 specifikacije:\nhttp://ircv3.net/specs/core/capability-negotiation-3.1.html\nhttp://ircv3.net/specs/core/capability-negotiation-3.2.html",
"HELP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELP <argument>\n\nZatražite objašnjenje <argumenta> ili \"index\" popisa tema pomoći.",
"HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELPOP <argument>\n\nPogledaj objašnjenje <argumenta>, ili \"index\" za popis tema pomoći.",
"INFO\n\nSends information about the server, developers, etc.": "INFO\n\nDaje informacije o serveru, developerima, i slično.",
"INVITE <nickname> <channel>\n\nInvites the given user to the given channel, so long as you have the\nappropriate channel privs.": "INVITE <nadimak> <kanal>\n\nPoziva dotičnog korisnika na navedeni kanal, pod uvjetom da imate\nodgovarajuće ovlasti za taj kanal.",
"ISON <nickname>{ <nickname>}\n\nReturns whether the given nicks exist on the network.": "ISON <nadimak>{ <nadimak>}\n\nOdgovara da li zadani nadimak postoji na mreži.",
"JOIN <channel>{,<channel>} [<key>{,<key>}]\n\nJoins the given channels with the matching keys.": "JOIN <kanal>{,<kanal>} [<ključ>{,<ključ>}]\n\nDozvoljava pristup kanalu uz posjedovanje odgovarajućeg ključa.",
"KICK <channel> <user> [reason]\n\nRemoves the user from the given channel, so long as you have the appropriate\nchannel privs.": "KICK <kanal> <korisnik> [reason]\n\nUklanja korisnika sa navedenog kanala, pod uslovom da imate odgovarajuće ovlasti na kanalu da to učinite.",
"KILL <nickname> [reason]\n\nRemoves the given user from the network, showing them the reason if it is\nsupplied.": "KILL <nadimak> [reason] \n\nUklanja navedenog korisnika sa mreže prikazujući mu razlog uklanjanja, ako je rezlog naveden.",
"LANGUAGE <code>{ <code>}\n\nSets your preferred languages to the given ones.": "LANGUAGE <kod>{ <kode>}\n\nPostavlja željene jezike na one čije ste kodove navedli.",
"LIST [<channel>{,<channel>}] [<elistcond>{,<elistcond>}]\n\nShows information on the given channels (or if none are given, then on all\nchannels). <elistcond>s modify how the channels are selected.": "LIST [<kanal>{,<kanall>}] [<elistuslov>{,<elistuslov>}]\n\nOva naredba daje informacije o navedenim kanalima (ili ako nisu navedeni, onda ispisuje listu svih kanala). <elistuslov> određuje način kako su kanali odabrani.",
"LUSERS [<mask> [<server>]]\n\nShows statistics about the size of the network. If <mask> is given, only\nreturns stats for servers matching the given mask. If <server> is given, the\ncommand is processed by that server.": "LUSERS [<maska> [<poslužitelj>]]\n\nPrikazuje statistiku o veličini mreže. Ako je <maska> zadana, vraća samo statistiku za poslužitelje koji odgovaraju datoj maski. Ako je dan <poslužitelj>, naredbu obrađuje taj poslužitelj.",
"MODE <target> [<modestring> [<mode arguments>...]]\n\nSets and removes modes from the given target. For more specific information on\nmode characters, see the help for \"modes\".": "MODE <cilj> [<nizrežima> [<argumenti režima>...]]\n\nPostavlja i uklanja režime (modove) sa zadanog cilja. Za detaljnije informacije o oznakama režima pogledajte pomoć za \"režime\".",
"MONITOR <subcmd>\n\nAllows the monitoring of nicknames, for alerts when they are online and\noffline. The subcommands are:\n\n MONITOR + target{,target}\nAdds the given names to your list of monitored nicknames.\n\n MONITOR - target{,target}\nRemoves the given names from your list of monitored nicknames.\n\n MONITOR C\nClears your list of monitored nicknames.\n\n MONITOR L\nLists all the nicknames you are currently monitoring.\n\n MONITOR S\nLists whether each nick in your MONITOR list is online or offline.": "MONITOR <podnaredba>\n\nOmogućuje praćenje nadimaka kao upozorenja kada su na mreži i izvan mreže. Podkomande su:\n\nMONITOR + target{,target}\nDodaje zadana imena Vašoj listi nadziranih nadimaka.\n\nMONITOR - target{,target}\nUklanja zadana imena sa Vaše liste nadziranih nadimaka.\n\nMONITOR C\nPrazni u potpunosti listu nadziranih nadimaka.\n\nMONITOR L\nIspisuje listu nadimaka koje trenutno nadzirete.\n\nMONITOR S\nIspisuje za svaki nadimak sa liste da li je trenutno na mreži ili izvan nje.",
"MOTD [server]\n\nReturns the message of the day for this, or the given, server.": "MOTD [poslužitelj]\n\nIspisuje poruku dana za trenutni ili za zadani poslužitelj (server).",
"NAMES [<channel>{,<channel>}]\n\nViews the clients joined to a channel and their channel membership prefixes. To\nview the channel membership prefixes supported by this server, see the help for\n\"PREFIX\".": "NAMES [<kanall>{,<kanall>}]\n\nPrikazuje listu klijenata pridruženih kanalu i njihove prefikse za članstvo na kanalu. Za prikaz prefiksa članstva na kanalima koje ovaj poslužitelj podržava, pogledajte pomoć za \"PREFIX\".",
"NICK <newnick>\n\nSets your nickname to the new given one.": "NICK <novinadimak>\n\nPostavlja (mijenja) postojeći nadimak u novi zadani nadimak.",
"NOTICE <target>{,<target>} <text to be sent>\n\nSends the text to the given targets as a NOTICE.": "NOTICE <cilj>{,<cilj>} <tekst koji se šalje>\n\nŠalje tekst na zadane ciljeve kao OBAVIJEST.",
"NPC <target> <sourcenick> <text to be sent>\n\t\t\nThe NPC command is used to send a message to the target as the source.\n\nRequires the roleplay mode (+E) to be set on the target.": "NPC <cilj> <nadimakizvora> <tekst koji se šalje>\n\nNPC naredba se koristi kako biste cilju poslali poruku kao izvor.\n\nZahtjeva da (roleplay mode) režim za igranje uloga (+E) bude postavljen na cilju.",
"NPCA <target> <sourcenick> <text to be sent>\n\t\t\nThe NPC command is used to send an action to the target as the source.\n\nRequires the roleplay mode (+E) to be set on the target.": "NPCA <cilj> <nadimakizvora> <tekst koji se šalje>\n\nNPC naredba se koristi kako biste cilju poslali akciju kao izvor.\n\nZahtjeva da (roleplay mode) režim za igranje uloga (+E) bude postavljen na cilju.",
"PART <channel>{,<channel>} [reason]\n\nLeaves the given channels and shows people the given reason.": "PART <kanal>{,<kanal>} [reason]\n\nNapušta navedeni kanal/e i prikazuje drugim korisnicima navedeni razlog.",
"PASS <password>\n\nWhen the server requires a connection password to join, used to send us the\npassword.": "PASS <lozinka>\n\nKoristi se za slanje lozinke kada poslužitelj (server) zahtijeva lozinku za povezivanje.",
"PING <args>...\n\nRequests a PONG. Used to check link connectivity.": "PING <argumenti>...\n\nPotražuje PONG. Koristi se za provjeru povezanosti.",
"PONG <args>...\n\nReplies to a PING. Used to check link connectivity.": "PONG <argumenti>...\n\nOdgovara na PING. Koristi se za provjeru povezanosti.",
"PRIVMSG <target>{,<target>} <text to be sent>\n\nSends the text to the given targets as a PRIVMSG.": "PRIVMSG <cilj>{,<cilj>} <tekst koji se šalje>\n\nŠalje tekst prema cilju (target) kao PRIVMSG.",
"QUIT [reason]\n\nIndicates that you're leaving the server, and shows everyone the given reason.": "QUIT [reason]\n\nUkazuje na to da napuštate server i prikazuje svima dati razlog.",
"REHASH\n\nReloads the config file and updates TLS certificates on listeners": "REHASH\n\nPonovno učitava konfiguracione datoteke i ažurira TLS certifikate na slušačima (listeners)",
"RENAME <channel> <newname> [<reason>]\n\nRenames the given channel with the given reason, if possible.\n\nFor example:\n\tRENAME #ircv2 #ircv3 :Protocol upgrades!": "RENAME <kanal> <novoimekanala> [<razlog>]\n\nPreimenuje navedeni kanal iz navedenog razloga, ako je to moguće.\n\nNa primjer:\nRENAME #ircv2 #ircv3 :Nadgradnja protokola!",
"RESUME <oldnick> [timestamp]\n\nSent before registration has completed, this indicates that the client wants to\nresume their old connection <oldnick>.": "RESUME <starinadimak> [timestamp]\n\nŠalje se prije dovršetka registracije, sto znači da klijent želi ponovno uspostaviti staru vezu <starinadimak>.",
"RPL_ISUPPORT CASEMAPPING\n\nOragono supports an experimental unicode casemapping designed for extended\nUnicode support. This casemapping is based off RFC 7613 and the draft rfc7613\ncasemapping spec here: https://oragono.io/specs.html": "RPL_ISUPPORT CASEMAPPING\n\nOragono podržava eksperimentalni unicode casemapping dizajniran za proširenu Unicode podršku. Ovakav casemapping temelji se na RFC 7613 i nacrtu rfc7613 Casemapping specifikacije ovdje: https://oragono.io/specs.html",
"RPL_ISUPPORT PREFIX\n\nOragono supports the following channel membership 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.": "RPL_ISUPPORT PREFIX\n\nOragono podržava slijedeće prefikse članova kanala:\n\n +q (~) | Mode - Osnivač kanala\n +a (&) | Mode - Administrator kanala\n +o (@) | Mode - Operator kanala\n +h (%) | Mode - Poluoperator kanala (Halfop)\n +v (+) | Mode - Mogućnost razgovora na kanalu (Voice).",
"SAJOIN [nick] #channel{,#channel}\n\nForcibly joins a user to a channel, ignoring restrictions like bans, user limits\nand channel keys. If [nick] is omitted, it defaults to the operator.": "SAJOIN [nick] #kanal{,#kanal}\n\nPrisilno pridružuje korisnika kanalu, zanemarujući ograničenja kao što su zabrane (ban), korisnička ograničenja i lozinke kanala. Ako je [nick] izostavljen, zadana postavka je operator.",
"SAMODE <target> [<modestring> [<mode arguments>...]]\n\nForcibly sets and removes modes from the given target -- only available to\nopers. For more specific information on mode characters, see the help for\n\"cmode\" and \"umode\".": "SAMODE <cilj> [<karakterirežima> [<mode argumenti>...]]\n\nPrisilno postavlja i uklanja modove iz zadanog cilja - dostupno samo opersima. Za detaljnije informacije o karakterima režima pogledajte pomoć za \"cmode\" i \"umode\".",
"SANICK <currentnick> <newnick>\n\nGives the given user a new nickname.": "SANICK <trenutninadimak> <novinadimak>\n\nDaje zadanom korisniku novi nadimak.",
"SCENE <target> <text to be sent>\n\nThe SCENE command is used to send a scene notification to the given target.": "SCENE <cilj> <tekst koji se šalje>\n\nNaredba SCENE se koristi kako bi se datom cilju poslala notifikacija o \"sceni\".",
"SETNAME <realname>\n\nThe SETNAME command updates the realname to be the newly-given one.": "SETNAME <realname>\n\nSETNAME naredba ažurira pravoime, kako bi ono bilo novo-dano ime.",
"TIME [server]\n\nShows the time of the current, or the given, server.": "TIME [server]\n\nPrikazuje vrijeme poslužitelja (servera) na kojem se nalazite ili zadanog poslužitelja.",
"TOPIC <channel> [topic]\n\nIf [topic] is given, sets the topic in the channel to that. If [topic] is not\ngiven, views the current topic on the channel.": "TOPIC <kanal> [topic]\n\nAko je [topic] unešen, postavlja temu (topic) kanala u zadanu vrijednost. Ako [topic] nije zadan, pregleda trenutnu temu kanala.",
"UNDLINE <ip>/<net>\n\nRemoves an existing ban on an IP address or a network.\n\n<net> is specified in typical CIDR notation. For example:\n\t127.0.0.1/8\n\t8.8.8.8/24": "UNDLINE <ip>/<net>\n\nUklanja potojeću zabranu za datu IP adresu ili mrežu.\n\n<net> je specificirana uobičajenom CIDR notacijom. Na primjer:\n27.0.0.1/8\n\t8.8.8.8/24",
"UNKLINE <mask>\n\nRemoves an existing ban on a mask.\n\nFor example:\n\tdan\n\tdan!5*@127.*": "UNKLINE <maska>\n\nUklanja potojeću zabranu za datu masku.\n\nNa primjer:\n dan\n dan!5*@127.*",
"USER <username> 0 * <realname>\n\nUsed in connection registration, sets your username and realname to the given\nvalues (though your username may also be looked up with Ident).": "USER <korisničkoime> 0 * <pravoime>\n\nUpotrijebava se pri registraciji konekcije, postavlja vaše korisničko ime i stvarno ime na zadane vrijednosti (iako vaše korisničko ime također može biti traženo pomoću Ident-a).",
"USERHOST <nickname>{ <nickname>}\n\t\t\nShows information about the given users. Takes up to 10 nicknames.": "USERHOST <nadimak>{ <nadimak>}\n\nPrikazuje informacije o danim korisnicima. Prihvata do 10 nadimaka.",
"VERSION [server]\n\nViews the version of software and the RPL_ISUPPORT tokens for the given server.": "VERSION [poslužitelj]\n\nPrikazuje verziju softvera i RPL_ISUPPORT oznake za dati poslužitelj.",
"WEBIRC <password> <gateway> <hostname> <ip> [:<flags>]\n\nUsed by web<->IRC gateways and bouncers, the WEBIRC command allows gateways to\npass-through the real IP addresses of clients:\nircv3.net/specs/extensions/webirc.html\n\n<flags> is a list of space-separated strings indicating various details about\nthe connection from the client to the gateway, such as:\n\n- tls: this flag indicates that the client->gateway connection is secure": "WEBIRC <lozinka> <gateway> <hostname> <ip> [:<flags>]\n\nKoristi se od strane web<->IRC pristupnika (gateways) i bouncer-a, WEBIRC naredbba omogućava pristupnicima (gateways) da propuste stvarne IP adrese klijenata:\nircv3.net/specs/extensions/webirc.html\n\n<flags> je lista praznim prostorom odvojenih nizova koji upućuju na različite detalje o vezi sa klijenta prema pristupniku (gateway), kao npr.:\n\n-tls: ova oznaka (flag) indicira da je veza klijent->pristupnik sigurna",
"WHO <name> [o]\n\nReturns information for the given user.": "WHO <ime> [o]\n\nUzvraća informacijama o datom korisniku.",
"WHOIS <client>{,<client>}\n\nReturns information for the given user(s).": "WHOIS <korisnik>{,<korisnik>}\n\nUzvraća informacijama o datom korisnik-u/cima.",
"WHOWAS <nickname>\n\nReturns historical information on the last user with the given nickname.": "WHOWAS <nadimak>\n\nVraća podatke iz prošlosti o posljednjem korisniku s tim nadimkom."
}

View File

@ -1,7 +0,0 @@
{
"Syntax: $bDEL <user>$b\n\nDEL deletes a user's vhost.": "Sintaksa: $bDEL<user>$b\n\nDEL briše korisnikov vhost.",
"Syntax: $bOFF$b\n\nOFF disables your vhost, if you have one approved.": "Sintaksa: $bOFF$b\n\nOFF onemogućuje vaš već odobreni vhost.",
"Syntax: $bON$b\n\nON enables your vhost, if you have one approved.": "Sintaksa: $bON$b\n\nON omogućuje vaš vhost, pod uslovom da vam je vhost odobren.",
"Syntax: $bSET <user> <vhost>$b\n\nSET sets a user's vhost, bypassing the request system.": "Sintaksa: $bSET<user><vhost>$b\n\nSET postavlja korisnikov vhost, zaobilazeći uobičajenu rutinu sistema zahtjeva.",
"Syntax: $bSTATUS [user]$b\n\nSTATUS displays your current vhost, if any, and the status of your most recent\nrequest for a new one. A server operator can view someone else's status.": "Sintaksa: $bSTATUS[user]$b \n\nSTATUS prikazuje vaš trenutni vhost, ako postoji; i status vašeg posljednjeg poslanog zahtjeva za novi vhost. Server operater može vidjeti status drugih korisnika."
}

View File

@ -1,197 +0,0 @@
{
"$bWarning: unregistering this account will remove its stored privileges.$b": "$bWarning: uklanjanje registracije ovog računa će ukloniti njegove pohranjene privilegije.$b",
"$bWarning: unregistering this channel will remove all stored channel attributes.$b": "$bWarning: uklanjanje registracije ovog kanala će ukloniti sve pohranjene atribute knala.$b",
"%[1]s [account: %[2]s] joined the channel": "%[1]s [Račun: %[2]s] se priključio kanalu",
"%[1]s changed nick to %[2]s": "%[1]s mijenja nick u %[2]s",
"%[1]s kicked %[2]s (%[3]s)": "%[1]s izbačen %[2]s (%[3]s)",
"%[1]s left the channel (%[2]s)": "%[1]s napušta kanal (%[2]s)",
"%[1]s quit (%[2]s)": "%[1]s prestati (quit) (%[2]s)",
"%s joined the channel": "%s se priključuje kanalu",
"*** $bEnd of %s HELP$b ***": "*** $bEnd of %s POMOĆI$b ***",
"*** Could not find your username": "*** Vaše korisničko ime nije moguće pronaći",
"*** Found your username": "*** Vaše korisničko ime je pronađeno",
"*** Got a malformed username, ignoring": "*** Dostavljeno pogrešno formirano korisničko ime, ignoriranje",
"*** Looking up your username": "*** Potraga za vašim korisničim imenom",
"- %s Message of the day - ": "- %s Poruka dana - ",
"... and other commands which have been disabled": "... i druge naredbe koje su onemogućene",
"Account %[1]s has vhost: %[2]s": "Račun %[1]s ima vhost: %[2]s",
"Account %[1]s receives mode +%[2]s": "Račun %[1]s dobija mode +%[2]s",
"Account %s has no vhost": "Korisnički račun %s nema vhost",
"Account already exists": "Korisnički račun već postoji",
"Account created": "Korisnički račun kreiran",
"Account created, pending verification; verification code has been sent to %s": "Račun je izrađen, čeka se potvrda; verifikacioni kôd poslan je na %s",
"Account does not exist": "Korisnički račun ne postoji",
"Account: %s": "Račun: %s",
"Actual user@host, Actual IP": "Stvarni korisnik@host, stvarni IP",
"Added D-Line for %s": "Dodana D-Linija za %s",
"Added K-Line for %s": "Dodana K-Linija za %s",
"Added temporary (%[1]s) D-Line for %[2]s": "Dodana privremena (%[1]s) D-Linija za %[2]s",
"Added temporary (%[1]s) K-Line for %[2]s": "Dodana privremena (%[1]s) K-Linija za %[2]s",
"Additional grouped nick: %s": "Dodatni grupirani nadimak: %s",
"An error occurred": "Došlo je do pogreške",
"Authentication successful": "Autentikacija uspješna",
"Bad or unauthorized PROXY command": "Pogrešna ili nedopuštena PROXY naredba",
"CTCP messages are disabled over Tor": "CTCP poruke su onemogućene preko Tor-a",
"Can't change modes for other users": "Ne možete mijenjati režime (mode-ove) za druge korisnike",
"Can't view modes for other users": "Nije moguće pregledati režime (mode-ove) za druge korisnike",
"Cannot join channel (+%s)": "Pristup kanalu nije moguć (+%s)",
"Cannot rename channel": "Promjena imena kanala nije moguća",
"Cannot resume connection": "Povezivanje nije moguće",
"Cannot resume connection, connection registration has already been completed": "Povezivanje nije moguće, registracija veze je već dovršena",
"Cannot resume connection, old and new clients must have TLS": "Povezivanje nije moguće, postojeći i novi klijenti moraju imati TLS",
"Cannot resume connection, token is not valid": "Povezivanje nije moguće, token nije važeći",
"Channel %[1]s has %[2]d persistent modes set": "Kanal %[1]s ima postavljen %[2]d uporni način rada (presistent mode)",
"Channel %s is now unregistered": "Kanal %s sada nije registrovan",
"Channel %s successfully registered": "Kanal %s uspješno registrovan",
"Channel does not exist": "Nepostojeći kanal",
"Channel doesn't have roleplaying mode available": "Ovaj kanal nema dostupan mode za igranje",
"Channel is not registered": "Kanal nije registrovan",
"Channel list is full": "Lista kanala je puna",
"Channel renamed": "Kanal je preimenovan",
"Channel renamed: %s": "Kanal preimenovan: %s",
"Client reconnected": "Klijent je ponovo povezan",
"Command restricted": "Naredba je ograničena",
"Core Developers:": "Glavni razvojni programeri:",
"Could not find given client": "Zadani klijent nije mogao biti pronađen",
"Could not parse IP address or CIDR network": "Nije moguće rasčlaniti IP adresu ili CIDR mrežu",
"Could not register": "Ne može se registrirati",
"Could not remove ban [%s]": "Nije moguće ukloniti zabranu (ban) [%s]",
"Could not successfully save new D-LINE: %s": "Nije moguće uspješno spremiti novu D-Liniju: %s",
"Could not successfully save new K-LINE: %s": "Nije moguće uspješno spremiti novi K-Liniju: %s",
"Could not ungroup nick": "Nick nije moguće izdvojiti iz grupe",
"Created at: %s": "Kreirano u: %s",
"End of /HELPOP": "Kraj /HELPOP",
"End of /INFO": "Kraj /INFO",
"End of /WHOIS list": "Kraj /WHOIS liste",
"End of LIST": "Kraj LISTE",
"End of MOTD command": "Kraj MOTD naredbe",
"End of NAMES list": "Kraj liste IMENA",
"End of WHO list": "Kraj WHO liste",
"End of WHOWAS": "Kraj WHOWAS",
"End of list": "Kraj liste",
"Erroneous nickname": "Nedopušten nadimak",
"Error reserving nickname": "Greška kod rezervacije nadimka (nick-a)",
"Error while unregistering account": "Greška prilikom uklanjanja registracije korisničkog računa",
"First param must be a mask or channel": "Prvi parametar mora biti maska ili kanal",
"GHOSTed by %s": "GHOST-irano od strane %s",
"HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELPOP <argument>\n\nPogledaj objašnjenje <argumenta>, ili \"index\" za popis tema pomoći.",
"Help not found": "Pomoć nije pronađena",
"Hostname: %s": "Naziv poslužitelja (Hostname): %s",
"I have %[1]d clients and %[2]d servers": "Imam %[1]d kanala i %[2]d servera",
"IP address: %s": "IP adresa: %s",
"IRC Operators online": "IRC Operateri na mreži",
"Input line too long": "Ulazna linija je preduga",
"Insufficient oper privs": "Nedostatak operatorskih privilegija",
"Insufficient privileges": "Nedovoljne privilegije",
"Internal error": "Interna greška",
"Invalid CAP subcommand": "Netačna CAP podnaredba",
"Invalid account name": "Pogrešan naziv računa",
"Invalid mode change": "Nevažeća promjena režima (moda)",
"Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "Nevažeći parametri. Za upotrebu koristi / msg %[1]s HELP %[2]s",
"Invalid vhost": "Nevažeći vhost",
"Language %s is not supported by this server": "Jezik %s nije podržan od strane servera",
"Language preferences have been set": "Jezičke preference su postavljene",
"Last active: %s": "Zadnja aktivnost: %s",
"MOTD File is missing": "MOTD datoteka nedostaje",
"Malformed username": "Pogrešno formirano korisničko ime",
"Mask isn't valid": "Maska nije validna",
"Network service, for more info /msg %s HELP": "Mrežna usluga, za više informacija: /msg %s HELP",
"Nickname is already in use": "Nadimak je već u upotrebi",
"Nickname is reserved by a different account": "Nadimak je rezerviran za drugi korisnički račun",
"No DLINEs have been set!": "Ni jedan DLINE nije postavljen!",
"No changes were made": "Nije bilo promjena",
"No nickname given": "Nadimak nije dodjeljen",
"No such account": "Takav račun ne postoji",
"No such channel": "Nepostojeći kanal",
"No such nick": "Takav nadimak nije prisutan",
"No topic is set": "Tema (topic) nije postavljena",
"Not enough parameters": "Nedovoljno parametara",
"Only channel founders can change registered channels": "Samo osnivači kanala mogu mijenjati registrovane kanale",
"Only the channel founder can do this": "Samo osnivač kanala može ovo da izvrši",
"Oragono is released under the MIT license.": "Oragono se izdaje pod licencom MIT-a.",
"Passphrase contains forbidden characters or is otherwise invalid": "Lozinka sadrži zabranjene znakove ili je na drugi način nevažeća",
"Password changed": "Lozinka promjenjena",
"Password could not be changed due to server error": "Lozinka nije mogla biti promijenjena zbog pogreške na poslužitelju (serveru)",
"Password incorrect": "Netačna lozinka",
"Permission Denied": "Pristup nije odobren",
"Please wait at least %v and try again": "Pričekajte najmanje %v, pa pokušajte ponovo",
"Received malformed line": "Primljena neispravna linija",
"Registered at: %s": "Registrirano u: %s",
"Registered channel: %s": "Registriran kanal: %s",
"Registration requires a valid e-mail address": "Za registraciju je potrebna važeća e-mail adresa",
"Remote servers not yet supported": "Udaljeni poslužitelji još nisu podržani",
"Removed D-Line for %s": "Uklonjena D-Linija za %s",
"Removed K-Line for %s": "Uklonjena K-Linija za %s",
"Resume may have lost up to %d seconds of history": "Nastavak je možda izgubio do %d sekundi povijesti",
"SASL authentication aborted": "SASL autentikacija obustavljena",
"SASL authentication failed": "SASL autentikacija neuspjela",
"SASL authentication failed, you are not connecting with a certificate": "SASL provjera autentičnosti nije uspjela, ne povezujete se s certifikatom",
"SASL authentication failed: Invalid auth blob": "SASL autentikacija neuspjela: Neispravan autentikacijski blob",
"SASL authentication failed: Invalid b64 encoding": "SASL provjera autentičnosti nije uspjela: Nevažeće b64 kodiranje",
"SASL authentication failed: Passphrase too long": "SASL provjera autentičnosti nije uspjela: fraza preduga",
"SASL authentication failed: authcid and authzid should be the same": "SASL provjera autentičnosti nije uspjela: authcid i authzid trebali bi biti isti",
"SASL message too long": "SASL poruka preduga",
"Server notice masks": "Maske za obavijesti poslužitelja",
"Successfully cleared vhost": "Uspješno izbrisan vhost",
"Successfully disabled your vhost": "Vaš vhost je uspješno onemogućen",
"Successfully enabled your vhost": "Vaš vhost je uspješno omogućen",
"Successfully grouped nick %s with your account": "Nadimal %s uspješno grupiran s vašim računom",
"Successfully registered account %s": "Uspješno registrovan korisnički račun %s",
"Successfully set vhost": "Uspješno postavljen vhost",
"Successfully ungrouped nick %s with your account": "Uspješno od-grupisan nadimak %s od korisničkog računa",
"Successfully unregistered account %s": "Uspješno poništena registracija računa %s",
"That channel is not registered": "Taj kanal nije registrovan",
"That nickname is already reserved by someone else": "Nadimak je već rezervisan za nekog drugog",
"That nickname is not registered": "Nadimak nije registriran",
"There are %[1]d users and %[2]d invisible on %[3]d server(s)": "Postoji %[1]d korisnika i %[2]d nevidljivih na %[3]d poslužitelj-u/ima",
"There was no such nickname": "Nije bilo takvog nadimka",
"They aren't on that channel": "Nisu pronađeni na tom kanalu",
"This ban matches you. To DLINE yourself, you must use the command: /DLINE MYSELF <arguments>": "Ova zabrana odgovara Vama. Da biste DLINE sami sebe, za otkazivanje ove zabrane, morate koristiti naredbu: / DLINE MYSELF <arguments>",
"This ban matches you. To KLINE yourself, you must use the command: /KLINE MYSELF <arguments>": "Ova zabrana odgovara Vama. Da biste izveli KLINE sami na sebi, a za otkazivanje ove zabrane, morate koristiti naredbu: /KLINE MYSELF <arguments>",
"This command has been disabled by the server administrators": "Ova naredba je onemogućen od strane administratora poslužitelja",
"This server is in debug mode and is logging all user I/O. If you do not wish for everything you send to be readable by the server owner(s), please disconnect.": "Ovaj poslužitelj je u načinu za otklanjanje grešaka i bilježi sve korisničke I/O. Ako ne želite da sve što pošaljete bude vidljivo vlasniku/cima poslužitelja, diskonektujte se.",
"This server was created %s": "Ovaj server je kreiran %s",
"This vhost is currently disabled, but can be enabled with /HS ON": "Ovaj vhost je trenutno onemogućen, ali se može omogućiti pomoću / HS ON",
"Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "Vremenska oznaka nije u formatu 2006-01-02T15:04:05.999Z, zanemarujem je",
"Translators:": "Prevodioci:",
"Unknown command": "Nepoznata naredba",
"Unknown command. To see available commands, run: /%s HELP": "Nepoznata naredba. Za pregled raspoloživih naredbi upotrijebi: /%s HELP",
"Unknown subcommand": "Nepoznata podnaredba",
"User doesn't have roleplaying mode enabled": "Korisnik nema omogućen režim (mode) za igranja uloga",
"Verification code: %s": "Verifikacioni kod: %s",
"Verify your account on %s": "Potvrdite svoj račun na %s",
"WEBIRC command is not usable from your address or incorrect password given": "Naredba WEBIRC se ne može koristiti s Vaše adrese ili je data netačna lozinka",
"You are banned from this server (%s)": "Zabranjen vam je pristup ovom serveru (%s)",
"You are no longer authorized to be on this server": "Više niste ovlašteni biti na ovom poslužitelju (serveru)",
"You are no longer marked as being away": "Više niste označeni kao Odsutni",
"You are now an IRC operator": "Vi ste sada IRC operater",
"You are now logged in as %s": "Sada ste prijavljeni kao %s",
"You can't GHOST yourself (try /QUIT instead)": "Ne možete GHOST-ovati sami sebe (umjesto toga pokušajte /QUIT)",
"You can't ungroup your primary nickname (try unregistering your account instead)": "Ne možete razgrupirati svoj primarni nadimak (umjesto toga pokušajte poništiti registraciju svog računa)",
"You don't have enough channel privileges": "Nemate dovoljno privilegija kanala",
"You don't own that nick": "Vi niste vlasnik tog nadimka",
"You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "Već ste registrirali maksimalan dozvoljeni broj kanala; Pokušajte odjaviti neki od njih koristeći /CS UNREGISTER",
"You have been banned from this server (%s)": "Postavljena Vam je zabrana pristupa (ban) ovom serveru (%s)",
"You have been marked as being away": "Označeni ste kao Odsutni",
"You have too many nicks reserved already (you can remove some with /NS DROP)": "Već imate previše rezerviranih nadimaka (neke možete ukloniti pomoću / NS DROP)",
"You may not reregister": "Ne možete se ponovno registrirati",
"You must be an oper on the channel to register it": "Morate biti operater na kanalu da biste ga registrirali",
"You must specify an account": "Morate navesti korisnički račun",
"You need to register before you can use that command": "Morate se registrirati da biste mogli koristiti tu komandu",
"You specified too many languages": "Naveli ste previše jezika",
"You're already logged into an account": "Već ste prijavljeni na korisnički račun",
"You're already opered-up!": "Već ste postavljeni za operatora!",
"You're not a channel operator": "Vi niste operator kanala",
"You're not logged into an account": "Niste prijavljeni na korisnički račun",
"You're not on that channel": "Vi niste na tom kanalu",
"You're now logged in as %s": "Sada ste prijavljni kao %s",
"Your host is %[1]s, running version %[2]s": "Vaš host %[1]s, izvodi verziju %[2]s",
"are supported by this server": "ovaj server podržava",
"channels formed": "kanali oformljeni",
"has client certificate fingerprint %s": "ima korisnički otisak certifikata %s",
"is a $bBot$b on %s": "je $bBot$b na %s",
"is an unknown mode character to me": "nije mi poznata ova oznaka režima",
"is logged in as": "je prijavljen/a kao",
"is using a secure connection": "koristi sigurnu konekciju",
"seconds idle, signon time": "sekundi u mirovanju, trajanje prijave"
}

View File

@ -1,13 +0,0 @@
{
"Insufficient privileges": "Nedovoljne privilegije",
"Password incorrect": "Netačna lozinka",
"Syntax: $bDROP [nickname]$b\n\nDROP de-links the given (or your current) nickname from your user account.": "Sintaksa: $bDROP [nickname]$b\n\nDROP prekida povezanost datog (ili trenutnog) nadimka sa korisničkim računom.",
"Syntax: $bGHOST <nickname>$b\n\nGHOST disconnects the given user from the network if they're logged in with the\nsame user account, letting you reclaim your nickname.": "Sintaksa: $bGHOST <nickname>$b\n\nGHOST diskonektuje korisnika s mreže ako su prijavljeni s istim korisničkim računom, što vam omogućuje povrat vašeg nadimka.",
"Syntax: $bGROUP$b\n\nGROUP links your current nickname with your logged-in account, so other people\nwill not be able to use it.": "Sintaksa: $bGROUP$b\n\nGROUP povezuje tvoj trenutni nadimak (nickname) sa računom na koji si prijavljen, kako drugi nebi mogli da ga koriste.",
"Syntax: $bIDENTIFY <username> [password]$b\n\nIDENTIFY lets you login to the given username using either password auth, or\ncertfp (your client certificate) if a password is not given.": "Sintaksa: $bIDENTIFY <username> [password]$b\n\nIDENTIFY omogućuje prijavu na zadano korisničko ime pomoću lozinke ili certfp (certifikat vašeg klijenta) ako lozinka nije dana.",
"Syntax: $bINFO [username]$b\n\nINFO gives you information about the given (or your own) user account.": "Sintaksa: $bINFO [username]$b\n\nINFO daje informacije o danom (ili vlastitom) korisničkom računu.",
"Syntax: $bSADROP <nickname>$b\n\nSADROP forcibly de-links the given nickname from the attached user account.": "Sintaksa: $bSADROP <nickname>$b\n\nSADROP prisilno odvaja dati nadimak (nickname) od korisničkog računa za koji je trenutno vezan.",
"Syntax: $bUNREGISTER <username> [code]$b\n\nUNREGISTER lets you delete your user account (or someone else's, if you're an\nIRC operator with the correct permissions). To prevent accidental\nunregistrations, a verification code is required; invoking the command without\na code will display the necessary code.": "Sintaksa: $bUNREGISTER <username> [code]$b\n\nUNREGISTER vam omogućuje da izbrišete svoj korisnički račun (ili tuđi, ako ste IRC operator s ispravnim ovlastima). Da bi se spriječilo slučajno poništavanje registracije, potreban je kontrolni kod; pozivanjem naredbe bez koda prikazat će se potreban kod.",
"Syntax: $bVERIFY <username> <code>$b\n\nVERIFY lets you complete an account registration, if the server requires email\nor other verification.": "Sintaksa: $bVERIFY <username> <code>$b\n\nVERIFY omogućuje dovršetak registracije računa, ako poslužitelj (server) zahtijeva e-mail ili drugu provjeru.",
"You're not logged into an account": "Niste prijavljeni na korisnički račun"
}

View File

@ -1,15 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Bosanski"
#code - this is what the language will be referred to in our list of languages
code: "bs"
#contributors - people who have contributed to this translation
contributors: "Elvedin Husic <elvedinhusiccontact@gmail.com>"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1,13 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Català"
#code - this is what the language will be referred to in our list of languages
code: "ca"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1,13 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Čeština"
#code - this is what the language will be referred to in our list of languages
code: "cs"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{}

View File

@ -1,13 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Dansk"
#code - this is what the language will be referred to in our list of languages
code: "da"
#incomplete - whether to mark this language as incomplete
incomplete: true

View File

@ -1,16 +0,0 @@
{
"$bAMODE$b modifies persistent mode settings for channel members.": "$bAMODE$b modifiziert permanente Modi-Einstellungen für Channel Mitglieder.",
"$bCLEAR$b removes users or settings from a channel.": "$bCLEAR$b entfernt User oder Einstellungen vom Channel.",
"$bINFO$b displays info about a registered channel.": "$bINFO$b zeigt Informationen zu einem registrierten Channel an.",
"$bOP$b makes the given user (or yourself) a channel admin.": "$bOP$b gibt dem angegeben Nick (oder Dir selbst) Admin Rechte für den Channel.",
"$bPURGE$b blacklists a channel from the server.": "$bPURGE$b für einen Channel zur Sperrliste des Servers hinzu.",
"$bREGISTER$b lets you own a given channel.": "$bREGISTER$b macht Dich zum Besitzer des angebenen Channels.",
"$bTRANSFER$b transfers ownership of a channel to another user.": "$bTRANSFER$b transferiert die Besitzrechte eines Channels auf einen anderen Benutzer.",
"$bUNREGISTER$b deletes a channel registration.": "$bUNREGISTER$b löscht eine Channel-Registrierung.",
"ChanServ lets you register and manage channels.": "Mit ChanServ kannst Du Channels registrieren und verwalten.",
"Syntax: $INFO #channel$b\n\nINFO displays info about a registered channel.": "Syntax: $INFO #channel$b\n\nINFO zeigt Informationen zu einem registrierten Channel an.",
"Syntax: $bCLEAR #channel target$b\n\nCLEAR removes users or settings from a channel. Specifically:\n\n$bCLEAR #channel users$b kicks all users except for you.\n$bCLEAR #channel access$b resets all stored bans, invites, ban exceptions,\nand persistent user-mode grants made with CS AMODE.": "Syntax: $bCLEAR #channel ziel$b\n\nCLEAR entfernt User oder Einstellungen von einem Channel. Und zwar:\n\n$bCLEAR #channel users$b kickt alle User abgesehen von dir selbst.\n$bCLEAR #channel access$b setzt alle gespeicherten Bans, Einladungen und Ban-Ausnahmen zurück und erhält alle User-Mode-Einstellungen, die mit CS AMODE zugeteilt wurden.",
"Syntax: $bOP #channel [nickname]$b\n\nOP makes the given nickname, or yourself, a channel admin. You can only use\nthis command if you're the founder of the channel.": "Syntax: $bOP #channel [nickname]$b\n\nOP gibt dem angegeben Nick oder Dir selbst Admin Rechte für den Channel.\nDu kannst diesen Befehl nur ausführen, wenn Du Besitzer des Channels bist.",
"Syntax: $bREGISTER #channel$b\n\nREGISTER lets you own the given channel. If you rejoin this channel, you'll be\ngiven admin privs on it. Modes set on the channel and the topic will also be\nremembered.": "Syntax: $bREGISTER #channel$b\n\nREGISTER macht Dich zum Besitzer des angegebenen Channels. Wenn Du dem\nChannel wieder beitrittst bekommst Du automatisch Admin Rechte. Modi und\nThema des Channels werden auch dauerhaft gespeichert.",
"Syntax: $bUNREGISTER #channel [code]$b\n\nUNREGISTER deletes a channel registration, allowing someone else to claim it.\nTo prevent accidental unregistrations, a verification code is required;\ninvoking the command without a code will display the necessary code.": "Syntax: $bUNREGISTER #channel [code]$b\n\nUNREGISTER löscht eine Channel-Registrierung und erlaubt es anderen den\nChannel zu registrieren.\nUm ein versehentliches UNREGISTER zu verhindern, ist ein Verifzierungs-Code nötig.\nSendest Du den Befehl ohne einen Code, wird der notwendige Code angezeigt."
}

View File

@ -1,9 +0,0 @@
{
"= Help Topics =\n\nCommands:\n%[1]s\n\nRPL_ISUPPORT Tokens:\n%[2]s\n\nInformation:\n%[3]s": "= Hilfethemen =\n\nBefehle:\n%[1]s\n\nRPL_ISUPPORT Token:\n%[2]s\n\nInformation:\n%[3]s",
"== 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 v | Local vhost changes.\n\nTo set a snomask, do this with your nickname:\n\n /MODE <nick> +s <chars>\n\nFor instance, this would set the kill, oper, account and xline snomasks on dan:\n\n /MODE dan +s koux": "== Server Notice Masken==\n\nOragono unterstuetzt die foldgenden Server Notice Masken fuer Operatoren:\n\n a | Lokale Ankündigungen\n c | Lokale Client Verbindungen.\n j | Lokale Channel Actionen.\n k | Lokale Kills.\n n | Lokale Nick Wechsel.\n o | Lokale Oper Aktionen.\n q | Lokale Quits.\n t | Lokale /STATS Verweundung.\n u | Lokale Client Account Aktionen.\n x | Lokale X-Lines (DLINE/KLINE/etc).\n v | Lokale Vhost Veraenderungen.\n\nUm eine Snomask zu setzen/nutzen, mache folgendes mit Deinem Nickname:\n\n /MODE <nick> +s <chars>\n\nZum Beispiel, dis würde die Snomasks kill, oper, account und xline für dan setzen:\n\n /MODE dan +s koux",
"HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELPOP <thema>\n\nzeige eine Beschreibung für <thema> oder \"index\" für eine Liste alle Hilfethemen.",
"MOTD [server]\n\nReturns the message of the day for this, or the given, server.": "Zeigt die Message Of The Day für diesen oder den angegebenen Server",
"QUIT [reason]\n\nIndicates that you're leaving the server, and shows everyone the given reason.": "QUIT [grund]\n\nbeendet die Verbindung zum Server und zeigt anderen Nutzern den angegebenen Grund.",
"TIME [server]\n\nShows the time of the current, or the given, server.": "TIME [server]\n\nZeigt die Uhrzeit für diesen oder den angegebenen Server an.",
"TOPIC <channel> [topic]\n\nIf [topic] is given, sets the topic in the channel to that. If [topic] is not\ngiven, views the current topic on the channel.": "TOPIC <channel> [thema]\n\nÄndert das Thema für einen Channel. Ohne den Parameter [thema]\nwird das aktuelle Thema für den Channel angezeigt."
}

View File

@ -1,7 +0,0 @@
{
"Syntax: $bDEL <user>$b\n\nDEL deletes a user's vhost.": "Syntax: $bDEL <kontoname>$b\n\nDEL löscht den vHost eines Kontos.",
"Syntax: $bOFF$b\n\nOFF disables your vhost, if you have one approved.": "Syntax: $bOFF$b\n\nOFF deaktiviert Deinen vHost, wenn Du einen bestätigten hast.",
"Syntax: $bON$b\n\nON enables your vhost, if you have one approved.": "Syntax: $bON$b\n\nON aktiviert Deinen vHost, wenn Du einen bestätigten hast.",
"Syntax: $bSET <user> <vhost>$b\n\nSET sets a user's vhost, bypassing the request system.": "Syntax: $bSET <kontoname> <vhost>$b\n\nSET erstellt direkt einen vHost für ein Konto ohne das eine Anfrage und Bestätigung\nnotwendig ist.",
"Syntax: $bSTATUS [user]$b\n\nSTATUS displays your current vhost, if any, and the status of your most recent\nrequest for a new one. A server operator can view someone else's status.": "Syntax: $bSTATUS [kontoname]$b\n\nSTATUS zeigt Deinen aktuellen vHost an, sofern eingerichtet, und den Status\nDeiner letzten Anfrage nach einem neuen vHost. Ein Server Operator kann sich den\nStatus eines anderen anzeigen lassen."
}

View File

@ -1,159 +0,0 @@
{
"$bWarning: unregistering this account will remove its stored privileges.$b": "$bWarnung: das Löschen des Kontos entfernt alle gespeicherten Rechte.$b",
"$bWarning: unregistering this channel will remove all stored channel attributes.$b": "$bWarnung: das Austragen des Channels entfernt alle gespeicherten Channel Attribute.$b",
"%[1]s [account: %[2]s] joined the channel": "%[1]s [Konto: %[2]s] hat den Channel verlassen",
"%[1]s changed nick to %[2]s": "%[1]s hat Nick in %[2]s geändert",
"%[1]s kicked %[2]s (%[3]s)": "%[1]s kicked %[2]s (%[3]s)",
"%[1]s left the channel (%[2]s)": "%[1]s hat den Channel (%[2]s) verlassen",
"%[1]s quit (%[2]s)": "%[1]s quit (%[2]s)",
"%s joined the channel": "%s ist dem Channel beigetreten",
"*** $bEnd of %s HELP$b ***": "*** $bEnde von %s HELP$b ***",
"*** Could not find your username": "Dein User-Namen wurde nicht gefunden",
"*** Found your username": "User-Name gefunden",
"- %s Message of the day - ": "- %s Message of the day - ",
"Account %[1]s has vhost: %[2]s": "Konto %[1]s hat vHost: %[2]s",
"Account %[1]s receives mode +%[2]s": "Konto %[1]s bekommt Modus +%[2]s",
"Account %s has no vhost": "Konto %s hat keinen vHost",
"Account already exists": "Konto existiert schon",
"Account created": "Konto erstellt",
"Account created, pending verification; verification code has been sent to %s": "Konto erstellt, Verifizierung ausstehend; Verifizierungs-Code wurde an %s gesendet",
"Account does not exist": "Konto existiert nicht",
"Account: %s": "Konto: %s",
"Added D-Line for %s": "D-Line für %s wurde hinzugefügt",
"Added K-Line for %s": "K-Line für %s wurde hinzugefügt",
"Added temporary (%[1]s) D-Line for %[2]s": "Temporäre (%[1]s) D-Line für %[2]s wurde hinzugefügt",
"Added temporary (%[1]s) K-Line for %[2]s": "Temporäre (%[1]s) K-Line für %[2]s wurde hinzugefügt",
"An error occurred": "Ein Fehler ist aufgetreten",
"Authentication successful": "Authentifizierung erfolgreich",
"Bad or unauthorized PROXY command": "Ungültiger oder nicht zugelassener PROXY Befehl",
"CTCP messages are disabled over Tor": "CTCP Nachrichten über Tor sind deaktiviert",
"Can't change modes for other users": "Modi für andere Nutzer können nicht geändert werden",
"Can't view modes for other users": "Modi für andere Nutzer können nicht angezeigt werden",
"Cannot join channel (+%s)": "Kann dem Channel (+%s) nicht beitreten",
"Cannot rename channel": "Kann Channel nicht umbenennen",
"Cannot resume connection": "Kann Verbindung nicht fortsetzen",
"Cannot resume connection, connection registration has already been completed": "Kann Verbindung nicht fortsetzen, Verbindungs-Registrierung wurde schon abgeschlossen",
"Cannot resume connection, old and new clients must have TLS": "Kann Verbindung nicht fortsetzen, alter und neuer Client müssen TLS nutzen",
"Cannot resume connection, token is not valid": "Kann Verbindung nicht fortsetzen, Token ist ungültig",
"Channel %s is now unregistered": "Channel %s ist nicht mehr registriert",
"Channel %s successfully registered": "Channel %s erfolgreich registriert",
"Channel does not exist": "Channel existiert nicht",
"Channel is not registered": "Channel ist nicht registriert",
"Channel list is full": "Channel Liste ist voll",
"Channel renamed": "Channel umbenannt",
"Channel renamed: %s": "Channel umbenannt: %s",
"Client reconnected": "Client neu verbunden",
"Core Developers:": "Core Developers:",
"Could not find given client": "Kann angegebenen Client nicht finden",
"Could not parse IP address or CIDR network": "Kann IP-Adresse oder CIDR-Network nicht parsen",
"Could not register": "Registrierung nicht möglich",
"Created at: %s": "Erstellt am: %s",
"End of /HELPOP": "Ende von /HELPOP",
"End of /INFO": "Ende von /INFO",
"End of /WHOIS list": "Ende von /WHOIS list",
"End of LIST": "Ende von /LIST",
"End of MOTD command": "Ende des /MOTD Befehls",
"End of NAMES list": "Ende der /NAMES Liste",
"End of WHO list": "Ende der /WHO Liste",
"End of WHOWAS": "Ende von /WHOWAS",
"End of list": "Ende der Liste",
"Erroneous nickname": "Fehlerhafter Nick-Name",
"Error loading account data": "Fehler beim Laden der Konto-Daten",
"Error reserving nickname": "Fehler beim Registrieren des Nick-Namens",
"Error while unregistering account": "Fehler beim Löschen des Kontos",
"First param must be a mask or channel": "Der erste Parameter muss eine Maske oder Channel sein",
"GHOSTed by %s": "GHOSTed von %s",
"HELPOP <argument>\n\nGet an explanation of <argument>, or \"index\" for a list of help topics.": "HELPOP <thema>\n\nzeige eine Beschreibung für <thema> oder \"index\" für eine Liste alle Hilfethemen.",
"Help not found": "Hilfe nicht gefunden",
"Hostname: %s": "Hostname: %s",
"I'll be right back": "Bin bald zurück",
"IP address: %s": "IP Adresse: %s",
"IRC Operators online": "IRC Operatoren online",
"Insufficient oper privs": "Unzureichende Operator Rechte",
"Insufficient privileges": "Unzureichende Rechte",
"Internal error": "Interner Fehler",
"Invalid CAP subcommand": "Ungültiges CAP Subcommand",
"Invalid account name": "Ungültiger Konto-Name",
"Invalid mode change": "Ungültige Mode Änderung",
"Invalid parameters. For usage, do /msg %[1]s HELP %[2]s": "Ungültige Parameter. Für eine Beschreibung sende /msg %[1]s HELP %[2]s",
"Invalid vhost": "Ungültiger vHost",
"Language %s is not supported by this server": "Sprache %s wird von diesem Server nicht unterstützt",
"Language preferences have been set": "Sprache wurde geändert",
"Last active: %s": "Kann Nick-Name: %s nicht setzen oder ändern",
"MOTD File is missing": "MOTD Datei nicht gefunden",
"Malformed username": "Ungültiger User-Name",
"Mask isn't valid": "Maske ist ungültig",
"Nickname is already in use": "Nick-Name wird schon verwendet",
"Nickname is reserved by a different account": "Nick-Name ist für ein anderes Konto reserviert",
"No changes were made": "Es wurden keine Änderungen gemacht",
"No nickname given": "Kein Nick-Name angegeben",
"No such account": "Konto nicht gefunden",
"No such channel": "Channel nicht gefunden",
"No such nick": "Nick-Name nicht gefunden",
"No such setting": "Diese Einstellung gibt es nicht",
"Not enough parameters": "Zu wenig Parameter",
"Only channel founders can change registered channels": "Nur Channel-Besitzer können registrierte Channels ändern",
"Only the channel founder can do this": "Nur Channel-Besitzer können dies tun",
"Oragono is released under the MIT license.": "Oragono steht unter der MIT Lizenz.",
"Password changed": "Passwort geändert",
"Password could not be changed due to server error": "Das Passwort konnte wegen einem Server Error nicht geändert werden",
"Password incorrect": "Passwort falsch",
"Permission Denied": "Keine Berechtigung",
"Please wait at least %v and try again": "Bitte warte mindestens %v und versuch es erneut",
"Registered at: %s": "Registriert am: %s",
"Registered channel: %s": "Registrierter Channel: %s",
"Registration requires a valid e-mail address": "Registrierung erfordert eine gültige E-Mail Adresse",
"Remote servers not yet supported": "Remote Server werden noch nicht unterstützt",
"Removed D-Line for %s": "D-Line für %s wurde gelöscht",
"Removed K-Line for %s": "K-Line für %s wurde gelöscht",
"Requesting the %s client capability is forbidden": "Request der %s Client Capability ist nicht erlaubt",
"SASL authentication aborted": "SASL Authentifizierung abgebrochen",
"SASL authentication failed": "SASL Authentifizierung fehlgeschlagen",
"SASL authentication failed, you are not connecting with a certificate": "SASL Authentifizierung fehlgeschlagen, Dein Client hat kein Zertifikat gesendet",
"SASL authentication failed: Invalid auth blob": "SASL Authentifizierung fehlgeschlagen: ungültiger Auth BLOB",
"SASL authentication failed: Invalid b64 encoding": "SASL Authentifizierung fehlgeschlagen: ungültige b64 Kodierung",
"SASL authentication failed: Passphrase too long": "SASL Authentifizierung fehlgeschlagen: Passphrase zu lang",
"SASL authentication failed: authcid and authzid should be the same": "SASL Authentifizierung fehlgeschlagen: authcid und authzid müssen übereinstimmen",
"SASL message too long": "SASL Message zu lang",
"Successfully changed your account settings": "Kontoeinstellungen wurden geändert",
"Successfully registered account %s": "Konto %s erfolgreich registriert",
"Successfully set vhost": "VHost erfolgreich gesetzt",
"Successfully unregistered account %s": "Konto %s erfolgreich gelöscht",
"That channel is not registered": "Dieser Channel ist nicht registriert",
"That nickname is already reserved by someone else": "Dieser Nick-Name ist schon von jemandem reserviert",
"That nickname is not registered": "Dieser Nick-Name ist nicht registriert",
"There was no such nickname": "Dieser Nick existiert nicht",
"This command has been disabled by the server administrators": "Dieser Befehl wurde von den Server-Admins deaktiviert",
"This feature has been disabled by the server administrators": "Dieses Feature wurde von den Server-Admins deaktiviert",
"This server is in debug mode and is logging all user I/O. If you do not wish for everything you send to be readable by the server owner(s), please disconnect.": "Dieser Server ist im Debug-Modus und zeichnet sämtlichen Datenverkehr auf. Wenn Du nicht möchtest, dass alles was Du sendest von den Server-Betreibern gelesen werden kann, dann beende jetzt die Verbindung.",
"This vhost is currently disabled, but can be enabled with /HS ON": "Dieser vHost ist momentan deaktiviert und kann mit /HS ON aktiviert werden",
"Timestamp is not in 2006-01-02T15:04:05.999Z format, ignoring it": "Timestamp ist nicht im 2006-01-02T15:04:05.999Z Format, wird ignoriert",
"To change a password, use the PASSWD command. For details, /msg NickServ HELP PASSWD": "Um das Passwort zu ändern, verwende den PASSWD Befehl. Weitere Details, /msg NickServ HELP PASSWD",
"Translators:": "Übersetzer:",
"Unknown command": "Unbekannter Befehl",
"Unknown subcommand": "Unbekanntes Subcommand",
"Verification code: %s": "Verifizierungs-Code: %s",
"You are now an IRC operator": "Du bist jetzt ein IRC Operator",
"You are now logged in as %s": "Du bist jetzt als %s angemeldet",
"You can't GHOST yourself (try /QUIT instead)": "Du kannst Dich nicht selbst GHOSTen (versuche es mit /QUIT)",
"You don't have enough channel privileges": "Du hast keine ausreichenden Rechte für den Channel",
"You don't own that nick": "Dir gehört dieser Nick-Name nicht",
"You have already registered the maximum number of channels; try dropping some with /CS UNREGISTER": "Du hast schon die maximale Anzahl an Channels registriert; Versuche einige auszutragen mit /CS UNREGISTER",
"You have sent too many registration messages": "Du hast zu viele REGISTRATION Nachrichten gesendet",
"You have too many nicks reserved already (you can remove some with /NS DROP)": "Du hast schon zu viele Nicks registriert (Du kannst welche mit /NS DROP entfernen)",
"You must be connected with TLS and a client certificate to do this": "Du musst über TLS und einem Client Zertifikat verbunden sein, um dies zu tun",
"You must log in with SASL to join this server": "Du musst Dich mit SASL anmelden, um Zugang zum Server zu erhalten",
"You must specify an account": "Du musst ein Konto angeben",
"You specified too many languages": "Du hast zu viele Sprachen angegeben",
"You're already logged into an account": "Du bist schon mit einem Konto angemeldet",
"You're not a channel operator": "Du bist kein Channel Operator",
"You're not logged into an account": "Du bist mit keinem Konto angemeldet",
"You're not on that channel": "Du bist nicht in diesem Channel",
"You're now logged in as %s": "Du bist jetzt angemeldet als %s",
"Your client does not support BRB": "Dein Client unterstützt BRB nicht",
"has client certificate fingerprint %s": "hat den Client-Zertifikat Fingerprint %s",
"is a $bBot$b on %s": "ist ein $bBot$b in %s",
"is an unknown mode character to me": "ist ein unbekannter Modus-Buchstabe",
"is logged in as": "ist angemeldet als",
"is using a secure connection": "verwendet eine sichere Verbindung"
}

View File

@ -1,13 +0,0 @@
{
"Insufficient privileges": "Unzureichende Rechte",
"Password incorrect": "Passwort falsch",
"Syntax: $bDROP [nickname]$b\n\nDROP de-links the given (or your current) nickname from your user account.": "Syntax: $bDROP [nickname]$b\n\nDROP entfernt den angegebenen (oder Deinen aktuellen) Nick-Namen von Deinem\nKonto.",
"Syntax: $bGHOST <nickname>$b\n\nGHOST disconnects the given user from the network if they're logged in with the\nsame user account, letting you reclaim your nickname.": "Syntax: $bGHOST <nickname>$b\n\nGHOST beendet eine andere User-Verbindung wenn diese den angegebenen\nNick benutzt und mit dem gleichen Konto angemeldet ist. Dies ermöglicht es\nDir, den Nick mit Deiner aktuellen Verbindung zu benutzen.",
"Syntax: $bGROUP$b\n\nGROUP links your current nickname with your logged-in account, so other people\nwill not be able to use it.": "Syntax: $bGROUP$b\n\nGROUP verknüpft/registriert Deinen aktuellen Nick-Namen mit Deinem angemeldeten\nKonto, damit andere User diesen Nick nicht nutzen können.",
"Syntax: $bIDENTIFY <username> [password]$b\n\nIDENTIFY lets you login to the given username using either password auth, or\ncertfp (your client certificate) if a password is not given.": "Syntax: $bIDENTIFY <kontoname> [passwort]$b\n\nmit IDENTIFY kannst Du Dich mit Deinem Konto anmelden. Entweder mit\nDeinem Passwort oder über CertFP (TLS Client-Zertifikat), falls kein Passwort\nangegeben wird.",
"Syntax: $bINFO [username]$b\n\nINFO gives you information about the given (or your own) user account.": "Syntax: $bINFO [kontoname]$b\n\nINFO zeigt Informationen über das angegebene (oder Dein eigenes) Konto an.",
"Syntax: $bSADROP <nickname>$b\n\nSADROP forcibly de-links the given nickname from the attached user account.": "Syntax: $bSADROP <nickname>$b\n\nSADROP entfernt den Nick von dem Konto auf das er registriert wurde.\n(Befehl für Admins)",
"Syntax: $bUNREGISTER <username> [code]$b\n\nUNREGISTER lets you delete your user account (or someone else's, if you're an\nIRC operator with the correct permissions). To prevent accidental\nunregistrations, a verification code is required; invoking the command without\na code will display the necessary code.": "Syntax: $bUNREGISTER <kontoname> [code]$b\n\nmit UNREGISTER kannst Du Dein Konto löschen (oder ein Konto eines anderen\nUsers, falls Du die nötigen Rechte als IRC Operator hast).\nUm versehentliches Löschen zu verhindern, ist ein Verifizierungscode nötig.\nSendest Du den Befehl ohne einen Code, wird der benötigte Code angezeigt.",
"Syntax: $bVERIFY <username> <code>$b\n\nVERIFY lets you complete an account registration, if the server requires email\nor other verification.": "Syntax: $bVERIFY <kontoname> <code>$b\n\nmit VERIFY kannst Du die Kontoregistrierung abschließen, falls der Server\neine Verifzierung über Email (oder andere Wege) verlangt.",
"You're not logged into an account": "Du bist mit keinem Konto angemeldet"
}

View File

@ -1,15 +0,0 @@
---
#translation info file for our example language
#languages are made up of a few different files:
#<locale>.lang.yaml - general info about the translation
#<locale>-irc.lang.json - IRC strings to be translated
#<locale>-help.lang.json - help entries to be translated
#we split up translations in this way so that they can be displayed more nicely on CrowdIn
#name - this is the 'nice' or 'full' name of the language
name: "Deutsch"
#code - this is what the language will be referred to in our list of languages
code: "de"
#contributors - people who have contributed to this translation
contributors: "streaps"
#incomplete - whether to mark this language as incomplete
incomplete: true

Some files were not shown because too many files have changed in this diff Show More