Translateable webadmin to Russian.

This commit is contained in:
Alexey Sokolov
2016-02-04 22:59:07 +00:00
parent 4a940a3a3a
commit 711e835c93
16 changed files with 2906 additions and 434 deletions
+21 -15
View File
@@ -1,3 +1,4 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?><? IF Edit ?>editchan<? ELSE ?>addchan<? ENDIF ?>" method="post">
@@ -8,33 +9,33 @@
<input type="hidden" name="network" value="<? VAR Network ?>" />
<? IF Edit ?><input type="hidden" name="name" value="<? VAR ChanName ?>" /><? ENDIF ?>
<h3>Channel Info</h3>
<h3><? FORMAT "Channel Info" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<? IF !Edit ?>
<div class="subsection half">
<div class="inputlabel">Channel Name:</div>
<div class="inputlabel"><? FORMAT "Channel Name:" ?></div>
<input type="text" name="name" value=""
title="The channel name." />
title="<? FORMAT "The channel name." ?>"/>
</div>
<? ENDIF ?>
<div class="subsection">
<div class="inputlabel">Key:</div>
<div class="inputlabel"><? FORMAT "Key:" ?></div>
<input type="text" name="key" value="<? VAR Key ?>" size="10"
title="The password of the channel, if there is one." />
title="<? FORMAT "The password of the channel, if there is one." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Buffer Size:</div>
<div class="inputlabel"><? FORMAT "Buffer Size:" ?></div>
<input type="number" name="buffersize" value="<? VAR BufferSize ?>" size="10" min="0"
title="The buffer count." />
title="<? FORMAT "The buffer count." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Default Modes:</div>
<div class="inputlabel"><? FORMAT "Default Modes:" ?></div>
<input type="text" name="defmodes" value="<? VAR DefModes ?>" size="10"
title="The default modes of the channel." />
title="<? FORMAT "The default modes of the channel." ?>"/>
</div>
</div>
@@ -42,17 +43,17 @@
</div>
<div class="section">
<h3>Flags</h3>
<h3><? FORMAT "Flags" ?></h3>
<div class="sectionbg">
<div class="sectionbody lotsofcheckboxes">
<span class="checkboxandlabel">
<input type="checkbox" name="save" id="save" value="true"<? IF InConfig ?> checked="checked"<? ENDIF ?> />
<label for="save">Save to config</label>
<label for="save"><? FORMAT "Save to config" ?></label>
</span>
<? LOOP OptionLoop ?>
<span class="checkboxandlabel" title="<? VAR Tooltip ?>">
<input type="checkbox" name="<? VAR Name ?>" id="opt_<? VAR Name ?>" value="true"<? IF Checked ?> checked="checked"<? ENDIF ?><? IF Disabled ?> disabled="disabled"<? ENDIF ?> />
<label for="opt_<? VAR Name ?>"><? VAR DisplayName ?></label>
<label for="opt_<? VAR Name ?>"><? VAR DisplayName ESC= ?></label>
</span>
<? ENDLOOP ?>
<div style="clear:both;"></div>
@@ -63,15 +64,20 @@
<? LOOP EmbeddedModuleLoop ?>
<? IF Embed ?>
<div class="section">
<h3>Module <? VAR ModName ?></h3>
<h3><? FORMAT "Module {1}" ModName ?></h3>
<? INC *Embed ?>
</div>
<? ENDIF ?>
<? ENDLOOP ?>
<div class="submitline">
<input type="submit" name="submit_return" value="<? IF Edit ?>Save<? ELSE ?>Add Channel<? ENDIF ?> and return" />
<input type="submit" name="submit_continue" value="<? IF Edit ?>Save<? ELSE ?>Add Channel<? ENDIF ?> and continue" />
<? IF Edit ?>
<input type="submit" name="submit_return" value="<? FORMAT "Save and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Save and continue" ?>"/>
<? ELSE ?>
<input type="submit" name="submit_return" value="<? FORMAT "Add Channel and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Add Channel and continue" ?>"/>
<? ENDIF ?>
</div>
</form>
@@ -1,9 +1,17 @@
<? I18N znc-webadmin ?>
<? AddRow JSLoop HREF=/modfiles/global/webadmin/webadmin.js ?>
<? AddRow CSSLoop HREF=/modfiles/global/webadmin/webadmin.css ?>
<? INC Header.tmpl ?>
<div class="section">
<p>To connect to this network from your IRC client, you can set the server password field as follows: <code><? VAR Username ?>/<? IF Edit ?><? VAR Name ?><? ELSE ?>&lt;network&gt;<? ENDIF ?>:&lt;password&gt;</code> or username field as <code><? VAR Username ?>/<? IF Edit ?><? VAR Name ?><? ELSE ?>&lt;network&gt;<? ENDIF ?></code></p>
<? IF Edit ?>
<? SETBLOCK ClientConnectHint_Password ?><? VAR Username ?>/<? VAR Name ?>:<? FORMAT "&lt;password&gt;" ?><? ENDSETBLOCK ?>
<? SETBLOCK ClientConnectHint_Username ?><? VAR Username ?>/<? VAR Name ?><? ENDSETBLOCK ?>
<? ELSE ?>
<? SETBLOCK ClientConnectHint_Password ?><? VAR Username ?>/<? FORMAT "&lt;network&gt;" ?>:<? FORMAT "&lt;password&gt;" ?><? ENDSETBLOCK ?>
<? SETBLOCK ClientConnectHint_Username ?><? VAR Username ?>/<? FORMAT "&lt;network&gt;" ?><? ENDSETBLOCK ?>
<? ENDIF ?>
<p><? FORMAT "To connect to this network from your IRC client, you can set the server password field as <code>{1}</code> or username field as <code>{2}</code>" "ClientConnectHint_Password ESC=" "ClientConnectHint_Username ESC=" ?>
</div>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?><? IF Edit ?>editnetwork<? ELSE ?>addnetwork<? ENDIF ?>" method="post">
@@ -13,75 +21,75 @@
<input type="hidden" name="user" value="<? VAR Username ?>" />
<input type="hidden" name="network" value="<? VAR Name ?>" />
<h3>Network Info</h3>
<span class="info">Nick, AltNick, Ident, RealName, BindHost can be left empty to use the value from the user.</span>
<h3><? FORMAT "Network Info" ?></h3>
<span class="info"><? FORMAT "Nick, AltNick, Ident, RealName, BindHost can be left empty to use the value from the user." ?></span>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<div class="inputlabel">Network Name:</div>
<div class="inputlabel"><? FORMAT "Network Name:" ?></div>
<input type="text" name="name" value="<? VAR Name ?>" class="half" maxlength="128"
title="The name of the IRC network." />
title="<? FORMAT "The name of the IRC network." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Nickname:</div>
<div class="inputlabel"><? FORMAT "Nickname:" ?></div>
<input type="text" name="nick" value="<? VAR Nick ?>" class="half" maxlength="128"
title="Your nickname on IRC." />
title="<? FORMAT "Your nickname on IRC." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Alt. Nickname:</div>
<div class="inputlabel"><? FORMAT "Alt. Nickname:" ?></div>
<input type="text" name="altnick" value="<? VAR AltNick ?>" class="half" maxlength="128"
title="Your secondary nickname, if the first is not available on IRC." />
title="<? FORMAT "Your secondary nickname, if the first is not available on IRC." ?>"/>
</div>
<div style="clear: both;"></div>
<div class="subsection">
<div class="inputlabel">Ident:</div>
<div class="inputlabel"><? FORMAT "Ident:" ?></div>
<input type="text" name="ident" value="<? VAR Ident ?>" class="half" maxlength="128"
title="Your ident." />
title="<? FORMAT "Your ident." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Realname:</div>
<div class="inputlabel"><? FORMAT "Realname:" ?></div>
<input type="text" name="realname" value="<? VAR RealName ?>" class="full" maxlength="256"
title="Your real name." />
title="<? FORMAT "Your real name." ?>"/>
</div>
<? IF BindHostEdit ?>
<div class="subsection">
<div class="inputlabel">BindHost:</div>
<div class="inputlabel"><? FORMAT "BindHost:" ?></div>
<input type="text" name="bindhost" value="<? VAR BindHost ?>"/>
</div>
<div style="clear: both;"></div>
<? ENDIF ?>
<div class="subsection">
<div class="inputlabel">Quit Message:</div>
<div class="inputlabel"><? FORMAT "Quit Message:" ?></div>
<input type="text" name="quitmsg" value="<? VAR QuitMsg ?>" class="full" maxlength="256"
title="You may define a Message shown, when you quit IRC." />
title="<? FORMAT "You may define a Message shown, when you quit IRC." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Active:</div>
<div class="inputlabel"><? FORMAT "Active:" ?></div>
<div class="checkbox"><input type="checkbox" name="doconnect" id="doconnect_checkbox"<? IF IRCConnectEnabled ?> checked="checked"<? ENDIF ?> />
<label for="doconnect_checkbox">Connect to IRC &amp; automatically re-connect</label></div>
<label for="doconnect_checkbox"><? FORMAT "Connect to IRC &amp; automatically re-connect" ?></label></div>
</div>
<div class="subsection half" id="servers_plain">
<div class="inputlabel">Servers of this IRC network:</div>
<div class="inputlabel"><? FORMAT "Servers of this IRC network:" ?></div>
<div><textarea name="servers" cols="70" rows="5" id="servers_text"><? LOOP ServerLoop ?><? VAR Server ?>
<? ENDLOOP ?>
</textarea></div>
<br/><span class="info">One server per line, "host [[+]port] [password]", + means SSL</span>
<br/><span class="info"><? FORMAT "One server per line, host [[+]port] [password], + means SSL" ?></span>
</div>
<div class="subsection" id="servers_js" style="display:none">
<div>Servers of this IRC network:</div>
<div><? FORMAT "Servers of this IRC network:" ?></div>
<div>
<table style="width:100%">
<thead>
<tr>
<th>Hostname</th>
<th>Port</th>
<th>SSL</th>
<th>Password</th>
<th><? FORMAT "Hostname" ?></th>
<th><? FORMAT "Port" ?></th>
<th><? FORMAT "SSL" ?></th>
<th><? FORMAT "Password" ?></th>
<th/>
</tr>
</thead>
@@ -93,51 +101,57 @@
<script type="text/javascript">serverlist_init(jQuery);</script>
<div class="subsection full">
<div class="inputlabel">Trusted SSL fingerprints of this IRC network:</div>
<div class="inputlabel"><? FORMAT "SHA-256 fingerprints of trusted SSL certificates of this IRC network:" ?></div>
<div><textarea name="fingerprints" cols="50" rows="5"><? LOOP TrustedFingerprints ?><? VAR FP ?>
<? ENDLOOP ?>
</textarea></div>
<br /><span class="info">When these certificates are encountered, checks for hostname, expiration date, CA are skipped</span>
<br /><span class="info"><? FORMAT "When these certificates are encountered, checks for hostname, expiration date, CA are skipped" ?></span>
</div>
<div class="subsection">
<div class="inputlabel">Flood protection:</div>
<div class="inputlabel"><? FORMAT "Flood protection:" ?></div>
<div class="checkbox">
<input type="checkbox" name="floodprotection" id="floodprotection_checkbox"
title="You might enable the flood protection. This prevents `excess flood' errors, which occur, when your IRC bot is command flooded or spammed. After changing this, reconnect ZNC to server."
title="<? FORMAT "You might enable the flood protection. This prevents excess flood errors, which occur, when your IRC bot is command flooded or spammed. After changing this, reconnect ZNC to server." ?>"
onchange="floodprotection_change();"
<? IF FloodProtection ?>checked="checked"<? ENDIF ?> />
<label for="floodprotection_checkbox">Enabled</label>
<label for="floodprotection_checkbox"><? FORMAT CTX="Flood Protection" "Enabled" ?></label>
</div>
</div>
<div class="subsection">
<div class="inputlabel">Flood protection rate:</div>
<input type="number" name="floodrate" min="0.3" step="0.05" id="floodrate"
title="The number of seconds per line. After changing this, reconnect ZNC to server."
<? IF FloodProtection ?> value="<? VAR FloodRate ?>" <? ELSE ?> value="1.00" disabled="disabled" <? ENDIF ?>
/> seconds per line
<div class="inputlabel"><? FORMAT "Flood protection rate:" ?></div>
<? SETBLOCK FloodInputField_Rate ?>
<input type="number" name="floodrate" min="0.3" step="0.05" id="floodrate"
title="<? FORMAT "The number of seconds per line. After changing this, reconnect ZNC to server." ?>"
<? IF FloodProtection ?> value="<? VAR FloodRate ?>" <? ELSE ?> value="1.00" disabled="disabled" <? ENDIF ?> />
<? ENDSETBLOCK ?>
<? FORMAT "{1} seconds per line" "FloodInputField_Rate ESC=" ?>
</div>
<div class="subsection">
<div class="inputlabel">Flood protection burst:</div>
<input type="number" name="floodburst" min="1" id="floodburst"
title="Defines the number of lines, which can be sent immediately. After changing this, reconnect ZNC to server."
<? IF FloodProtection ?> value="<? VAR FloodBurst ?>" <? ELSE ?> value="4" disabled="disabled" <? ENDIF ?>
/> lines can be sent immediately
<div class="inputlabel"><? FORMAT "Flood protection burst:" ?></div>
<? SETBLOCK FloodInputField_Burst ?>
<input type="number" name="floodburst" min="1" id="floodburst"
title="<? FORMAT "Defines the number of lines, which can be sent immediately. After changing this, reconnect ZNC to server." ?>"
<? IF FloodProtection ?> value="<? VAR FloodBurst ?>" <? ELSE ?> value="4" disabled="disabled" <? ENDIF ?> />
<? ENDSETBLOCK ?>
<? FORMAT "{1} lines can be sent immediately" "FloodInputField_Burst ESC=" ?>
</div>
<div class="subsection">
<div class="inputlabel">Channel join delay:</div>
<input type="number" name="joindelay" min="0" id="joindelay"
title="Defines the delay in seconds, until channels are joined after getting connected."
value="<? VAR JoinDelay ?>"
/> seconds
<div class="inputlabel"><? FORMAT "Channel join delay:" ?></div>
<? SETBLOCK ChannelJoinDelayInputField ?>
<input type="number" name="joindelay" min="0" id="joindelay"
title="<? FORMAT "Defines the delay in seconds, until channels are joined after getting connected." ?>"
value="<? VAR JoinDelay ?>" />
<? ENDSETBLOCK ?>
<? FORMAT "{1} seconds" "ChannelJoinDelayInputField ESC=" ?>
</div>
<script type="text/javascript">floodprotection_change();</script>
<div style="clear:both;"></div>
<div class="subsection" title="Character encoding used between ZNC and IRC server.">
<div class="inputlabel">Server encoding:</div>
<div class="subsection" title="<? FORMAT "Character encoding used between ZNC and IRC server." ?>">
<div class="inputlabel"><? FORMAT "Server encoding:" ?></div>
<? INC encoding_settings.tmpl ?>
</div>
@@ -147,25 +161,25 @@
</div>
<div class="section">
<h3>Channels</h3>
<h3><? FORMAT "Channels" ?></h3>
<? IF !Edit ?>
<span class="info">You will be able to add + modify channels here after you created the network.</span><br />
<span class="info"><? FORMAT "You will be able to add + modify channels here after you created the network." ?></span><br />
<? ELSE ?>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td>[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>addchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Name ESC=URL ?>">Add</a>]</td>
<td>[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>addchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Name ESC=URL ?>"><? FORMAT "Add" ?></a>]</td>
<? IF ChannelLoop ?>
<td>Save</td>
<td>Name</td>
<td>CurModes</td>
<td>DefModes</td>
<td>BufferSize</td>
<td>Options</td>
<td><? FORMAT "Save" ?></td>
<td><? FORMAT "Name" ?></td>
<td><? FORMAT "CurModes" ?></td>
<td><? FORMAT "DefModes" ?></td>
<td><? FORMAT "BufferSize" ?></td>
<td><? FORMAT "Options" ?></td>
<? ELSE ?>
<td>&lt;- Add a channel (opens in same page)</td>
<td><? FORMAT "← Add a channel (opens in same page)" ?></td>
<? ENDIF ?>
</tr>
</thead>
@@ -175,7 +189,7 @@
<tr class="<? IF __EVEN__ ?>evenrow<? ELSE ?>oddrow<? ENDIF ?>">
<td>
<input type="hidden" name="channel" value="<? VAR Name ?>" />
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>editchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>">Edit</a>] [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>">Del</a>]
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>editchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>"><? FORMAT "Edit" ?></a>] [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delchan?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Network ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>"><? FORMAT "Del" ?></a>]
</td>
<td><input type="checkbox" name="save_<? VAR Name ?>"<? IF InConfig ?> checked="checked"<? ENDIF ?> /></td>
<td><? VAR Name ?></td>
@@ -193,17 +207,17 @@
</div>
<div class="section">
<h3>Modules</h3>
<h3><? FORMAT "Modules" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td>Name</td>
<td>Arguments</td>
<td>Description</td>
<td>Loaded globally</td>
<td>Loaded by user</td>
<td><? FORMAT "Name" ?></td>
<td><? FORMAT "Arguments" ?></td>
<td><? FORMAT "Description" ?></td>
<td><? FORMAT "Loaded globally" ?></td>
<td><? FORMAT "Loaded by user" ?></td>
</tr>
</thead>
<tbody>
@@ -253,15 +267,20 @@
<? LOOP EmbeddedModuleLoop ?>
<? IF Embed ?>
<div class="section">
<h3>Module <? VAR ModName ?></h3>
<h3><? FORMAT "Module {1}" ModName ?></h3>
<? INC *Embed ?>
</div>
<? ENDIF ?>
<? ENDLOOP ?>
<div class="submitline">
<input type="submit" name="submit_return" value="<? IF Edit ?>Save<? ELSE ?>Add Network<? ENDIF ?> and return" />
<input type="submit" name="submit_continue" value="<? IF Edit ?>Save<? ELSE ?>Add Network<? ENDIF ?> and continue" />
<? IF Edit ?>
<input type="submit" name="submit_return" value="<? FORMAT "Save and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Save and continue" ?>"/>
<? ELSE ?>
<input type="submit" name="submit_return" value="<? FORMAT "Add Network and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Add Network and continue" ?>"/>
<? ENDIF ?>
</div>
</form>
+104 -85
View File
@@ -1,3 +1,4 @@
<? I18N znc-webadmin ?>
<? AddRow JSLoop HREF=/modfiles/global/webadmin/webadmin.js ?>
<? AddRow CSSLoop HREF=/modfiles/global/webadmin/webadmin.css ?>
<? INC Header.tmpl ?>
@@ -11,11 +12,11 @@
<input name="userdummy" type="text" style="display: none"/>
<input name="passworddummy" type="password" style="display: none"/>
<h3>Authentication</h3>
<h3><? FORMAT "Authentication" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<div class="inputlabel">Username:</div>
<div class="inputlabel"><? FORMAT "Username:" ?></div>
<? IF Clone ?>
<input type="hidden" name="clone" value="<? VAR CloneUsername ?>" />
@@ -25,27 +26,26 @@
<input type="text" name="newuser" value="<? VAR Username ?>" class="half" maxlength="128" disabled="disabled" />
<? ELSE ?>
<input type="text" name="user" value="<? VAR Username ?>" class="half" maxlength="128"
title="Please enter a username." />
title="<? FORMAT "Please enter a username." ?>"/>
<? ENDIF ?>
</div>
<div class="subsection">
<div class="inputlabel">Password:</div>
<div class="inputlabel"><? FORMAT "Password:" ?></div>
<input type="password" name="password" class="half"
title="Please enter a password." autocomplete="off" />
title="<? FORMAT "Please enter a password." ?>" autocomplete="off" />
</div>
<div class="subsection">
<div class="inputlabel">Confirm password:</div>
<div class="inputlabel"><? FORMAT "Confirm password:" ?></div>
<input type="password" name="password2" class="half"
title="Please re-type the above password." />
title="<? FORMAT "Please re-type the above password." ?>"/>
</div>
<div class="subsection half">
<div class="inputlabel">Allowed IPs:</div>
<div class="inputlabel"><? FORMAT "Allowed IPs:" ?></div>
<textarea name="allowedips" cols="70" rows="5"><? LOOP AllowedHostLoop ?><? VAR Host ?>
<? ENDLOOP ?>
</textarea>
<br /><span class="info">Leave empty to allow connections from all IPs.<br />
Otherwise, one entry per line, wildcards * and ? are available.</span>
<br /><span class="info"><? FORMAT "Leave empty to allow connections from all IPs.<br/>Otherwise, one entry per line, wildcards * and ? are available." ?></span>
</div>
<div style="clear: both;"></div>
</div>
@@ -53,59 +53,59 @@
</div>
<div class="section">
<h3>IRC Information</h3>
<h3><? FORMAT "IRC Information" ?></h3>
<? IF !Edit ?>
<span class="info">Nick, AltNick, Ident, RealName and QuitMsg can be left empty to use default values.</span>
<span class="info"><? FORMAT "Nick, AltNick, Ident, RealName and QuitMsg can be left empty to use default values." ?></span>
<? ENDIF ?>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<div class="inputlabel">Nickname:</div>
<div class="inputlabel"><? FORMAT "Nickname:" ?></div>
<input type="text" name="nick" value="<? VAR Nick ?>" class="half" maxlength="128"
title="This will be your nickname on IRC." />
title="<? FORMAT "Your nickname on IRC." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Alt. Nickname:</div>
<div class="inputlabel"><? FORMAT "Alt. Nickname:" ?></div>
<input type="text" name="altnick" value="<? VAR AltNick ?>" class="half" maxlength="128"
title="If the nickname above is not available anymore, then this will be your nickname on IRC." />
title="<? FORMAT "Your secondary nickname, if the first is not available on IRC." ?>"/>
</div>
<div style="clear: both;"></div>
<div class="subsection">
<div class="inputlabel">Ident:</div>
<div class="inputlabel"><? FORMAT "Ident:" ?></div>
<input type="text" name="ident" value="<? VAR Ident ?>" class="half" maxlength="128"
title="The Ident identifies you as one specific user of your host." />
title="<? FORMAT "The Ident is sent to server as username." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">StatusPrefix:</div>
<div class="inputlabel"><? FORMAT "Status Prefix:" ?></div>
<input type="text" name="statusprefix" value="<? VAR StatusPrefix ?>" class="half" maxlength="5"
title="This defines the prefix for the status and module queries." />
title="<? FORMAT "The prefix for the status and module queries." ?>"/>
</div>
<div style="clear: both;"></div>
<div class="subsection">
<div class="inputlabel">Realname:</div>
<div class="inputlabel"><? FORMAT "Realname:" ?></div>
<input type="text" name="realname" value="<? VAR RealName ?>" class="full" maxlength="256"
title="The real name of the user." />
title="<? FORMAT "Your real name." ?>"/>
</div>
<div style="clear: both;"></div>
<? IF BindHostEdit ?>
<div class="subsection">
<div class="inputlabel">BindHost:</div>
<div class="inputlabel"><? FORMAT "BindHost:" ?></div>
<input type="text" name="bindhost" value="<? VAR BindHost ?>"/>
</div>
<div style="clear: both;"></div>
<div class="subsection">
<div class="inputlabel">DCCBindHost:</div>
<div class="inputlabel"><? FORMAT "DCCBindHost:" ?></div>
<input type="text" name="dccbindhost" value="<? VAR DCCBindHost ?>"/>
</div>
<div style="clear: both;"></div>
<? ENDIF ?>
<div class="subsection">
<div class="inputlabel">Quit Message:</div>
<div class="inputlabel"><? FORMAT "Quit Message:" ?></div>
<input type="text" name="quitmsg" value="<? VAR QuitMsg ?>" class="full" maxlength="256"
title="You may define a Message shown, when you quit IRC." />
title="<? FORMAT "You may define a Message shown, when you quit IRC." ?>"/>
</div>
<div style="clear: both;"></div>
</div>
@@ -113,21 +113,21 @@
</div>
<div class="section">
<h3>Networks</h3>
<h3><? FORMAT "Networks" ?></h3>
<? IF Edit ?>
<div class="sectionbg">
<div class="sectionbody">
<table class="sortable">
<thead>
<tr>
<td class="ignore-sort">[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>addnetwork?user=<? VAR Username ESC=URL ?>">Add</a>]</td>
<td class="ignore-sort">[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>addnetwork?user=<? VAR Username ESC=URL ?>"><? FORMAT "Add" ?></a>]</td>
<? IF NetworkLoop ?>
<td>Name</td>
<td>Clients</td>
<td>Current Server</td>
<td>IRC Nick</td>
<td><? FORMAT "Name" ?></td>
<td><? FORMAT "Clients" ?></td>
<td><? FORMAT "Current Server" ?></td>
<td><? FORMAT "Nick" ?></td>
<? ELSE ?>
<td>&lt;- Add a network (opens in same page)</td>
<td><? FORMAT "← Add a network (opens in same page)" ?></td>
<? ENDIF ?>
</tr>
</thead>
@@ -137,7 +137,7 @@
<tr class="<? IF __EVEN__ ?>evenrow<? ELSE ?>oddrow<? ENDIF ?>">
<td>
<input type="hidden" name="network" value="<? VAR Name ?>" />
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>editnetwork?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Name ESC=URL ?>">Edit</a>] [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delnetwork?user=<? VAR Username ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>">Del</a>]
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>editnetwork?user=<? VAR Username ESC=URL ?>&amp;network=<? VAR Name ESC=URL ?>"><? FORMAT "Edit" ?></a>] [<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delnetwork?user=<? VAR Username ESC=URL ?>&amp;name=<? VAR Name ESC=URL ?>"><? FORMAT "Del" ?></a>]
</td>
<td><? VAR Name ?></td>
<td><? VAR Clients ?></td>
@@ -150,22 +150,26 @@
</div>
</div>
<? ELSE ?>
<span class="info">You will be able to add + modify networks here after you <? IF Clone ?>have cloned<? ELSE ?>created<? ENDIF ?> the user.</span><br />
<? IF Clone ?>
<span class="info"><? FORMAT "You will be able to add + modify networks here after you have cloned the user." ?></span><br />
<? ELSE ?>
<span class="info"><? FORMAT "You will be able to add + modify networks here after you have created the user." ?></span><br />
<? ENDIF ?>
<? ENDIF ?>
</div>
<div class="section">
<h3>Modules</h3>
<h3><? FORMAT "Modules" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td>Name</td>
<td>Arguments</td>
<td>Description</td>
<td>Loaded globally</td>
<td>Loaded by networks</td>
<td><? FORMAT "Name" ?></td>
<td><? FORMAT "Arguments" ?></td>
<td><? FORMAT "Description" ?></td>
<td><? FORMAT "Loaded globally" ?></td>
<td><? FORMAT "Loaded by networks" ?></td>
</tr>
</thead>
<tbody>
@@ -218,46 +222,46 @@
</div>
<div class="section">
<h3>Channels</h3>
<h3><? FORMAT "Channels" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection third">
<div class="inputlabel">Default Modes:</div>
<div class="inputlabel"><? FORMAT "Default Modes:" ?></div>
<input type="text" name="chanmodes" value="<? VAR DefaultChanModes ?>" maxlength="32"
title="These are the default modes ZNC will set when you join an empty channel." />
<br /><span class="info">Empty = use standard value</span>
title="<? FORMAT "These are the default modes ZNC will set when you join an empty channel." ?>"/>
<br /><span class="info"><? FORMAT "Empty = use standard value" ?></span>
</div>
<div class="subsection third">
<div class="inputlabel">Buffer Size:</div>
<div class="inputlabel"><? FORMAT "Buffer Size:" ?></div>
<input type="number" name="chanbufsize" value="<? VAR ChanBufferSize ?>" min="0"
title="This is the amount of lines that the playback buffer will store for channels before dropping off the oldest line. The buffers are stored in the memory by default." />
<br /><span class="info">Empty = use standard value</span>
title="<? FORMAT "This is the amount of lines that the playback buffer will store for channels before dropping off the oldest line. The buffers are stored in the memory by default." ?>"/>
<br /><span class="info"><? FORMAT "Empty = use standard value" ?></span>
</div>
</div>
</div>
</div>
<div class="section">
<h3>Queries</h3>
<h3><? FORMAT "Queries" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection third">
<div class="inputlabel">Max Buffers:</div>
<div class="inputlabel"><? FORMAT "Max Buffers:" ?></div>
<input type="number" name="maxquerybuffers" value="<? VAR MaxQueryBuffers ?>" class="third" min="0"
title="Maximum number of query buffers. 0 is unlimited."/>
title="<? FORMAT "Maximum number of query buffers. 0 is unlimited." ?>"/>
</div>
<div class="subsection third">
<div class="inputlabel">Buffer Size:</div>
<div class="inputlabel"><? FORMAT "Buffer Size:" ?></div>
<input type="number" name="querybufsize" value="<? VAR QueryBufferSize ?>" min="0"
title="This is the amount of lines that the playback buffer will store for queries before dropping off the oldest line. The buffers are stored in the memory by default." />
<br /><span class="info">Empty = use standard value</span>
title="<? FORMAT "This is the amount of lines that the playback buffer will store for queries before dropping off the oldest line. The buffers are stored in the memory by default." ?>"/>
<br /><span class="info"><? FORMAT "Empty = use standard value" ?></span>
</div>
</div>
</div>
</div>
<div class="section">
<h3>Flags</h3>
<h3><? FORMAT "Flags" ?></h3>
<div class="sectionbg">
<div class="sectionbody lotsofcheckboxes">
<? LOOP OptionLoop ?>
@@ -272,20 +276,20 @@
</div>
<div class="section">
<h3>ZNC Behavior</h3>
<span class="info">Any of the following text boxes can be left empty to use their default value.</span>
<h3><? FORMAT "ZNC Behavior" ?></h3>
<span class="info"><? FORMAT "Any of the following text boxes can be left empty to use their default value." ?></span>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<div class="inputlabel">Timestamp Format:</div>
<div class="inputlabel"><? FORMAT "Timestamp Format:" ?></div>
<input type="text" name="timestampformat" value="<? VAR TimestampFormat ?>" class="full"
title="The format for the timestamps used in buffers, for example [%H:%M:%S]. This setting is ignored in new IRC clients, which use server-time. If your client supports server-time, change timestamp format in client settings instead." />
title="<? FORMAT "The format for the timestamps used in buffers, for example [%H:%M:%S]. This setting is ignored in new IRC clients, which use server-time. If your client supports server-time, change timestamp format in client settings instead." ?>"/>
</div>
<div class="subsection half">
<div class="inputlabel">Timezone:</div>
<div class="inputlabel"><? FORMAT "Timezone:" ?></div>
<input type="text" name="timezone" value="<? VAR Timezone ?>" list="timezone_list"
title="Select your timezone." />
<br /><span class="info">E.g. <code>Europe/Berlin</code>, or <code>GMT-6</code></span>
<br /><span class="info"><? FORMAT "E.g. <code>Europe/Berlin</code>, or <code>GMT-6</code>" ?></span>
<datalist id="timezone_list">
<? LOOP TZLoop ?>
<option value="<? VAR TZ ?>"/>
@@ -293,50 +297,51 @@
</datalist>
</div>
<div style="clear:both;"></div>
<div class="subsection" title="Character encoding used between IRC client and ZNC.">
<div class="inputlabel">Client encoding:</div>
<div class="subsection" title="<? FORMAT "Character encoding used between IRC client and ZNC." ?>">
<div class="inputlabel"><? FORMAT "Client encoding:" ?></div>
<? INC encoding_settings.tmpl ?>
</div>
<div style="clear:both;"></div>
<div class="subsection">
<div class="inputlabel">Join Tries:</div>
<div class="inputlabel"><? FORMAT "Join Tries:" ?></div>
<input type="number" name="jointries" value="<? VAR JoinTries ?>" class="third" min="0"
title="This defines how often ZNC tries to join, if the first join failed, e.g. due to channel mode +i/+k or if you're banned." />
title="<? FORMAT "This defines how many times ZNC tries to join a channel, if the first join failed, e.g. due to channel mode +i/+k or if you are banned." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Max Joins:</div>
<div class="inputlabel"><? FORMAT "Join speed:" ?></div>
<input type="number" name="maxjoins" value="<? VAR MaxJoins ?>" class="third" min="0"
title="How many channels are joined in one JOIN command. 0 is unlimited (default). Set to small positive value if you get disconnected with `Max SendQ Exceeded'"/>
title="<? FORMAT "How many channels are joined in one JOIN command. 0 is unlimited (default). Set to small positive value if you get disconnected with Max SendQ Exceeded”" ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Max IRC Networks Number:</div>
<div class="inputlabel"><? FORMAT "Max IRC Networks Number:" ?></div>
<input type="number" name="maxnetworks" value="<? VAR MaxNetworks ?>" class="third" min="0"
title="Maximum number of IRC networks allowed for this user." <? IF !ImAdmin ?>disabled="disabled"<? ENDIF ?> />
title="<? FORMAT "Maximum number of IRC networks allowed for this user." ?>" <? IF !ImAdmin ?>disabled="disabled"<? ENDIF ?> />
</div>
<? SETBLOCK Substitutions_Link ?><a href="http://wiki.znc.in/ExpandString" target="_blank" class="external"><? FORMAT "Substitutions" ?></a><? ENDSETBLOCK ?>
<div class="subsection half" id="ctcpreplies_plain">
<div class="inputlabel">CTCP Replies:</div>
<div class="inputlabel"><? FORMAT "CTCP Replies:" ?></div>
<div><textarea name="ctcpreplies" cols="70" rows="3" id="ctcpreplies_text"><? LOOP CTCPLoop ?><? VAR CTCP ?>
<? ENDLOOP ?>
</textarea></div>
<br /><span class="info">One reply per line. Example: TIME Buy a watch!</span>
<br /><span class="info"><a href="http://wiki.znc.in/ExpandString" target="_blank" class="external">Substitutions</a> are available</span>
<br /><span class="info"><? FORMAT "One reply per line. Example: <code>TIME Buy a watch!</code>" ?></span>
<br /><span class="info"><? FORMAT "{1} are available" "Substitutions_Link ESC=" ?></span>
</div>
<div class="subsection" id="ctcpreplies_js" style="display:none">
<div class="inputlabel">CTCP Replies:</div>
<div class="inputlabel"><? FORMAT "CTCP Replies:" ?></div>
<div>
<table style="width:100%">
<thead>
<tr>
<th>Request</th>
<th>Response</th>
<th><? FORMAT "Request" ?></th>
<th><? FORMAT "Response" ?></th>
<th/>
</tr>
</thead>
<tbody id="ctcpreplies_tbody"/>
</table>
<input type="button" value="Add" id="ctcpreplies_add"/>
<span class="info"><a href="http://wiki.znc.in/ExpandString" target="_blank" class="external">Substitutions</a> are available</span>
<span class="info"><? FORMAT "{1} are available" "Substitutions_Link ESC=" ?></span>
<datalist id="ctcpreplies_list">
<option value="PING"/>
<option value="FINGER"/>
@@ -354,23 +359,23 @@
<script type="text/javascript">ctcpreplies_init(jQuery);</script>
<div class="subsection">
<div class="inputlabel">Skin:</div>
<div class="inputlabel"><? FORMAT "Skin:" ?></div>
<? IF SkinLoop ROWS > 1 ?>
<select name="skin">
<option value="">- Global -</option>
<option value=""><? FORMAT "- Global -" ?></option>
<? LOOP SkinLoop ?>
<option value="<? VAR Name ?>"<? IF Checked ?> selected="selected"<? ENDIF ?>><? IF Name == "_default_" ?>Default<? ELSE ?><? VAR Name ?><? ENDIF ?></option>
<option value="<? VAR Name ?>"<? IF Checked ?> selected="selected"<? ENDIF ?>><? IF Name == "_default_" ?><? FORMAT "Default" ?><? ELSE ?><? VAR Name ?><? ENDIF ?></option>
<? ENDLOOP ?>
</select>
<? ELSE ?>
No other skins found
<? FORMAT "No other skins found" ?>
<? ENDIF ?>
</div>
<div class="subsection">
<div class="inputlabel">Language:</div>
<div class="inputlabel"><? FORMAT "Language:" ?></div>
<? IF HaveI18N ?>
<select name="language">
@@ -391,7 +396,7 @@
<? LOOP EmbeddedModuleLoop ?>
<? IF Embed ?>
<div class="section">
<h3>Module <? VAR ModName ?></h3>
<h3><? FORMAT "Module {1}" ModName ?></h3>
<? INC *Embed ?>
</div>
<? ENDIF ?>
@@ -399,10 +404,24 @@
<div class="submitline">
<? IF ImAdmin ?>
<input type="submit" name="submit_return" value="<? IF Edit ?>Save<? ELSE ?><? IF Clone ?>Clone<? ELSE ?>Create<? ENDIF ?><? ENDIF ?> and return" />
<input type="submit" name="submit_continue" value="<? IF Edit ?>Save<? ELSE ?><? IF Clone ?>Clone<? ELSE ?>Create<? ENDIF ?><? ENDIF ?> and continue" />
<? IF Edit ?>
<input type="submit" name="submit_return" value="<? FORMAT "Save and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Save and continue" ?>"/>
<? ELSE IF Clone ?>
<input type="submit" name="submit_return" value="<? FORMAT "Clone and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Clone and continue" ?>"/>
<? ELSE ?>
<input type="submit" name="submit_return" value="<? FORMAT "Create and return" ?>"/>
<input type="submit" name="submit_continue" value="<? FORMAT "Create and continue" ?>"/>
<? ENDIF ?>
<? ELSE ?>
<input type="submit" value="<? IF Edit ?>Save<? ELSE ?><? IF Clone ?>Clone<? ELSE ?>Create<? ENDIF ?><? ENDIF ?>" />
<? IF Edit ?>
<input type="submit" value="<? FORMAT "Save" ?>"/>
<? ELSE IF Clone ?>
<input type="submit" value="<? FORMAT "Clone" ?>"/>
<? ELSE ?>
<input type="submit" value="<? FORMAT "Create" ?>"/>
<? ENDIF ?>
<? ENDIF ?>
</div>
</form>
+5 -4
View File
@@ -1,19 +1,20 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<div class="section">
<h3>Confirm Network Deletion</h3>
<h3><? FORMAT "Confirm Network Deletion" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
Are you sure you want to delete "<? VAR Username ?>/<? VAR Network ?>"?
<? FORMAT "Are you sure you want to delete network “{2}” of user “{1}”?" Username Network ?>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>delnetwork" method="post">
<? INC _csrf_check.tmpl ?>
<input type="hidden" name="user" value="<? VAR Username ?>" />
<input type="hidden" name="name" value="<? VAR Network ?>" />
<div class="yesnobutton"><input type="submit" value="Yes" /></div>
<div class="yesnobutton"><input type="submit" value="<? FORMAT "Yes" ?>"/></div>
</form>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>listusers" method="get">
<div class="yesnobutton"><input type="submit" value="No" /></div>
<div class="yesnobutton"><input type="submit" value="<? FORMAT "No" ?>"/></div>
</form>
</div>
</div>
+5 -4
View File
@@ -1,19 +1,20 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<div class="section">
<h3>Confirm User Deletion</h3>
<h3><? FORMAT "Confirm User Deletion" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
Are you sure you want to delete "<? VAR Username ?>"?
<? FORMAT "Are you sure you want to delete user “{1}”?" Username ?>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>deluser" method="post">
<? INC _csrf_check.tmpl ?>
<input type="hidden" name="submitted" value="1" />
<input type="hidden" name="user" value="<? VAR Username ?>" />
<div class="yesnobutton"><input type="submit" value="Yes" /></div>
<div class="yesnobutton"><input type="submit" value="<? FORMAT "Yes" ?>"/></div>
</form>
<form action="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>listusers" method="get">
<div class="yesnobutton"><input type="submit" value="No" /></div>
<div class="yesnobutton"><input type="submit" value="<? FORMAT "No" ?>"/></div>
</form>
</div>
</div>
@@ -1,36 +1,39 @@
<? I18N znc-webadmin ?>
<div class="encoding-settings">
<? IF EncodingDisabled ?>
<div>
ZNC is compiled without encodings support. <a href="http://icu-project.org/">ICU</a> is required for it.
<? SETBLOCK Encoding_ICULink ?><a href="http://icu-project.org/">ICU</a><? ENDSETBLOCK ?>
<? FORMAT "ZNC is compiled without encodings support. {1} is required for it." "Encoding_ICULink ESC=" ?>
</div>
<? ELSE ?><?IF LegacyEncodingDisabled ?>
<div>
<!-- TODO don't hardcode modpython here -->
Legacy mode is disabled by modpython.
<? FORMAT "Legacy mode is disabled by modpython." ?>
</div>
<? ENDIF ?><? ENDIF ?>
<div>
<? SETBLOCK Encoding_Placeholder ?><span class="encoding-placeholder-big">&nbsp;&nbsp;<span class="encoding-placeholder"></span>&nbsp;&nbsp;</span><? ENDSETBLOCK ?>
<div class="checkboxandlabel checkbox">
<input type="radio" name="encoding_utf" id="encoding_utf_legacy" value="legacy" <? IF EncodingUtf == "legacy" ?>checked="checked"<? ENDIF ?> <? IF LegacyEncodingDisabled ?>disabled="disabled"<? ENDIF ?> />
<label for="encoding_utf_legacy">Don't ensure any encoding at all (legacy mode, not recommended)</label>
<label for="encoding_utf_legacy"><? FORMAT "Don't ensure any encoding at all (legacy mode, not recommended)" ?></label>
</div>
<div class="checkboxandlabel checkbox">
<input type="radio" name="encoding_utf" id="encoding_utf_send" value="send" <? IF EncodingUtf == "send" ?>checked="checked"<? ENDIF ?> <? IF EncodingDisabled ?>disabled="disabled"<? ENDIF ?> />
<label for="encoding_utf_send">Try to parse as UTF-8 and as <span class="encoding-placeholder-big">&nbsp;&nbsp;<span class="encoding-placeholder"></span>&nbsp;&nbsp;</span>, send as UTF-8 (recommended)</label>
<label for="encoding_utf_send"><? FORMAT "Try to parse as UTF-8 and as {1}, send as UTF-8 (recommended)" "Encoding_Placeholder ESC=" ?></label>
</div>
<div class="checkboxandlabel checkbox">
<input type="radio" name="encoding_utf" id="encoding_utf_receive" value="receive" <? IF EncodingUtf == "receive" ?>checked="checked"<? ENDIF ?> <? IF EncodingDisabled ?>disabled="disabled"<? ENDIF ?> />
<label for="encoding_utf_receive">Try to parse as UTF-8 and as <span class="encoding-placeholder-big">&nbsp;&nbsp;<span class="encoding-placeholder"></span>&nbsp;&nbsp;</span>, send as <span class="encoding-placeholder-big">&nbsp;&nbsp;<span class="encoding-placeholder"></span >&nbsp;&nbsp;</span></label>
<label for="encoding_utf_receive"><? FORMAT "Try to parse as UTF-8 and as {1}, send as {1}" "Encoding_Placeholder ESC=" ?></label>
</div>
<div class="checkboxandlabel checkbox">
<input type="radio" name="encoding_utf" id="encoding_utf_simple" value="simple" <? IF EncodingUtf == "simple" ?>checked="checked"<? ENDIF ?> <? IF EncodingDisabled ?>disabled="disabled"<? ENDIF ?> />
<label for="encoding_utf_simple">Parse and send as <span class="encoding-placeholder-big">&nbsp;&nbsp;<span class="encoding-placeholder"></span>&nbsp;&nbsp;</span> only</label>
<label for="encoding_utf_simple"><? FORMAT "Parse and send as {1} only" "Encoding_Placeholder ESC=" ?></label>
</div>
</div>
<div class="half">
<input type="text" name="encoding" value="<? VAR Encoding ?>" list="encoding_list"
<? IF EncodingDisabled ?>disabled="disabled"<? ENDIF ?> />
<br /><div class="third"><span class="info">E.g. <code>UTF-8</code>, or <code>ISO-8859-15</code></span></div>
<br /><div class="third"><span class="info"><? FORMAT "E.g. <code>UTF-8</code>, or <code>ISO-8859-15</code>" ?></span></div>
<script type="text/javascript">
function updateEncodingText() {
var value = jQuery("input[name=encoding]").val();
+4 -3
View File
@@ -1,8 +1,9 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<div class="textsection">
<p>Welcome to the ZNC webadmin module.<br/>
All changes you make will be in effect immediately after you submitted them.</p>
<p><? FORMAT "Welcome to the ZNC webadmin module." ?><br/>
<? FORMAT "All changes you make will be in effect immediately after you submitted them." ?></p>
</div>
<? INC Footer.tmpl ?>
<? INC Footer.tmpl ?>
+8 -7
View File
@@ -1,3 +1,4 @@
<? I18N znc-webadmin ?>
<? AddRow JSLoop HREF=/modfiles/global/webadmin/webadmin.js ?>
<? AddRow CSSLoop HREF=/modfiles/global/webadmin/webadmin.css ?>
<? INC Header.tmpl ?>
@@ -11,10 +12,10 @@
<table class="sortable">
<thead>
<tr>
<td class="ignore-sort">[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>adduser">Add</a>]</td>
<td>Username</td>
<td>Networks</td>
<td>Clients</td>
<td class="ignore-sort">[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>adduser"><? FORMAT "Add" ?></a>]</td>
<td><? FORMAT "Username" ?></td>
<td><? FORMAT "Networks" ?></td>
<td><? FORMAT "Clients" ?></td>
</tr>
</thead>
@@ -23,9 +24,9 @@
<tr class="<?IF __EVEN__?>evenrow<?ELSE?>oddrow<?ENDIF?>">
<td>
<span class="nowrap">
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>edituser?user=<?VAR Username ESC=URL?>">Edit</a>]
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>adduser?clone=<? VAR Username ESC=URL ?>" alt="Clone <? VAR Username ESC=URL ?>">Clone</a>]
<? IF !IsSelf ?>[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>deluser?user=<?VAR Username ESC=URL?>">Delete</a>]<? ENDIF ?>
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>edituser?user=<?VAR Username ESC=URL?>"><? FORMAT "Edit" ?></a>]
[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>adduser?clone=<? VAR Username ESC=URL ?>" alt="Clone <? VAR Username ESC=URL ?>"><? FORMAT "Clone" ?></a>]
<? IF !IsSelf ?>[<a href="<? VAR URIPrefix TOP ?><? VAR ModPath TOP ?>deluser?user=<?VAR Username ESC=URL?>"><? FORMAT "Delete" ?></a>]<? ENDIF ?>
</span>
</td>
<td><? VAR Username ?></td>
+46 -45
View File
@@ -1,23 +1,24 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<div class="section">
<h3>Listen Port(s)</h3>
<h3><? FORMAT "Listen Port(s)" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<table>
<thead>
<tr>
<td>Port</td>
<td>BindHost</td>
<td>SSL</td>
<td>IPv4</td>
<td>IPv6</td>
<td>IRC</td>
<td>Web</td>
<td>URIPrefix</td>
<td>Delete</td>
<td><? FORMAT "Port" ?></td>
<td><? FORMAT "BindHost" ?></td>
<td><? FORMAT "SSL" ?></td>
<td><? FORMAT "IPv4" ?></td>
<td><? FORMAT "IPv6" ?></td>
<td><? FORMAT "IRC" ?></td>
<td><? FORMAT "HTTP" ?></td>
<td><? FORMAT "URIPrefix" ?></td>
<td><? FORMAT "Delete" ?></td>
</tr>
</thead>
@@ -38,7 +39,7 @@
<div class="checkbox"><input type="checkbox" disabled="disabled" <? IF IsIRC ?>checked="checked"<? ENDIF ?>/></div>
</td>
<td>
<div class="checkbox"><input type="checkbox" disabled="disabled" <? IF IsWeb ?>checked="checked"<? ENDIF ?>/></div>
<div class="checkbox"><input type="checkbox" disabled="disabled" <? IF IsHTTP ?>checked="checked"<? ENDIF ?>/></div>
</td>
<td><? VAR URIPrefix ?></td>
<td>
@@ -49,10 +50,10 @@
<input name="port" type="hidden" value="<? VAR Port ?>"/>
<input name="ipv4" type="hidden" value="<? VAR IsIPV4 ?>"/>
<input name="ipv6" type="hidden" value="<? VAR IsIPV6 ?>"/>
<input type="submit" value="Del"/>
<input type="submit" value="<? FORMAT "Del" ?>"/>
</form>
<? ELSE ?>
<input type="button" disabled="disabled" title="To delete port which you use to access webadmin itself, either connect to webadmin via another port, or do it in IRC (/znc DelPort)" value="Current"/>
<input type="button" disabled="disabled" title="<? FORMAT "To delete port which you use to access webadmin itself, either connect to webadmin via another port, or do it in IRC (/znc DelPort)" ?>" value="<? FORMAT "Current" ?>"/>
<? ENDIF ?>
</td>
</tr>
@@ -68,7 +69,7 @@
<td><div class="checkbox"><input name="irc" type="checkbox" checked="checked"/></div></td>
<td><div class="checkbox"><input name="web" type="checkbox" checked="checked"/></div></td>
<td><input name="uriprefix" type="text" value="/" class="sixth"/></td>
<td><input type="submit" value="Add"/></td>
<td><input type="submit" value="<? FORMAT "Add" ?>"/></td>
</form>
</tr>
</table>
@@ -82,15 +83,15 @@
<input type="hidden" name="submitted" value="1" />
<div class="section">
<h3>Settings</h3>
<h3><? FORMAT "Settings" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<div class="subsection">
<div class="inputlabel">Skin:</div>
<div class="inputlabel"><? FORMAT "Skin:" ?></div>
<select name="skin">
<? LOOP SkinLoop ?>
<option value="<? VAR Name ?>"<? IF Checked ?> selected="selected"<? ENDIF ?>><? IF Name == "_default_" ?>Default<? ELSE ?><? VAR Name ?><? ENDIF ?></option>
<option value="<? VAR Name ?>"<? IF Checked ?> selected="selected"<? ENDIF ?>><? IF Name == "_default_" ?><? FORMAT "Default" ?><? ELSE ?><? VAR Name ?><? ENDIF ?></option>
<? ENDLOOP ?>
</select>
@@ -98,61 +99,61 @@
<div class="subsection third">
<div class="inputlabel">Status Prefix:</div>
<div class="inputlabel"><? FORMAT "Status Prefix:" ?></div>
<input type="text" name="statusprefix" value="<? VAR StatusPrefix ?>"
title="The prefix for the status and module queries."/>
<br /><span class="info">Default for new users only.</span>
title="<? FORMAT "The prefix for the status and module queries." ?>"/>
<br /><span class="info"><? FORMAT "Default for new users only." ?></span>
</div>
<div class="subsection half">
<div class="inputlabel">Maximum Buffer Size:</div>
<input type="text" name="maxbufsize" value="<? VAR MaxBufferSize ?>"
title="Sets the global Max Buffer Size a user can have."/>
<div class="inputlabel"><? FORMAT "Maximum Buffer Size:" ?></div>
<input type="number" name="maxbufsize" value="<? VAR MaxBufferSize ?>"
title="<? FORMAT "Sets the global Max Buffer Size a user can have." ?>"/>
</div>
<div class="subsection half">
<div class="inputlabel">Connect Delay:</div>
<input type="text" name="connectdelay" value="<? VAR ConnectDelay ?>"
title="The time every connection will be delayed, in seconds. Some servers refuse your connection if you reconnect too fast. This affects the connection between ZNC and the IRC server; not the connection between your IRC client and ZNC. "/>
<div class="inputlabel"><? FORMAT "Connect Delay:" ?></div>
<input type="number" name="connectdelay" value="<? VAR ConnectDelay ?>"
title="<? FORMAT "The time between connection attempts to IRC servers, in seconds. This affects the connection between ZNC and the IRC server; not the connection between your IRC client and ZNC." ?>"/>
</div>
<div class="subsection half">
<div class="inputlabel">Server Throttle:</div>
<input type="text" name="serverthrottle" value="<? VAR ServerThrottle ?>"
title="The time between two connect attempts to the same hostname." />
<div class="inputlabel"><? FORMAT "Server Throttle:" ?></div>
<input type="number" name="serverthrottle" value="<? VAR ServerThrottle ?>"
title="<? FORMAT "The minimal time between two connect attempts to the same hostname, in seconds. Some servers refuse your connection if you reconnect too fast." ?>"/>
</div>
<div class="subsection half">
<div class="inputlabel">Anonymous IP Limit:</div>
<input type="text" name="anoniplimit" value="<? VAR AnonIPLimit ?>"
title="Limits the number of unidentified connections per IP." />
<div class="inputlabel"><? FORMAT "Anonymous Connection Limit per IP:" ?></div>
<input type="number" name="anoniplimit" value="<? VAR AnonIPLimit ?>"
title="<? FORMAT "Limits the number of unidentified connections per IP." ?>"/>
</div>
<div class="subsection">
<div class="inputlabel">Protect Web Sessions:</div>
<div class="inputlabel"><? FORMAT "Protect Web Sessions:" ?></div>
<div class="checkbox"><input type="checkbox" name="protectwebsessions" id="protectwebsessions_checkbox"<? IF ProtectWebSessions ?> checked="checked"<? ENDIF ?> />
<label for="protectwebsessions_checkbox">Disallow IP changing during each web session</label></div>
<label for="protectwebsessions_checkbox"><? FORMAT "Disallow IP changing during each web session" ?></label></div>
</div>
<div class="subsection">
<div class="inputlabel">Hide ZNC Version:</div>
<div class="inputlabel"><? FORMAT "Hide ZNC Version:" ?></div>
<div class="checkbox"><input type="checkbox" name="hideversion" id="hideversion_checkbox"<? IF HideVersion ?> checked="checked"<? ENDIF ?> />
<label for="hideversion_checkbox">Hide version number from non-ZNC users</label></div>
<label for="hideversion_checkbox"><? FORMAT "Hide version number from non-ZNC users" ?></label></div>
</div>
<div class="subsection twothird">
<div class="inputlabel">MOTD:</div>
<div class="inputlabel"><? FORMAT "MOTD:" ?></div>
<textarea name="motd" cols="70" rows="5" class="monospace"><? LOOP MOTDLoop ?><? VAR Line ?>
<? ENDLOOP ?>
</textarea>
<br /><span class="info">"Message of the Day", sent to all ZNC users on connect.</span>
<br /><span class="info"><? FORMAT "“Message of the Day, sent to all ZNC users on connect." ?></span>
</div>
</div>
@@ -160,17 +161,17 @@
</div>
<div class="section">
<h3>Global Modules</h3>
<h3><? FORMAT "Global Modules" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td>Name</td>
<td>Arguments</td>
<td>Description</td>
<td>Loaded by networks</td>
<td>Loaded by users</td>
<td><? FORMAT "Name" ?></td>
<td><? FORMAT "Arguments" ?></td>
<td><? FORMAT "Description" ?></td>
<td><? FORMAT "Loaded by networks" ?></td>
<td><? FORMAT "Loaded by users" ?></td>
</tr>
</thead>
<tbody>
@@ -227,7 +228,7 @@
</div>
<div class="submitline">
<input type="submit" value="Save" />
<input type="submit" value="<? FORMAT "Save" ?>"/>
</div>
</form>
+25 -24
View File
@@ -1,53 +1,54 @@
<? I18N znc-webadmin ?>
<? INC Header.tmpl ?>
<div class="textsection">
<div class="section">
<h3>Information</h3>
<h3><? FORMAT "Information" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<table>
<tbody>
<tr class="oddrow">
<th>Uptime</th>
<th><? FORMAT "Uptime" ?></th>
<td><? VAR Uptime ?></td>
</tr>
<? IF IsAdmin ?>
<tr class="evenrow">
<th>Total Users</th>
<th><? FORMAT "Total Users" ?></th>
<td><? VAR TotalUsers ?></td>
</tr>
<tr class="oddrow">
<th>Total Networks</th>
<th><? FORMAT "Total Networks" ?></th>
<td><? VAR TotalNetworks ?></td>
</tr>
<tr class="evenrow">
<th>Attached Networks</th>
<th><? FORMAT "Attached Networks" ?></th>
<td><? VAR AttachedNetworks ?></td>
</tr>
<tr class="oddrow">
<th>Total Client Connections</th>
<th><? FORMAT "Total Client Connections" ?></th>
<td><? VAR TotalCConnections ?></td>
</tr>
<tr class="evenrow">
<th>Total IRC Connections</th>
<th><? FORMAT "Total IRC Connections" ?></th>
<td><? VAR TotalIRCConnections ?></td>
</tr>
<? ELSE ?>
<tr class="evenrow">
<th>Networks</th>
<th><? FORMAT "Networks" ?></th>
<td><? VAR TotalNetworks ?></td>
</tr>
<tr class="oddrow">
<th>Attached Networks</th>
<th><? FORMAT "Attached Networks" ?></th>
<td><? VAR AttachedNetworks ?></td>
</tr>
<tr class="evenrow">
<th>Client Connections</th>
<th><? FORMAT "Client Connections" ?></th>
<td><? VAR TotalCConnections ?></td>
</tr>
<tr class="oddrow">
<th>IRC Connections</th>
<th><? FORMAT "IRC Connections" ?></th>
<td><? VAR TotalIRCConnections ?></td>
</tr>
<? ENDIF ?>
@@ -59,21 +60,21 @@
<? IF IsAdmin ?>
<div class="section">
<h3>Total</h3>
<h3><? FORMAT "Total" ?></h3>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td></td>
<td>In</td>
<td>Out</td>
<td>Total</td>
<td><? FORMAT CTX="Traffic" "In" ?></td>
<td><? FORMAT CTX="Traffic" "Out" ?></td>
<td><? FORMAT "Total" ?></td>
</tr>
</thead>
<tbody>
<tr class="evenrow">
<td>Users</td>
<td><? FORMAT "Users" ?></td>
<td><? VAR UserIn TOP ?></td>
<td><? VAR UserOut TOP ?></td>
<td><? VAR UserTotal TOP ?></td>
@@ -85,7 +86,7 @@
<td><? VAR ZNCTotal TOP ?></td>
</tr>
<tr class="evenrow">
<td>Total</td>
<td><? FORMAT "Total" ?></td>
<td><? VAR AllIn TOP ?></td>
<td><? VAR AllOut TOP ?></td>
<td><? VAR AllTotal TOP ?></td>
@@ -100,20 +101,20 @@
<? IF TrafficLoop ?>
<div class="section">
<? IF IsAdmin ?>
<h3>Users</h3>
<h3><? FORMAT "Users" ?></h3>
<? ELSE ?>
<h3>Traffic</h3>
<h3><? FORMAT "Traffic" ?></h3>
<? ENDIF ?>
<div class="sectionbg">
<div class="sectionbody">
<table>
<thead>
<tr>
<td>Username</td>
<td>Network</td>
<td>In</td>
<td>Out</td>
<td>Total</td>
<td><? FORMAT "User" ?></td>
<td><? FORMAT "Network" ?></td>
<td><? FORMAT CTX="Traffic" "In" ?></td>
<td><? FORMAT CTX="Traffic" "Out" ?></td>
<td><? FORMAT "Total" ?></td>
</tr>
</thead>
<tbody>
+31 -26
View File
@@ -1,3 +1,34 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: modules/po/../data/cert/tmpl/index.tmpl:5
msgid "here"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:6
msgid ""
"You already have a certificate set, use the form below to overwrite the "
"current certificate. Alternatively click {1} to delete your certificate."
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:8
msgid "You do not have a certificate yet."
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:14 cert.cpp:73
msgid "Certificate"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:18
msgid "PEM File:"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:22
msgid "Update"
msgstr ""
#: cert.cpp:28
msgid "Pem file deleted"
msgstr ""
@@ -28,32 +59,6 @@ msgstr ""
msgid "Show the current certificate"
msgstr ""
#: cert.cpp:73 modules/po/../data/cert/tmpl/index.tmpl:14
msgid "Certificate"
msgstr ""
#: cert.cpp:106
msgid "Use a ssl certificate to connect to a server"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:5
msgid "here"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:6
msgid ""
"You already have a certificate set, use the form below to overwrite the "
"current certificate. Alternatively click {1} to delete your certificate."
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:8
msgid "You do not have a certificate yet."
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:18
msgid "PEM File:"
msgstr ""
#: modules/po/../data/cert/tmpl/index.tmpl:22
msgid "Update"
msgstr ""
+28 -28
View File
@@ -19,6 +19,34 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: modules/po/../data/cert/tmpl/index.tmpl:5
msgid "here"
msgstr "сюда"
#: modules/po/../data/cert/tmpl/index.tmpl:6
msgid ""
"You already have a certificate set, use the form below to overwrite the "
"current certificate. Alternatively click {1} to delete your certificate."
msgstr ""
"У вас уже есть сертификат, с помощью формы ниже можно его изменить. Чтобы "
"удалить сертификат, нажмите {1}."
#: modules/po/../data/cert/tmpl/index.tmpl:8
msgid "You do not have a certificate yet."
msgstr "У вас пока нет сертификата."
#: modules/po/../data/cert/tmpl/index.tmpl:14 cert.cpp:73
msgid "Certificate"
msgstr "Сертификат"
#: modules/po/../data/cert/tmpl/index.tmpl:18
msgid "PEM File:"
msgstr "Файл PEM:"
#: modules/po/../data/cert/tmpl/index.tmpl:22
msgid "Update"
msgstr "Обновить"
#: cert.cpp:28
msgid "Pem file deleted"
msgstr "Файл Pem удалён"
@@ -49,34 +77,6 @@ msgstr "Удалить текущий сертификат"
msgid "Show the current certificate"
msgstr "Показать текущий сертификат"
#: cert.cpp:73 modules/po/../data/cert/tmpl/index.tmpl:14
msgid "Certificate"
msgstr "Сертификат"
#: cert.cpp:106
msgid "Use a ssl certificate to connect to a server"
msgstr "Соединение с сервером с помошью сертификата SSL"
#: modules/po/../data/cert/tmpl/index.tmpl:5
msgid "here"
msgstr "сюда"
#: modules/po/../data/cert/tmpl/index.tmpl:6
msgid ""
"You already have a certificate set, use the form below to overwrite the "
"current certificate. Alternatively click {1} to delete your certificate."
msgstr ""
"У вас уже есть сертификат, с помощью формы ниже можно его изменить. Чтобы "
"удалить сертификат, нажмите {1}."
#: modules/po/../data/cert/tmpl/index.tmpl:8
msgid "You do not have a certificate yet."
msgstr "У вас пока нет сертификата."
#: modules/po/../data/cert/tmpl/index.tmpl:18
msgid "PEM File:"
msgstr "Файл PEM:"
#: modules/po/../data/cert/tmpl/index.tmpl:22
msgid "Update"
msgstr "Обновить"
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+128 -115
View File
@@ -87,14 +87,14 @@ class CWebAdminMod : public CModule {
MODCONSTRUCTOR(CWebAdminMod) {
VPair vParams;
vParams.push_back(make_pair("user", ""));
AddSubPage(std::make_shared<CWebSubPage>("settings", "Global Settings",
CWebSubPage::F_ADMIN));
AddSubPage(std::make_shared<CWebSubPage>("edituser", "Your Settings",
AddSubPage(std::make_shared<CWebSubPage>(
"settings", d("Global Settings"), vParams, CWebSubPage::F_ADMIN));
AddSubPage(std::make_shared<CWebSubPage>("edituser", d("Your Settings"),
vParams));
AddSubPage(
std::make_shared<CWebSubPage>("traffic", "Traffic Info", vParams));
AddSubPage(std::make_shared<CWebSubPage>("listusers", "Manage Users",
CWebSubPage::F_ADMIN));
AddSubPage(std::make_shared<CWebSubPage>("traffic", d("Traffic Info"),
vParams));
AddSubPage(std::make_shared<CWebSubPage>(
"listusers", d("Manage Users"), vParams, CWebSubPage::F_ADMIN));
}
~CWebAdminMod() override {}
@@ -184,7 +184,8 @@ class CWebAdminMod : public CModule {
}
if (sUsername.empty()) {
WebSock.PrintErrorPage("Invalid Submission [Username is required]");
WebSock.PrintErrorPage(
t("Invalid Submission [Username is required]"));
return nullptr;
}
@@ -197,7 +198,7 @@ class CWebAdminMod : public CModule {
if (sArg != WebSock.GetParam("password2")) {
WebSock.PrintErrorPage(
"Invalid Submission [Passwords do not match]");
t("Invalid Submission [Passwords do not match]"));
return nullptr;
}
@@ -378,12 +379,14 @@ class CWebAdminMod : public CModule {
if (!pNewUser->GetModules().LoadModule(
sModName, sArgs, CModInfo::UserModule, pNewUser,
nullptr, sModRet)) {
sModLoadError = "Unable to load module [" +
sModName + "] [" + sModRet + "]";
sModLoadError =
f("Unable to load module [{1}]: {2}")(sModName,
sModRet);
}
} catch (...) {
sModLoadError = "Unable to load module [" + sModName +
"] [" + sArgs + "]";
sModLoadError = f(
"Unable to load module [{1}] with arguments [{2}]")(
sModName, sArgs);
}
if (!sModLoadError.empty()) {
@@ -405,11 +408,13 @@ class CWebAdminMod : public CModule {
if (!pNewUser->GetModules().LoadModule(
sModName, sArgs, CModInfo::UserModule, pNewUser,
nullptr, sModRet)) {
sModLoadError = "Unable to load module [" + sModName +
"] [" + sModRet + "]";
sModLoadError = f("Unable to load module [{1}]: {2}")(
sModName, sModRet);
}
} catch (...) {
sModLoadError = "Unable to load module [" + sModName + "]";
sModLoadError =
f("Unable to load module [{1}] with arguments [{2}]")(
sModName, sArgs);
}
if (!sModLoadError.empty()) {
@@ -489,7 +494,7 @@ class CWebAdminMod : public CModule {
return NetworkPage(WebSock, Tmpl, pUser);
}
WebSock.PrintErrorPage("No such username");
WebSock.PrintErrorPage(t("No such user"));
return true;
} else if (sPageName == "editnetwork") {
CIRCNetwork* pNetwork = SafeGetNetworkFromParam(WebSock);
@@ -502,7 +507,7 @@ class CWebAdminMod : public CModule {
}
if (!pNetwork) {
WebSock.PrintErrorPage("No such username or network");
WebSock.PrintErrorPage(t("No such user or network"));
return true;
}
@@ -534,7 +539,7 @@ class CWebAdminMod : public CModule {
}
if (!pNetwork) {
WebSock.PrintErrorPage("No such username or network");
WebSock.PrintErrorPage(t("No such user or network"));
return true;
}
@@ -544,7 +549,7 @@ class CWebAdminMod : public CModule {
}
CChan* pChan = pNetwork->FindChan(sChan);
if (!pChan) {
WebSock.PrintErrorPage("No such channel");
WebSock.PrintErrorPage(t("No such channel"));
return true;
}
@@ -563,7 +568,7 @@ class CWebAdminMod : public CModule {
return ChanPage(WebSock, Tmpl, pNetwork);
}
WebSock.PrintErrorPage("No such username or network");
WebSock.PrintErrorPage(t("No such user or network"));
return true;
} else if (sPageName == "delchan") {
CIRCNetwork* pNetwork = SafeGetNetworkFromParam(WebSock);
@@ -579,7 +584,7 @@ class CWebAdminMod : public CModule {
return DelChan(WebSock, pNetwork);
}
WebSock.PrintErrorPage("No such username or network");
WebSock.PrintErrorPage(t("No such user or network"));
return true;
} else if (sPageName == "deluser") {
if (!spSession->IsAdmin()) {
@@ -593,7 +598,7 @@ class CWebAdminMod : public CModule {
CUser* pUser = CZNC::Get().FindUser(sUser);
if (!pUser) {
WebSock.PrintErrorPage("No such username");
WebSock.PrintErrorPage(t("No such user"));
return true;
}
@@ -610,14 +615,15 @@ class CWebAdminMod : public CModule {
if (pUser && pUser == spSession->GetUser()) {
WebSock.PrintErrorPage(
"Please don't delete yourself, suicide is not the answer!");
t("Please don't delete yourself, suicide is not the "
"answer!"));
return true;
} else if (CZNC::Get().DeleteUser(sUser)) {
WebSock.Redirect(GetWebPath() + "listusers");
return true;
}
WebSock.PrintErrorPage("No such username");
WebSock.PrintErrorPage(t("No such user"));
return true;
} else if (sPageName == "edituser") {
CString sUserName = SafeGetUserNameParam(WebSock);
@@ -639,7 +645,7 @@ class CWebAdminMod : public CModule {
return UserPage(WebSock, Tmpl, pUser);
}
WebSock.PrintErrorPage("No such username");
WebSock.PrintErrorPage(t("No such user"));
return true;
} else if (sPageName == "listusers" && spSession->IsAdmin()) {
return ListUsersPage(WebSock, Tmpl);
@@ -673,7 +679,7 @@ class CWebAdminMod : public CModule {
CUser* pUser = pNetwork->GetUser();
if (!pUser) {
WebSock.PrintErrorPage("That user doesn't exist");
WebSock.PrintErrorPage(t("No such user"));
return true;
}
@@ -682,11 +688,11 @@ class CWebAdminMod : public CModule {
Tmpl["Network"] = pNetwork->GetName();
CTemplate& breadUser = Tmpl.AddRow("BreadCrumbs");
breadUser["Text"] = "Edit User [" + pUser->GetUserName() + "]";
breadUser["Text"] = f("Edit User [{1}]")(pUser->GetUserName());
breadUser["URL"] =
GetWebPath() + "edituser?user=" + pUser->GetUserName();
CTemplate& breadNet = Tmpl.AddRow("BreadCrumbs");
breadNet["Text"] = "Edit Network [" + pNetwork->GetName() + "]";
breadNet["Text"] = f("Edit Network [{1}]")(pNetwork->GetName());
breadNet["URL"] = GetWebPath() + "editnetwork?user=" +
pUser->GetUserName() + "&network=" +
pNetwork->GetName();
@@ -696,35 +702,35 @@ class CWebAdminMod : public CModule {
Tmpl["Action"] = "editchan";
Tmpl["Edit"] = "true";
Tmpl["Title"] =
"Edit Channel" + CString(" [" + pChan->GetName() + "]") +
" of Network [" + pNetwork->GetName() + "] of User [" +
pNetwork->GetUser()->GetUserName() + "]";
f("Edit Channel [{1}] of Network [{2}] of User [{3}]")(
pChan->GetName(), pNetwork->GetName(),
pUser->GetUserName());
Tmpl["ChanName"] = pChan->GetName();
Tmpl["BufferSize"] = CString(pChan->GetBufferCount());
Tmpl["DefModes"] = pChan->GetDefaultModes();
Tmpl["Key"] = pChan->GetKey();
breadChan["Text"] = "Edit Channel [" + pChan->GetName() + "]";
breadChan["Text"] = f("Edit Channel [{1}]")(pChan->GetName());
if (pChan->InConfig()) {
Tmpl["InConfig"] = "true";
}
} else {
Tmpl["Action"] = "addchan";
Tmpl["Title"] =
"Add Channel" +
CString(" for User [" + pUser->GetUserName() + "]");
Tmpl["Title"] = f("Add Channel to Network [{1}] of User [{2}]")(
pNetwork->GetName(), pUser->GetUserName());
Tmpl["BufferSize"] = CString(pUser->GetBufferCount());
Tmpl["DefModes"] = CString(pUser->GetDefaultChanModes());
Tmpl["InConfig"] = "true";
breadChan["Text"] = "Add Channel";
breadChan["Text"] = t("Add Channel");
}
// o1 used to be AutoCycle which was removed
CTemplate& o2 = Tmpl.AddRow("OptionLoop");
o2["Name"] = "autoclearchanbuffer";
o2["DisplayName"] = "Auto Clear Chan Buffer";
o2["Tooltip"] = "Automatically Clear Channel Buffer After Playback";
o2["DisplayName"] = t("Auto Clear Chan Buffer");
o2["Tooltip"] =
t("Automatically Clear Channel Buffer After Playback");
if ((pChan && pChan->AutoClearChanBuffer()) ||
(!pChan && pUser->AutoClearChanBuffer())) {
o2["Checked"] = "true";
@@ -732,15 +738,15 @@ class CWebAdminMod : public CModule {
CTemplate& o3 = Tmpl.AddRow("OptionLoop");
o3["Name"] = "detached";
o3["DisplayName"] = "Detached";
o3["DisplayName"] = t("Detached");
if (pChan && pChan->IsDetached()) {
o3["Checked"] = "true";
}
CTemplate& o4 = Tmpl.AddRow("OptionLoop");
o4["Name"] = "disabled";
o4["DisplayName"] = "Disabled";
if (pChan && pChan->IsDisabled()) {
o4["Name"] = "enabled";
o4["DisplayName"] = t("Enabled");
if (pChan && !pChan->IsDisabled()) {
o4["Checked"] = "true";
}
@@ -762,7 +768,8 @@ class CWebAdminMod : public CModule {
if (!pChan) {
if (sChanName.empty()) {
WebSock.PrintErrorPage("Channel name is a required argument");
WebSock.PrintErrorPage(
t("Channel name is a required argument"));
return true;
}
@@ -770,15 +777,15 @@ class CWebAdminMod : public CModule {
pChan = new CChan(sChanName, pNetwork, true);
if (pNetwork->FindChan(pChan->GetName())) {
WebSock.PrintErrorPage("Channel [" + pChan->GetName() +
"] already exists");
WebSock.PrintErrorPage(
f("Channel [{1}] already exists")(pChan->GetName()));
delete pChan;
return true;
}
if (!pNetwork->AddChan(pChan)) {
WebSock.PrintErrorPage("Could not add channel [" + sChanName +
"]");
WebSock.PrintErrorPage(
f("Could not add channel [{1}]")(sChanName));
return true;
}
}
@@ -810,11 +817,11 @@ class CWebAdminMod : public CModule {
}
}
bool bDisabled = WebSock.GetParam("disabled").ToBool();
if (bDisabled)
pChan->Disable();
else
bool bEnabled = WebSock.GetParam("enabled").ToBool();
if (bEnabled)
pChan->Enable();
else
pChan->Disable();
CTemplate TmplMod;
TmplMod["User"] = pUser->GetUserName();
@@ -825,8 +832,8 @@ class CWebAdminMod : public CModule {
}
if (!CZNC::Get().WriteConfig()) {
WebSock.PrintErrorPage(
"Channel added/modified, but config was not written");
WebSock.PrintErrorPage(t(
"Channel was added/modified, but config file was not written"));
return true;
}
@@ -902,7 +909,7 @@ class CWebAdminMod : public CModule {
}
CTemplate& breadUser = Tmpl.AddRow("BreadCrumbs");
breadUser["Text"] = "Edit User [" + pUser->GetUserName() + "]";
breadUser["Text"] = f("Edit User [{1}]")(pUser->GetUserName());
breadUser["URL"] =
GetWebPath() + "edituser?user=" + pUser->GetUserName();
CTemplate& breadNet = Tmpl.AddRow("BreadCrumbs");
@@ -910,9 +917,8 @@ class CWebAdminMod : public CModule {
if (pNetwork) {
Tmpl["Action"] = "editnetwork";
Tmpl["Edit"] = "true";
Tmpl["Title"] = "Edit Network" +
CString(" [" + pNetwork->GetName() + "]") +
" of User [" + pUser->GetUserName() + "]";
Tmpl["Title"] = f("Edit Network [{1}] of User [{2}]")(
pNetwork->GetName(), pUser->GetUserName());
Tmpl["Name"] = pNetwork->GetName();
Tmpl["Nick"] = pNetwork->GetNick();
@@ -932,7 +938,7 @@ class CWebAdminMod : public CModule {
Tmpl["IRCConnectEnabled"] =
CString(pNetwork->GetIRCConnectEnabled());
breadNet["Text"] = "Edit Network [" + pNetwork->GetName() + "]";
breadNet["Text"] = f("Edit Network [{1}]")(pNetwork->GetName());
const vector<CServer*>& vServers = pNetwork->GetServers();
for (const CServer* pServer : vServers) {
@@ -969,21 +975,21 @@ class CWebAdminMod : public CModule {
} else {
if (!spSession->IsAdmin() && !pUser->HasSpaceForNewNetwork()) {
WebSock.PrintErrorPage(
"Network number limit reached. Ask an admin to "
"increase the limit for you, or delete unneeded "
"networks from Your Settings.");
t("Network number limit reached. Ask an admin to "
"increase the limit for you, or delete unneeded "
"networks from Your Settings."));
return true;
}
Tmpl["Action"] = "addnetwork";
Tmpl["Title"] =
"Add Network for User [" + pUser->GetUserName() + "]";
f("Add Network for User [{1}]")(pUser->GetUserName());
Tmpl["IRCConnectEnabled"] = "true";
Tmpl["FloodProtection"] = "true";
Tmpl["FloodRate"] = "1.0";
Tmpl["FloodBurst"] = "4";
Tmpl["JoinDelay"] = "0";
breadNet["Text"] = "Add Network";
breadNet["Text"] = t("Add Network");
}
FOR_EACH_MODULE(i, make_pair(pUser, pNetwork)) {
@@ -1029,14 +1035,15 @@ class CWebAdminMod : public CModule {
CString sName = WebSock.GetParam("name").Trim_n();
if (sName.empty()) {
WebSock.PrintErrorPage("Network name is a required argument");
WebSock.PrintErrorPage(t("Network name is a required argument"));
return true;
}
if (!pNetwork && !spSession->IsAdmin() &&
!pUser->HasSpaceForNewNetwork()) {
WebSock.PrintErrorPage(
"Network number limit reached. Ask an admin to increase the "
"limit for you, or delete few old ones from Your Settings");
t("Network number limit reached. Ask an admin to increase the "
"limit for you, or delete unneeded networks from Your "
"Settings."));
return true;
}
if (!pNetwork || pNetwork->GetName() != sName) {
@@ -1141,14 +1148,16 @@ class CWebAdminMod : public CModule {
if (!pNetwork->GetModules().LoadModule(
sModName, sArgs, CModInfo::NetworkModule, pUser,
pNetwork, sModRet)) {
sModLoadError = "Unable to load module [" +
sModName + "] [" + sModRet + "]";
sModLoadError =
f("Unable to load module [{1}]: {2}")(sModName,
sModRet);
}
} else if (pMod->GetArgs() != sArgs) {
if (!pNetwork->GetModules().ReloadModule(
sModName, sArgs, pUser, pNetwork, sModRet)) {
sModLoadError = "Unable to reload module [" +
sModName + "] [" + sModRet + "]";
sModLoadError =
f("Unable to reload module [{1}]: {2}")(
sModName, sModRet);
}
}
@@ -1183,8 +1192,8 @@ class CWebAdminMod : public CModule {
}
if (!CZNC::Get().WriteConfig()) {
WebSock.PrintErrorPage(
"Network added/modified, but config was not written");
WebSock.PrintErrorPage(t(
"Network was added/modified, but config file was not written"));
return true;
}
@@ -1207,12 +1216,13 @@ class CWebAdminMod : public CModule {
}
if (!pUser) {
WebSock.PrintErrorPage("That user doesn't exist");
WebSock.PrintErrorPage(t("No such user"));
return true;
}
if (sNetwork.empty()) {
WebSock.PrintErrorPage("That network doesn't exist for this user");
WebSock.PrintErrorPage(
t("That network doesn't exist for this user"));
return true;
}
@@ -1229,7 +1239,7 @@ class CWebAdminMod : public CModule {
if (!CZNC::Get().WriteConfig()) {
WebSock.PrintErrorPage(
"Network deleted, but config was not written");
t("Network was deleted, but config file was not written"));
return true;
}
@@ -1242,7 +1252,8 @@ class CWebAdminMod : public CModule {
CString sChan = WebSock.GetParam("name", false);
if (sChan.empty()) {
WebSock.PrintErrorPage("That channel doesn't exist for this user");
WebSock.PrintErrorPage(
t("That channel doesn't exist for this network"));
return true;
}
@@ -1251,7 +1262,7 @@ class CWebAdminMod : public CModule {
if (!CZNC::Get().WriteConfig()) {
WebSock.PrintErrorPage(
"Channel deleted, but config was not written");
t("Channel was deleted, but config file was not written"));
return true;
}
@@ -1269,14 +1280,14 @@ class CWebAdminMod : public CModule {
if (!WebSock.GetParam("submitted").ToUInt()) {
if (pUser) {
Tmpl["Action"] = "edituser";
Tmpl["Title"] = "Edit User [" + pUser->GetUserName() + "]";
Tmpl["Title"] = f("Edit User [{1}]")(pUser->GetUserName());
Tmpl["Edit"] = "true";
} else {
CString sUsername = WebSock.GetParam("clone", false);
pUser = CZNC::Get().FindUser(sUsername);
if (pUser) {
Tmpl["Title"] = "Clone User [" + pUser->GetUserName() + "]";
Tmpl["Title"] = f("Clone User [{1}]")(pUser->GetUserName());
Tmpl["Clone"] = "true";
Tmpl["CloneUsername"] = pUser->GetUserName();
}
@@ -1457,10 +1468,10 @@ class CWebAdminMod : public CModule {
CTemplate& o1 = Tmpl.AddRow("OptionLoop");
o1["Name"] = "autoclearchanbuffer";
o1["DisplayName"] = "Auto Clear Chan Buffer";
o1["DisplayName"] = t("Auto Clear Chan Buffer");
o1["Tooltip"] =
"Automatically Clear Channel Buffer After Playback (the "
"default value for new channels)";
t("Automatically Clear Channel Buffer After Playback (the "
"default value for new channels)");
if (!pUser || pUser->AutoClearChanBuffer()) {
o1["Checked"] = "true";
}
@@ -1469,21 +1480,21 @@ class CWebAdminMod : public CModule {
CTemplate& o4 = Tmpl.AddRow("OptionLoop");
o4["Name"] = "multiclients";
o4["DisplayName"] = "Multi Clients";
o4["DisplayName"] = t("Multi Clients");
if (!pUser || pUser->MultiClients()) {
o4["Checked"] = "true";
}
CTemplate& o7 = Tmpl.AddRow("OptionLoop");
o7["Name"] = "appendtimestamp";
o7["DisplayName"] = "Append Timestamps";
o7["DisplayName"] = t("Append Timestamps");
if (pUser && pUser->GetTimestampAppend()) {
o7["Checked"] = "true";
}
CTemplate& o8 = Tmpl.AddRow("OptionLoop");
o8["Name"] = "prependtimestamp";
o8["DisplayName"] = "Prepend Timestamps";
o8["DisplayName"] = t("Prepend Timestamps");
if (pUser && pUser->GetTimestampPrepend()) {
o8["Checked"] = "true";
}
@@ -1491,14 +1502,14 @@ class CWebAdminMod : public CModule {
if (spSession->IsAdmin()) {
CTemplate& o9 = Tmpl.AddRow("OptionLoop");
o9["Name"] = "denyloadmod";
o9["DisplayName"] = "Deny LoadMod";
o9["DisplayName"] = t("Deny LoadMod");
if (pUser && pUser->DenyLoadMod()) {
o9["Checked"] = "true";
}
CTemplate& o10 = Tmpl.AddRow("OptionLoop");
o10["Name"] = "isadmin";
o10["DisplayName"] = "Admin";
o10["DisplayName"] = t("Admin");
if (pUser && pUser->IsAdmin()) {
o10["Checked"] = "true";
}
@@ -1508,7 +1519,7 @@ class CWebAdminMod : public CModule {
CTemplate& o11 = Tmpl.AddRow("OptionLoop");
o11["Name"] = "denysetbindhost";
o11["DisplayName"] = "Deny SetBindHost";
o11["DisplayName"] = t("Deny SetBindHost");
if (pUser && pUser->DenySetBindHost()) {
o11["Checked"] = "true";
}
@@ -1516,8 +1527,9 @@ class CWebAdminMod : public CModule {
CTemplate& o12 = Tmpl.AddRow("OptionLoop");
o12["Name"] = "autoclearquerybuffer";
o12["DisplayName"] = "Auto Clear Query Buffer";
o12["Tooltip"] = "Automatically Clear Query Buffer After Playback";
o12["DisplayName"] = t("Auto Clear Query Buffer");
o12["Tooltip"] =
t("Automatically Clear Query Buffer After Playback");
if (!pUser || pUser->AutoClearQueryBuffer()) {
o12["Checked"] = "true";
}
@@ -1540,8 +1552,8 @@ class CWebAdminMod : public CModule {
CString sUsername = WebSock.GetParam("user");
if (!pUser && CZNC::Get().FindUser(sUsername)) {
WebSock.PrintErrorPage("Invalid Submission [User " + sUsername +
" already exists]");
WebSock.PrintErrorPage(
f("Invalid Submission: User {1} already exists")(sUsername));
return true;
}
@@ -1552,7 +1564,7 @@ class CWebAdminMod : public CModule {
}
CString sErr;
CString sAction;
CString sConfigErrorMsg;
if (!pUser) {
CString sClone = WebSock.GetParam("clone");
@@ -1563,22 +1575,24 @@ class CWebAdminMod : public CModule {
// Add User Submission
if (!CZNC::Get().AddUser(pNewUser, sErr)) {
delete pNewUser;
WebSock.PrintErrorPage("Invalid submission [" + sErr + "]");
WebSock.PrintErrorPage(f("Invalid submission: {1}")(sErr));
return true;
}
pUser = pNewUser;
sAction = "added";
sConfigErrorMsg =
t("User was added, but config file was not written");
} else {
// Edit User Submission
if (!pUser->Clone(*pNewUser, sErr, false)) {
delete pNewUser;
WebSock.PrintErrorPage("Invalid Submission [" + sErr + "]");
WebSock.PrintErrorPage(f("Invalid submission: {1}")(sErr));
return true;
}
delete pNewUser;
sAction = "edited";
sConfigErrorMsg =
t("User was edited, but config file was not written");
}
CTemplate TmplMod;
@@ -1589,8 +1603,7 @@ class CWebAdminMod : public CModule {
}
if (!CZNC::Get().WriteConfig()) {
WebSock.PrintErrorPage("User " + sAction +
", but config was not written");
WebSock.PrintErrorPage(sConfigErrorMsg);
return true;
}
@@ -1608,7 +1621,7 @@ class CWebAdminMod : public CModule {
bool ListUsersPage(CWebSock& WebSock, CTemplate& Tmpl) {
std::shared_ptr<CWebSession> spSession = WebSock.GetSession();
const map<CString, CUser*>& msUsers = CZNC::Get().GetUserMap();
Tmpl["Title"] = "Manage Users";
Tmpl["Title"] = t("Manage Users");
Tmpl["Action"] = "listusers";
for (const auto& it : msUsers) {
@@ -1629,7 +1642,7 @@ class CWebAdminMod : public CModule {
bool TrafficPage(CWebSock& WebSock, CTemplate& Tmpl) {
std::shared_ptr<CWebSession> spSession = WebSock.GetSession();
Tmpl["Title"] = "Traffic Info";
Tmpl["Title"] = t("Traffic Info");
Tmpl["Uptime"] = CZNC::Get().GetUptime();
const map<CString, CUser*>& msUsers = CZNC::Get().GetUserMap();
@@ -1737,7 +1750,7 @@ class CWebAdminMod : public CModule {
eAddr = ADDR_IPV6ONLY;
} else {
WebSock.GetSession()->AddError(
"Choose either IPv4 or IPv6 or both.");
t("Choose either IPv4 or IPv6 or both."));
return SettingsPage(WebSock, Tmpl);
}
}
@@ -1754,7 +1767,7 @@ class CWebAdminMod : public CModule {
eAccept = CListener::ACCEPT_HTTP;
} else {
WebSock.GetSession()->AddError(
"Choose either IRC or Web or both.");
t("Choose either IRC or HTTP or both."));
return SettingsPage(WebSock, Tmpl);
}
}
@@ -1767,7 +1780,7 @@ class CWebAdminMod : public CModule {
}
if (!CZNC::Get().WriteConfig()) {
WebSock.GetSession()->AddError(
"Port changed, but config was not written");
t("Port was changed, but config file was not written"));
}
} else {
WebSock.GetSession()->AddError(sMessage);
@@ -1793,7 +1806,7 @@ class CWebAdminMod : public CModule {
if (bIPv6) {
eAddr = ADDR_IPV6ONLY;
} else {
WebSock.GetSession()->AddError("Invalid request.");
WebSock.GetSession()->AddError(t("Invalid request."));
return SettingsPage(WebSock, Tmpl);
}
}
@@ -1803,11 +1816,11 @@ class CWebAdminMod : public CModule {
CZNC::Get().DelListener(pListener);
if (!CZNC::Get().WriteConfig()) {
WebSock.GetSession()->AddError(
"Port changed, but config was not written");
t("Port was changed, but config file was not written"));
}
} else {
WebSock.GetSession()->AddError(
"The specified listener was not found.");
t("The specified listener was not found."));
}
return SettingsPage(WebSock, Tmpl);
@@ -1817,7 +1830,7 @@ class CWebAdminMod : public CModule {
Tmpl.SetFile("settings.tmpl");
if (!WebSock.GetParam("submitted").ToUInt()) {
Tmpl["Action"] = "settings";
Tmpl["Title"] = "Settings";
Tmpl["Title"] = t("Global Settings");
Tmpl["StatusPrefix"] = CZNC::Get().GetStatusPrefix();
Tmpl["MaxBufferSize"] = CString(CZNC::Get().GetMaxBufferSize());
Tmpl["ConnectDelay"] = CString(CZNC::Get().GetConnectDelay());
@@ -1840,7 +1853,7 @@ class CWebAdminMod : public CModule {
l["Port"] = CString(pListener->GetPort());
l["BindHost"] = pListener->GetBindHost();
l["IsWeb"] = CString(pListener->GetAcceptType() !=
l["IsHTTP"] = CString(pListener->GetAcceptType() !=
CListener::ACCEPT_IRC);
l["IsIRC"] = CString(pListener->GetAcceptType() !=
CListener::ACCEPT_HTTP);
@@ -1999,14 +2012,14 @@ class CWebAdminMod : public CModule {
if (!CZNC::Get().GetModules().LoadModule(
sModName, sArgs, CModInfo::GlobalModule, nullptr,
nullptr, sModRet)) {
sModLoadError = "Unable to load module [" + sModName +
"] [" + sModRet + "]";
sModLoadError = f("Unable to load module [{1}]: {2}")(
sModName, sModRet);
}
} else if (pMod->GetArgs() != sArgs) {
if (!CZNC::Get().GetModules().ReloadModule(
sModName, sArgs, nullptr, nullptr, sModRet)) {
sModLoadError = "Unable to reload module [" + sModName +
"] [" + sModRet + "]";
sModLoadError = f("Unable to reload module [{1}]: {2}")(
sModName, sModRet);
}
}
@@ -2034,7 +2047,7 @@ class CWebAdminMod : public CModule {
if (!CZNC::Get().WriteConfig()) {
WebSock.GetSession()->AddError(
"Settings changed, but config was not written");
t("Settings were changed, but config file was not written"));
}
WebSock.Redirect(GetWebPath() + "settings");
+44 -4
View File
@@ -1,3 +1,47 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: webskins/_default_/tmpl/index.tmpl:6
msgid "Welcome to ZNC's web interface!"
msgstr ""
#: webskins/_default_/tmpl/index.tmpl:11
msgid ""
"No Web-enabled modules have been loaded. Load modules from IRC (“<code>/msg "
"*status help</code>” and “<code>/msg *status loadmod &lt;module&gt;</"
"code>”). Once you have loaded some Web-enabled modules, the menu will expand."
msgstr ""
#: webskins/_default_/tmpl/InfoBar.tmpl:2
msgid "-Guest-"
msgstr ""
#: webskins/_default_/tmpl/InfoBar.tmpl:5
msgid "Logged in as: {1} (from {2})"
msgstr ""
#: webskins/_default_/tmpl/Menu.tmpl:4
msgid "Home"
msgstr ""
#: webskins/_default_/tmpl/Menu.tmpl:7
msgid "Global Modules"
msgstr ""
#: webskins/_default_/tmpl/Menu.tmpl:20
msgid "User Modules"
msgstr ""
#: webskins/_default_/tmpl/Menu.tmpl:35
msgid "Network Modules ({1})"
msgstr ""
#: webskins/_default_/tmpl/LoginBar.tmpl:3
msgid "Logout"
msgstr ""
#: ClientCommand.cpp:51
msgid "You must be connected with a network to use this command"
msgstr ""
@@ -17,7 +61,3 @@ msgstr ""
#: ClientCommand.cpp:79
msgid "No nicks on [{1}]"
msgstr ""
#: webskins/_default_/tmpl/LoginBar.tmpl:3
msgid "Logout"
msgstr ""