mirror of
https://github.com/znc/znc.git
synced 2026-08-10 02:43:05 +02:00
Merge branch 'master' into sasl
Conflicts: include/znc/Client.h src/Client.cpp src/Modules.cpp test/integration/tests/modules.cpp
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -37,11 +37,7 @@ function(add_cxx_module mod modpath)
|
||||
if(moddepend_${mod})
|
||||
add_dependencies("module_${mod}" ${moddepend_${mod}})
|
||||
endif()
|
||||
# ${znclib_LIB_DEPENDS} is to overcome OSX's need for -undefined suppress
|
||||
# when accessing symbols exported by dependencies of znclib (e.g.
|
||||
# openssl), but not used in znclib itself
|
||||
target_link_libraries("module_${mod}" PRIVATE ZNC ${modlink_${mod}}
|
||||
${znclib_LIB_DEPENDS})
|
||||
target_link_libraries("module_${mod}" PRIVATE ZNC ${modlink_${mod}})
|
||||
set_target_properties("module_${mod}" PROPERTIES "" "" ${modprop_${mod}})
|
||||
install(TARGETS "module_${mod}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/znc")
|
||||
@@ -54,8 +50,7 @@ function(add_python_module mod modpath)
|
||||
endfunction()
|
||||
|
||||
if(CYRUS_FOUND)
|
||||
set(modcompile_cyrusauth PRIVATE ${CYRUS_CFLAGS})
|
||||
set(modlink_cyrusauth ${CYRUS_LDFLAGS})
|
||||
set(modlink_cyrusauth PkgConfig::CYRUS)
|
||||
else()
|
||||
set(moddisable_cyrusauth true)
|
||||
endif()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2008 Michael "Svedrin" Ziegler diese-addy@funzt-halt.net
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* Author: imaginos <imaginos@imaginos.net>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2008 by Stefan Rado
|
||||
* based on admin.cpp by Sebastian Ramacher
|
||||
* based on admin.cpp in crox branch
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <znc/Client.h>
|
||||
#include <znc/IRCNetwork.h>
|
||||
#include <znc/IRCSock.h>
|
||||
#include <znc/Modules.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class CCoreCaps : public CModule {
|
||||
// Note: for historical reasons CClient and CIRCSock have such fields, but
|
||||
// really they should not.
|
||||
// TODO: move these fields and their handling from core to this module.
|
||||
class AwayNotify : public CCapability {
|
||||
void OnServerChangedSupport(CIRCNetwork* pNetwork,
|
||||
bool bState) override {
|
||||
pNetwork->GetIRCSock()->m_bAwayNotify = bState;
|
||||
}
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override {
|
||||
pClient->m_bAwayNotify = bState;
|
||||
}
|
||||
};
|
||||
|
||||
class AccountNotify : public CCapability {
|
||||
void OnServerChangedSupport(CIRCNetwork* pNetwork,
|
||||
bool bState) override {
|
||||
pNetwork->GetIRCSock()->m_bAccountNotify = bState;
|
||||
}
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override {
|
||||
pClient->m_bAccountNotify = bState;
|
||||
}
|
||||
};
|
||||
|
||||
class AccountTag : public CCapability {
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override {
|
||||
pClient->SetTagSupport("account", bState);
|
||||
}
|
||||
};
|
||||
|
||||
class ExtendedJoin : public CCapability {
|
||||
void OnServerChangedSupport(CIRCNetwork* pNetwork,
|
||||
bool bState) override {
|
||||
pNetwork->GetIRCSock()->m_bExtendedJoin = bState;
|
||||
}
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override {
|
||||
pClient->m_bExtendedJoin = bState;
|
||||
}
|
||||
};
|
||||
|
||||
public:
|
||||
MODCONSTRUCTOR(CCoreCaps) {
|
||||
AddServerDependentCapability("away-notify", std::make_unique<AwayNotify>());
|
||||
AddServerDependentCapability("account-notify", std::make_unique<AccountNotify>());
|
||||
AddServerDependentCapability("account-tag", std::make_unique<AccountTag>());
|
||||
AddServerDependentCapability("extended-join", std::make_unique<ExtendedJoin>());
|
||||
}
|
||||
};
|
||||
|
||||
GLOBALMODULEDEFS(
|
||||
CCoreCaps,
|
||||
t_s("Adds support for several IRC capabilities, extracted from ZNC core."))
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2008 Heiko Hund <heiko@ist.eigentlich.net>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="buffersize"><? FORMAT "Buffer Size:" ?></label></div>
|
||||
<div class="inputlabel"><label for="buffersize"><? FORMAT "Buffer size:" ?></label></div>
|
||||
<input id="buffersize" type="number" name="buffersize" value="<? VAR BufferSize ?>" size="10" min="0"
|
||||
title="<? FORMAT "The buffer count." ?>"/>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="defmodes"><? FORMAT "Default Modes:" ?></label></div>
|
||||
<div class="inputlabel"><label for="defmodes"><? FORMAT "Default modes:" ?></label></div>
|
||||
<input id="defmodes" type="text" name="defmodes" value="<? VAR DefModes ?>" size="10"
|
||||
title="<? FORMAT "The default modes of the channel." ?>"/>
|
||||
</div>
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<? ENDIF ?>
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="quitmsg"><? FORMAT "Quit Message:" ?></label></div>
|
||||
<div class="inputlabel"><label for="quitmsg"><? FORMAT "Quit message:" ?></label></div>
|
||||
<input id="quitmsg" type="text" name="quitmsg" value="<? VAR QuitMsg ?>" class="full" maxlength="256"
|
||||
title="<? FORMAT "You may define a Message shown, when you quit IRC." ?>"
|
||||
<? IF !QuitMsgEdit ?>disabled<? ENDIF ?> />
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
title="<? FORMAT "Please re-type the above password." ?>"/>
|
||||
</div>
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="authonlyviamodule"><? FORMAT "Auth Only Via Module:" ?></label></div>
|
||||
<div class="inputlabel"><label for="authonlyviamodule"><? FORMAT "Auth only via module:" ?></label></div>
|
||||
<input id="authonlyviamodule" type="checkbox" name="authonlyviamodule"
|
||||
title="<? FORMAT "Allow user authentication by external modules only, disabling built-in password authentication." ?>"
|
||||
<? IF AuthOnlyViaModule ?>checked="checked" <? ENDIF ?><? IF !ImAdmin ?>disabled="disabled" <? ENDIF ?>/>
|
||||
@@ -87,7 +87,7 @@
|
||||
<? IF !IdentEdit ?>disabled<? ENDIF ?> />
|
||||
</div>
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="statusprefix"><? FORMAT "Status Prefix:" ?></label></div>
|
||||
<div class="inputlabel"><label for="statusprefix"><? FORMAT "Status prefix:" ?></label></div>
|
||||
<input id="statusprefix" type="text" name="statusprefix" value="<? VAR StatusPrefix ?>" class="half" maxlength="5"
|
||||
title="<? FORMAT "The prefix for the status and module queries." ?>"/>
|
||||
</div>
|
||||
@@ -114,7 +114,7 @@
|
||||
<? ENDIF ?>
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="quitmsg"><? FORMAT "Quit Message:" ?></label></div>
|
||||
<div class="inputlabel"><label for="quitmsg"><? FORMAT "Quit message:" ?></label></div>
|
||||
<input type="text" name="quitmsg" value="<? VAR QuitMsg ?>" class="full" maxlength="256"
|
||||
title="<? FORMAT "You may define a Message shown, when you quit IRC." ?>"
|
||||
<? IF !QuitMsgEdit ?>disabled<? ENDIF ?> />
|
||||
@@ -249,13 +249,13 @@
|
||||
<div class="sectionbg">
|
||||
<div class="sectionbody">
|
||||
<div class="subsection third">
|
||||
<div class="inputlabel"><label for="chanmodes"><? FORMAT "Default Modes:" ?></label></div>
|
||||
<div class="inputlabel"><label for="chanmodes"><? FORMAT "Default modes:" ?></label></div>
|
||||
<input id="chanmodes" type="text" name="chanmodes" value="<? VAR DefaultChanModes ?>" maxlength="32"
|
||||
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"><label for="chanbufsize"><? FORMAT "Buffer Size:" ?></label></div>
|
||||
<div class="inputlabel"><label for="chanbufsize"><? FORMAT "Buffer size:" ?></label></div>
|
||||
<input id="chanbufsize" type="number" name="chanbufsize" value="<? VAR ChanBufferSize ?>" min="0"
|
||||
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>
|
||||
@@ -269,12 +269,12 @@
|
||||
<div class="sectionbg">
|
||||
<div class="sectionbody">
|
||||
<div class="subsection third">
|
||||
<div class="inputlabel"><label for="maxquerybuffers"><? FORMAT "Max Buffers:" ?></label></div>
|
||||
<div class="inputlabel"><label for="maxquerybuffers"><? FORMAT "Max buffers:" ?></label></div>
|
||||
<input id="maxquerybuffers" type="number" name="maxquerybuffers" value="<? VAR MaxQueryBuffers ?>" class="third" min="0"
|
||||
title="<? FORMAT "Maximum number of query buffers. 0 is unlimited." ?>"/>
|
||||
</div>
|
||||
<div class="subsection third">
|
||||
<div class="inputlabel"><label for="querybufsize"><? FORMAT "Buffer Size:" ?></label></div>
|
||||
<div class="inputlabel"><label for="querybufsize"><? FORMAT "Buffer size:" ?></label></div>
|
||||
<input id="querybufsize" type="number" name="querybufsize" value="<? VAR QueryBufferSize ?>" min="0"
|
||||
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>
|
||||
@@ -304,7 +304,7 @@
|
||||
<div class="sectionbg">
|
||||
<div class="sectionbody">
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="timestampformat"><? FORMAT "Timestamp Format:" ?></label></div>
|
||||
<div class="inputlabel"><label for="timestampformat"><? FORMAT "Timestamp format:" ?></label></div>
|
||||
<input id="timestampformat" type="text" name="timestampformat" value="<? VAR TimestampFormat ?>" class="full"
|
||||
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>
|
||||
@@ -326,7 +326,7 @@
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="jointries"><? FORMAT "Join Tries:" ?></label></div>
|
||||
<div class="inputlabel"><label for="jointries"><? FORMAT "Join tries:" ?></label></div>
|
||||
<input id="jointries" type="number" name="jointries" value="<? VAR JoinTries ?>" class="third" min="0"
|
||||
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>
|
||||
@@ -341,14 +341,14 @@
|
||||
title="<? FORMAT "How much time ZNC waits (in seconds) until it receives something from network or declares the connection timeout. This happens after attempts to ping the peer." ?>"/>
|
||||
</div>
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><label for="maxnetworks"><? FORMAT "Max IRC Networks Number:" ?></label></div>
|
||||
<div class="inputlabel"><label for="maxnetworks"><? FORMAT "Max IRC networks number:" ?></label></div>
|
||||
<input type="number" name="maxnetworks" value="<? VAR MaxNetworks ?>" class="third" min="0"
|
||||
title="<? FORMAT "Maximum number of IRC networks allowed for this user." ?>" <? IF !ImAdmin ?>disabled="disabled"<? ENDIF ?> />
|
||||
</div>
|
||||
|
||||
<? SETBLOCK Substitutions_Link ?><a href="https://wiki.znc.in/ExpandString" target="_blank" class="external"><? FORMAT "Substitutions" ?></a><? ENDSETBLOCK ?>
|
||||
<div class="subsection half" id="ctcpreplies_plain">
|
||||
<div class="inputlabel"><label for="ctcpreplies_text"><? FORMAT "CTCP Replies:" ?></label></div>
|
||||
<div class="inputlabel"><label for="ctcpreplies_text"><? FORMAT "CTCP replies:" ?></label></div>
|
||||
<div><textarea name="ctcpreplies" cols="70" rows="3" id="ctcpreplies_text" <? IF !CTCPEdit ?>disabled<? ENDIF ?>><? LOOP CTCPLoop ?><? VAR CTCP ?>
|
||||
<? ENDLOOP ?>
|
||||
</textarea></div>
|
||||
@@ -356,7 +356,7 @@
|
||||
<br /><span class="info"><? FORMAT "{1} are available" "Substitutions_Link ESC=" ?></span>
|
||||
</div>
|
||||
<div class="subsection" id="ctcpreplies_js" style="display:none" data-placeholder="<? FORMAT "Empty value means this CTCP request will be ignored" ?>">
|
||||
<div class="inputlabel"><? FORMAT "CTCP Replies:" ?></div>
|
||||
<div class="inputlabel"><? FORMAT "CTCP replies:" ?></div>
|
||||
<div>
|
||||
<table style="width:100%">
|
||||
<thead>
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
|
||||
<div class="subsection third">
|
||||
<div class="inputlabel"><label for="statusprefix"><? FORMAT "Status Prefix:" ?></label></div>
|
||||
<div class="inputlabel"><label for="statusprefix"><? FORMAT "Status prefix:" ?></label></div>
|
||||
<input id="statusprefix" type="text" name="statusprefix" value="<? VAR StatusPrefix ?>"
|
||||
title="<? FORMAT "The prefix for the status and module queries." ?>"/>
|
||||
<br /><span class="info"><? FORMAT "Default for new users only." ?></span>
|
||||
@@ -107,48 +107,48 @@
|
||||
|
||||
|
||||
<div class="subsection half">
|
||||
<div class="inputlabel"><label for="maxbufsize"><? FORMAT "Maximum Buffer Size:" ?></label></div>
|
||||
<div class="inputlabel"><label for="maxbufsize"><? FORMAT "Maximum buffer size:" ?></label></div>
|
||||
<input id="maxbufsize" 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"><label for="connectdelay"><? FORMAT "Connect Delay:" ?></label></div>
|
||||
<div class="inputlabel"><label for="connectdelay"><? FORMAT "Connect delay:" ?></label></div>
|
||||
<input id="connectdelay" 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"><label for="serverthrottle"><? FORMAT "Server Throttle:" ?></label></div>
|
||||
<div class="inputlabel"><label for="serverthrottle"><? FORMAT "Server throttle:" ?></label></div>
|
||||
<input id="serverthrottle" 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"><label for="anoniplimit"><? FORMAT "Anonymous Connection Limit per IP:" ?></label></div>
|
||||
<div class="inputlabel"><label for="anoniplimit"><? FORMAT "Anonymous connection limit per IP:" ?></label></div>
|
||||
<input id="anoniplimit" type="number" name="anoniplimit" value="<? VAR AnonIPLimit ?>"
|
||||
title="<? FORMAT "Limits the number of unidentified connections per IP." ?>"/>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><? FORMAT "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"><? FORMAT "Disallow IP changing during each web session" ?></label></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><? FORMAT "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"><? FORMAT "Hide version number from non-ZNC users" ?></label></div>
|
||||
</div>
|
||||
|
||||
<div class="subsection">
|
||||
<div class="inputlabel"><? FORMAT "Auth Only Via Module:" ?></div>
|
||||
<div class="inputlabel"><? FORMAT "Auth only via module:" ?></div>
|
||||
<div class="checkbox"><input type="checkbox" name="authonlyviamodule" id="authonlyviamodule_checkbox"<? IF AuthOnlyViaModule ?> checked="checked"<? ENDIF ?> />
|
||||
<label for="authonlyviamodule_checkbox"><? FORMAT "Allow user authentication by external modules only" ?></label></div>
|
||||
</div>
|
||||
|
||||
@@ -15,23 +15,23 @@
|
||||
</tr>
|
||||
<? IF IsAdmin ?>
|
||||
<tr class="evenrow">
|
||||
<th><? FORMAT "Total Users" ?></th>
|
||||
<th><? FORMAT "Total users" ?></th>
|
||||
<td><? VAR TotalUsers ?></td>
|
||||
</tr>
|
||||
<tr class="oddrow">
|
||||
<th><? FORMAT "Total Networks" ?></th>
|
||||
<th><? FORMAT "Total networks" ?></th>
|
||||
<td><? VAR TotalNetworks ?></td>
|
||||
</tr>
|
||||
<tr class="evenrow">
|
||||
<th><? FORMAT "Attached Networks" ?></th>
|
||||
<th><? FORMAT "Attached networks" ?></th>
|
||||
<td><? VAR AttachedNetworks ?></td>
|
||||
</tr>
|
||||
<tr class="oddrow">
|
||||
<th><? FORMAT "Total Client Connections" ?></th>
|
||||
<th><? FORMAT "Total client connections" ?></th>
|
||||
<td><? VAR TotalCConnections ?></td>
|
||||
</tr>
|
||||
<tr class="evenrow">
|
||||
<th><? FORMAT "Total IRC Connections" ?></th>
|
||||
<th><? FORMAT "Total IRC connections" ?></th>
|
||||
<td><? VAR TotalIRCConnections ?></td>
|
||||
</tr>
|
||||
<? ELSE ?>
|
||||
@@ -40,7 +40,7 @@
|
||||
<td><? VAR TotalNetworks ?></td>
|
||||
</tr>
|
||||
<tr class="oddrow">
|
||||
<th><? FORMAT "Attached Networks" ?></th>
|
||||
<th><? FORMAT "Attached networks" ?></th>
|
||||
<td><? VAR AttachedNetworks ?></td>
|
||||
</tr>
|
||||
<tr class="evenrow">
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* This was originally written by cycomate.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2006-2007, CNU <bshalm@broadpark.no>
|
||||
*(http://cnu.dieplz.net/znc)
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+36
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -374,6 +374,41 @@ CPerlSocket::~CPerlSocket() {
|
||||
}
|
||||
}
|
||||
|
||||
CPerlCapability::~CPerlCapability() {
|
||||
SvREFCNT_dec(m_serverCb);
|
||||
SvREFCNT_dec(m_clientCb);
|
||||
}
|
||||
|
||||
void CPerlCapability::OnServerChangedSupport(CIRCNetwork* pNetwork, bool bState) {
|
||||
PSTART;
|
||||
PUSH_PTR(CIRCNetwork*, pNetwork);
|
||||
mXPUSHi(bState);
|
||||
PUTBACK;
|
||||
ret = call_sv(m_serverCb, G_EVAL | G_ARRAY);
|
||||
SPAGAIN;
|
||||
SP -= ret;
|
||||
ax = (SP - PL_stack_base) + 1;
|
||||
if (SvTRUE(ERRSV)) {
|
||||
DEBUG("Perl hook OnServerChangedSupport died with: " + PString(ERRSV));
|
||||
}
|
||||
PEND;
|
||||
}
|
||||
|
||||
void CPerlCapability::OnClientChangedSupport(CClient* pClient, bool bState) {
|
||||
PSTART;
|
||||
PUSH_PTR(CClient*, pClient);
|
||||
mXPUSHi(bState);
|
||||
PUTBACK;
|
||||
ret = call_sv(m_clientCb, G_EVAL | G_ARRAY);
|
||||
SPAGAIN;
|
||||
SP -= ret;
|
||||
ax = (SP - PL_stack_base) + 1;
|
||||
if (SvTRUE(ERRSV)) {
|
||||
DEBUG("Perl hook OnServerChangedSupport died with: " + PString(ERRSV));
|
||||
}
|
||||
PEND;
|
||||
}
|
||||
|
||||
template <>
|
||||
void TModInfo<CModPerl>(CModInfo& Info) {
|
||||
Info.SetWikiPage("modperl");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -82,7 +82,7 @@ target_include_directories(modperl_lib PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/.."
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/.."
|
||||
${PERL_INCLUDE_DIRS})
|
||||
target_link_libraries(modperl_lib ${znc_link})
|
||||
target_link_libraries(modperl_lib ZNC)
|
||||
set_target_properties(modperl_lib PROPERTIES
|
||||
PREFIX ""
|
||||
SUFFIX ".${perl_ext}"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -25,7 +25,7 @@ open my $out, ">", $ARGV[1] or die;
|
||||
|
||||
print $out <<'EOF';
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -61,7 +61,10 @@ EModRet OnPrivNotice(CNick& Nick, CString& sMessage)
|
||||
EModRet OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage)
|
||||
EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic)
|
||||
bool OnServerCapAvailable(const CString& sCap)
|
||||
bool OnServerCap302Available(const CString& sCap, const CString& sValue)
|
||||
void OnServerCapResult(const CString& sCap, bool bSuccess)
|
||||
void OnClientAttached()
|
||||
void OnClientDetached()
|
||||
EModRet OnTimerAutoJoin(CChan& Channel)
|
||||
bool OnEmbeddedWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl)
|
||||
EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -189,6 +189,10 @@ class MCString : public std::map<CString, CString> {};
|
||||
bool ExistsNV(const CString& sName) {
|
||||
return $self->EndNV() != $self->FindNV(sName);
|
||||
}
|
||||
void AddServerDependentCapability(const CString& sName, SV* serverCb,
|
||||
SV* clientCb) {
|
||||
$self->AddServerDependentCapability(sName, std::make_unique<CPerlCapability>(serverCb, clientCb));
|
||||
}
|
||||
}
|
||||
|
||||
%extend CModules {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -116,7 +116,10 @@ class ZNC_EXPORT_LIB_EXPORT CPerlModule : public CModule {
|
||||
CString& sMessage) override;
|
||||
EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) override;
|
||||
bool OnServerCapAvailable(const CString& sCap) override;
|
||||
bool OnServerCap302Available(const CString& sCap, const CString& sValue) override;
|
||||
void OnServerCapResult(const CString& sCap, bool bSuccess) override;
|
||||
void OnClientAttached() override;
|
||||
void OnClientDetached() override;
|
||||
EModRet OnTimerAutoJoin(CChan& Channel) override;
|
||||
bool OnEmbeddedWebRequest(CWebSock&, const CString&, CTemplate&) override;
|
||||
EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet) override;
|
||||
@@ -213,6 +216,20 @@ inline CPerlSocket* CreatePerlSocket(CPerlModule* pModule, SV* perlObj) {
|
||||
return new CPerlSocket(pModule, perlObj);
|
||||
}
|
||||
|
||||
class ZNC_EXPORT_LIB_EXPORT CPerlCapability : public CCapability {
|
||||
public:
|
||||
CPerlCapability(SV* serverCb, SV* clientCb)
|
||||
: m_serverCb(newSVsv(serverCb)), m_clientCb(newSVsv(clientCb)) {}
|
||||
~CPerlCapability();
|
||||
|
||||
void OnServerChangedSupport(CIRCNetwork* pNetwork, bool bState) override;
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override;
|
||||
|
||||
private:
|
||||
SV* m_serverCb;
|
||||
SV* m_clientCb;
|
||||
};
|
||||
|
||||
inline bool HaveIPv6() {
|
||||
#ifdef HAVE_IPV6
|
||||
return true;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+49
-51
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -34,17 +34,17 @@ BEGIN {
|
||||
}
|
||||
|
||||
use IO::File;
|
||||
use feature 'switch', 'say';
|
||||
use feature 'say';
|
||||
|
||||
package ZNC::String;
|
||||
use overload '""' => sub {
|
||||
my $self = shift;
|
||||
my @caller = caller;
|
||||
# When called from internal SWIG subroutines, return default stringification (e.g. 'ZNC::String=SCALAR(0x6210002fe090)') instead of the stored string.
|
||||
# Otherwise, ZNC crashes with use-after-free.
|
||||
# SWIG uses it as key for a hash, so without the number in the returned string, different strings which happen to represent the same value, collide.
|
||||
return $self if $caller[0] eq 'ZNC::String';
|
||||
return $self->GetPerlStr;
|
||||
my $self = shift;
|
||||
my @caller = caller;
|
||||
# When called from internal SWIG subroutines, return default stringification (e.g. 'ZNC::String=SCALAR(0x6210002fe090)') instead of the stored string.
|
||||
# Otherwise, ZNC crashes with use-after-free.
|
||||
# SWIG uses it as key for a hash, so without the number in the returned string, different strings which happen to represent the same value, collide.
|
||||
return $self if $caller[0] eq 'ZNC::String';
|
||||
return $self->GetPerlStr;
|
||||
};
|
||||
|
||||
package ZNC::CMessage;
|
||||
@@ -71,16 +71,15 @@ sub UnloadModule {
|
||||
my $cmod = $pmod->{_cmod};
|
||||
my $modpath = $cmod->GetModPath;
|
||||
my $modname = $cmod->GetModName;
|
||||
given ($cmod->GetType()) {
|
||||
when ($ZNC::CModInfo::NetworkModule) {
|
||||
$cmod->GetNetwork->GetModules->removeModule($cmod);
|
||||
}
|
||||
when ($ZNC::CModInfo::UserModule) {
|
||||
$cmod->GetUser->GetModules->removeModule($cmod);
|
||||
}
|
||||
when ($ZNC::CModInfo::GlobalModule) {
|
||||
ZNC::CZNC::Get()->GetModules->removeModule($cmod);
|
||||
}
|
||||
my $type = $cmod->GetType();
|
||||
if ($type == $ZNC::CModInfo::NetworkModule) {
|
||||
$cmod->GetNetwork->GetModules->removeModule($cmod);
|
||||
} elsif ($type == $ZNC::CModInfo::UserModule) {
|
||||
$cmod->GetUser->GetModules->removeModule($cmod);
|
||||
} elsif ($type == $ZNC::CModInfo::GlobalModule) {
|
||||
ZNC::CZNC::Get()->GetModules->removeModule($cmod);
|
||||
} else {
|
||||
die "UnloadModule: unknown module type $type for $modpath";
|
||||
}
|
||||
delete $pmod->{_cmod};
|
||||
delete $pmod->{_nv};
|
||||
@@ -110,16 +109,14 @@ sub LoadModule {
|
||||
my ($modname, $args, $type, $user, $network) = @_;
|
||||
$modname =~ /^\w+$/ or return ($ZNC::Perl_LoadError, "Module names can only contain letters, numbers and underscores, [$modname] is invalid.");
|
||||
my $container;
|
||||
given ($type) {
|
||||
when ($ZNC::CModInfo::NetworkModule) {
|
||||
$container = $network;
|
||||
}
|
||||
when ($ZNC::CModInfo::UserModule) {
|
||||
$container = $user;
|
||||
}
|
||||
when ($ZNC::CModInfo::GlobalModule) {
|
||||
$container = ZNC::CZNC::Get();
|
||||
}
|
||||
if ($type == $ZNC::CModInfo::NetworkModule) {
|
||||
$container = $network;
|
||||
} elsif ($type == $ZNC::CModInfo::UserModule) {
|
||||
$container = $user;
|
||||
} elsif ($type == $ZNC::CModInfo::GlobalModule) {
|
||||
$container = ZNC::CZNC::Get();
|
||||
} else {
|
||||
die "LoadModule: unknown module type $type for $modname";
|
||||
}
|
||||
return ($ZNC::Perl_LoadError, "Uhm? No container for the module? Wtf?") unless $container;
|
||||
$container = $container->GetModules;
|
||||
@@ -405,6 +402,9 @@ sub OnPrivNotice {}
|
||||
sub OnChanNotice {}
|
||||
sub OnTopic {}
|
||||
sub OnServerCapAvailable {}
|
||||
sub OnServerCap302Available { my ($self, $cap, $value) = @_; $self->OnServerCapAvailable($cap) }
|
||||
sub OnClientAttached {}
|
||||
sub OnClientDetached {}
|
||||
sub OnServerCapResult {}
|
||||
sub OnTimerAutoJoin {}
|
||||
sub OnEmbeddedWebRequest {}
|
||||
@@ -666,28 +666,28 @@ sub CreateSocket {
|
||||
}
|
||||
|
||||
sub t_s {
|
||||
my $self = shift;
|
||||
my $module = ref $self;
|
||||
my $english = shift;
|
||||
my $context = shift//'';
|
||||
ZNC::CTranslation::Get->Singular("znc-$module", $context, $english);
|
||||
my $self = shift;
|
||||
my $module = ref $self;
|
||||
my $english = shift;
|
||||
my $context = shift//'';
|
||||
ZNC::CTranslation::Get->Singular("znc-$module", $context, $english);
|
||||
}
|
||||
|
||||
sub t_f {
|
||||
my $self = shift;
|
||||
my $fmt = $self->t_s(@_);
|
||||
return sub { sprintf $fmt, @_ }
|
||||
my $self = shift;
|
||||
my $fmt = $self->t_s(@_);
|
||||
return sub { sprintf $fmt, @_ }
|
||||
}
|
||||
|
||||
sub t_p {
|
||||
my $self = shift;
|
||||
my $module = ref $self;
|
||||
my $english = shift;
|
||||
my $englishes = shift;
|
||||
my $num = shift;
|
||||
my $context = shift//'';
|
||||
my $fmt = ZNC::CTranslation::Get->Plural("znc-$module", $context, $english, $englishes, $num);
|
||||
return sub { sprintf $fmt, @_ }
|
||||
my $self = shift;
|
||||
my $module = ref $self;
|
||||
my $english = shift;
|
||||
my $englishes = shift;
|
||||
my $num = shift;
|
||||
my $context = shift//'';
|
||||
my $fmt = ZNC::CTranslation::Get->Plural("znc-$module", $context, $english, $englishes, $num);
|
||||
return sub { sprintf $fmt, @_ }
|
||||
}
|
||||
|
||||
# TODO is t_d needed for perl? Maybe after AddCommand is implemented
|
||||
@@ -788,12 +788,10 @@ sub Listen {
|
||||
my %arg = @_;
|
||||
my $addrtype = $ZNC::ADDR_ALL;
|
||||
if (defined $arg{addrtype}) {
|
||||
given ($arg{addrtype}) {
|
||||
when (/^ipv4$/i) { $addrtype = $ZNC::ADDR_IPV4ONLY }
|
||||
when (/^ipv6$/i) { $addrtype = $ZNC::ADDR_IPV6ONLY }
|
||||
when (/^all$/i) { }
|
||||
default { die "Specified addrtype [$arg{addrtype}] isn't supported" }
|
||||
}
|
||||
if ($arg{addrtype} =~ /^ipv4$/i) { $addrtype = $ZNC::ADDR_IPV4ONLY }
|
||||
elsif ($arg{addrtype} =~ /^ipv6$/i) { $addrtype = $ZNC::ADDR_IPV6ONLY }
|
||||
elsif ($arg{addrtype} =~ /^all$/i) { }
|
||||
else { die "Specified addrtype [$arg{addrtype}] isn't supported" }
|
||||
}
|
||||
if (defined $arg{port}) {
|
||||
return $arg{port} if $self->GetModule->GetManager->ListenHost(
|
||||
|
||||
+51
-35
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -289,42 +289,17 @@ class CModPython : public CModule {
|
||||
return HALT;
|
||||
}
|
||||
|
||||
void TryAddModInfo(const CString& sPath, const CString& sName,
|
||||
void TryAddModInfo(const CString& sName,
|
||||
set<CModInfo>& ssMods, set<CString>& ssAlready,
|
||||
CModInfo::EModuleType eType) {
|
||||
if (ssAlready.count(sName)) {
|
||||
return;
|
||||
}
|
||||
PyObject* pyFunc =
|
||||
PyObject_GetAttrString(m_PyZNCModule, "get_mod_info_path");
|
||||
if (!pyFunc) {
|
||||
CString sRetMsg = GetPyExceptionStr();
|
||||
DEBUG("modpython tried to get info about ["
|
||||
<< sPath << "] (1) but: " << sRetMsg);
|
||||
return;
|
||||
}
|
||||
CModInfo ModInfo;
|
||||
PyObject* pyRes = PyObject_CallFunction(
|
||||
pyFunc, const_cast<char*>("ssN"), sPath.c_str(), sName.c_str(),
|
||||
SWIG_NewInstanceObj(&ModInfo, SWIG_TypeQuery("CModInfo*"), 0));
|
||||
if (!pyRes) {
|
||||
CString sRetMsg = GetPyExceptionStr();
|
||||
DEBUG("modpython tried to get info about ["
|
||||
<< sPath << "] (2) but: " << sRetMsg);
|
||||
Py_CLEAR(pyFunc);
|
||||
return;
|
||||
}
|
||||
Py_CLEAR(pyFunc);
|
||||
long int x = PyLong_AsLong(pyRes);
|
||||
if (PyErr_Occurred()) {
|
||||
CString sRetMsg = GetPyExceptionStr();
|
||||
DEBUG("modpython tried to get info about ["
|
||||
<< sPath << "] (3) but: " << sRetMsg);
|
||||
Py_CLEAR(pyRes);
|
||||
return;
|
||||
}
|
||||
Py_CLEAR(pyRes);
|
||||
if (x && ModInfo.SupportsType(eType)) {
|
||||
bool bSuccess = false;
|
||||
CString sRetMsg;
|
||||
OnGetModInfo(ModInfo, sName, bSuccess, sRetMsg);
|
||||
if (bSuccess && ModInfo.SupportsType(eType)) {
|
||||
ssMods.insert(ModInfo);
|
||||
ssAlready.insert(sName);
|
||||
}
|
||||
@@ -342,20 +317,18 @@ class CModPython : public CModule {
|
||||
for (unsigned int a = 0; a < Dir.size(); a++) {
|
||||
CFile& File = *Dir[a];
|
||||
CString sName = File.GetShortName();
|
||||
CString sPath = File.GetLongName();
|
||||
sPath.TrimSuffix(sName);
|
||||
|
||||
if (!File.IsDir()) {
|
||||
if (sName.WildCmp("*.pyc")) {
|
||||
sName.RightChomp(4);
|
||||
} else if (sName.WildCmp("*.py") || sName.WildCmp("*.so")) {
|
||||
} else if (sName.WildCmp("*.py")) {
|
||||
sName.RightChomp(3);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
TryAddModInfo(sPath, sName, ssMods, already, eType);
|
||||
TryAddModInfo(sName, ssMods, already, eType);
|
||||
}
|
||||
|
||||
dirs.pop();
|
||||
@@ -505,6 +478,49 @@ CPySocket::~CPySocket() {
|
||||
Py_CLEAR(m_pyObj);
|
||||
}
|
||||
|
||||
CPyCapability::CPyCapability(PyObject* serverCb, PyObject* clientCb)
|
||||
: m_serverCb(serverCb), m_clientCb(clientCb) {
|
||||
Py_INCREF(serverCb);
|
||||
Py_INCREF(clientCb);
|
||||
}
|
||||
|
||||
CPyCapability::~CPyCapability() {
|
||||
Py_CLEAR(m_serverCb);
|
||||
Py_CLEAR(m_clientCb);
|
||||
}
|
||||
|
||||
void CPyCapability::OnServerChangedSupport(CIRCNetwork* pNetwork, bool bState) {
|
||||
PyObject* pyArg_Network =
|
||||
SWIG_NewInstanceObj(pNetwork, SWIG_TypeQuery("CIRCNetwork*"), 0);
|
||||
PyObject* pyArg_bState = Py_BuildValue("l", (long int)bState);
|
||||
PyObject* pyRes = PyObject_CallFunctionObjArgs(m_serverCb, pyArg_Network,
|
||||
pyArg_bState, nullptr);
|
||||
if (!pyRes) {
|
||||
CString sPyErr = ((CPyModule*)GetModule())->GetPyExceptionStr();
|
||||
DEBUG("modpython: " << GetModule()->GetModName()
|
||||
<< "/OnServerChangedSupport failed: " << sPyErr);
|
||||
}
|
||||
Py_CLEAR(pyRes);
|
||||
Py_CLEAR(pyArg_bState);
|
||||
Py_CLEAR(pyArg_Network);
|
||||
}
|
||||
|
||||
void CPyCapability::OnClientChangedSupport(CClient* pClient, bool bState) {
|
||||
PyObject* pyArg_Client =
|
||||
SWIG_NewInstanceObj(pClient, SWIG_TypeQuery("CClient*"), 0);
|
||||
PyObject* pyArg_bState = Py_BuildValue("l", (long int)bState);
|
||||
PyObject* pyRes = PyObject_CallFunctionObjArgs(m_clientCb, pyArg_Client,
|
||||
pyArg_bState, nullptr);
|
||||
if (!pyRes) {
|
||||
CString sPyErr = ((CPyModule*)GetModule())->GetPyExceptionStr();
|
||||
DEBUG("modpython: " << GetModule()->GetModName()
|
||||
<< "/OnClientChangedSupport failed: " << sPyErr);
|
||||
}
|
||||
Py_CLEAR(pyRes);
|
||||
Py_CLEAR(pyArg_bState);
|
||||
Py_CLEAR(pyArg_Client);
|
||||
}
|
||||
|
||||
CPyModule* CPyModCommand::GetModule() {
|
||||
return this->m_pModule;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -75,7 +75,7 @@ target_include_directories(modpython_lib PRIVATE
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/.."
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/.."
|
||||
${Python3_INCLUDE_DIRS})
|
||||
target_link_libraries(modpython_lib ${znc_link} ${Python3_LDFLAGS})
|
||||
target_link_libraries(modpython_lib ZNC ${Python3_LDFLAGS})
|
||||
set_target_properties(modpython_lib PROPERTIES
|
||||
PREFIX "_"
|
||||
OUTPUT_NAME "znc_core"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,7 @@ open my $out, ">", $ARGV[1] or die;
|
||||
|
||||
print $out <<'EOF';
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -50,30 +50,7 @@ print $out <<'EOF';
|
||||
***************************************************************************/
|
||||
|
||||
namespace {
|
||||
/* template<class T>
|
||||
struct pyobj_to_ptr {
|
||||
CString m_sType;
|
||||
SvToPtr(const CString& sType) {
|
||||
m_sType = sType;
|
||||
}
|
||||
bool operator()(PyObject* py, T** result) {
|
||||
T* x = nullptr;
|
||||
int res = SWIG_ConvertPtr(sv, (void**)&x, SWIG_TypeQuery(m_sType.c_str()), 0);
|
||||
if (SWIG_IsOK(res)) {
|
||||
*result = x;
|
||||
return true;
|
||||
}
|
||||
DEBUG("modpython: ");
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
CModule::EModRet SvToEModRet(PyObject* py, CModule::EModRet* result) {
|
||||
long int x = PyLong_AsLong();
|
||||
return static_cast<CModule::EModRet>(SvUV(sv));
|
||||
}*/
|
||||
|
||||
inline swig_type_info* SWIG_pchar_descriptor(void) {
|
||||
inline swig_type_info* ZNC_SWIG_pchar_descriptor(void) {
|
||||
static int init = 0;
|
||||
static swig_type_info* info = 0;
|
||||
if (!init) {
|
||||
@@ -83,7 +60,71 @@ namespace {
|
||||
return info;
|
||||
}
|
||||
|
||||
inline int SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) {
|
||||
// SWIG 4.2.0 replaced SWIG_Python_str_AsChar with SWIG_PyUnicode_AsUTF8AndSize.
|
||||
// SWIG doesn't provide any good way to detect SWIG version (other than parsing
|
||||
// `swig -version`), but it also introduced SWIG_NULLPTR in 4.2.0.
|
||||
// So let's abuse that define to do different code for new SWIG.
|
||||
#ifdef SWIG_NULLPTR
|
||||
// This is copied/adapted from SWIG 4.2.0 from pystrings.swg
|
||||
inline int ZNC_SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) {
|
||||
#if PY_VERSION_HEX>=0x03000000
|
||||
#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
|
||||
if (PyBytes_Check(obj))
|
||||
#else
|
||||
if (PyUnicode_Check(obj))
|
||||
#endif
|
||||
#else
|
||||
if (PyString_Check(obj))
|
||||
#endif
|
||||
{
|
||||
char *cstr; Py_ssize_t len;
|
||||
PyObject *bytes = NULL;
|
||||
int ret = SWIG_OK;
|
||||
if (alloc)
|
||||
*alloc = SWIG_OLDOBJ;
|
||||
#if PY_VERSION_HEX>=0x03000000 && defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
|
||||
if (PyBytes_AsStringAndSize(obj, &cstr, &len) == -1)
|
||||
return SWIG_TypeError;
|
||||
#else
|
||||
cstr = (char *)SWIG_PyUnicode_AsUTF8AndSize(obj, &len, &bytes);
|
||||
if (!cstr)
|
||||
return SWIG_TypeError;
|
||||
/* The returned string is only duplicated if the char * returned is not owned and memory managed by obj */
|
||||
if (bytes && cptr) {
|
||||
if (alloc) {
|
||||
//cstr = %new_copy_array(cstr, len + 1, char);
|
||||
cstr = (char *)memcpy((char *)malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1));
|
||||
*alloc = SWIG_NEWOBJ;
|
||||
} else {
|
||||
/* alloc must be set in order to clean up allocated memory */
|
||||
return SWIG_RuntimeError;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (cptr) *cptr = cstr;
|
||||
if (psize) *psize = len + 1;
|
||||
Py_XDECREF(bytes);
|
||||
return ret;
|
||||
} else {
|
||||
swig_type_info* pchar_descriptor = ZNC_SWIG_pchar_descriptor();
|
||||
if (pchar_descriptor) {
|
||||
void* vptr = 0;
|
||||
if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
|
||||
if (cptr) *cptr = (char *) vptr;
|
||||
if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
|
||||
if (alloc) *alloc = SWIG_OLDOBJ;
|
||||
return SWIG_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
return SWIG_TypeError;
|
||||
}
|
||||
|
||||
#else
|
||||
// TODO: at some point drop support for SWIG<4.2.0 (drop this branch of ifdef)
|
||||
|
||||
// This is copied from some old SWIG version from pystrings.swg
|
||||
inline int ZNC_SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) {
|
||||
#if PY_VERSION_HEX>=0x03000000
|
||||
if (PyUnicode_Check(obj))
|
||||
#else
|
||||
@@ -142,7 +183,7 @@ namespace {
|
||||
#endif
|
||||
return SWIG_OK;
|
||||
} else {
|
||||
swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
|
||||
swig_type_info* pchar_descriptor = ZNC_SWIG_pchar_descriptor();
|
||||
if (pchar_descriptor) {
|
||||
void* vptr = 0;
|
||||
if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
|
||||
@@ -155,10 +196,11 @@ namespace {
|
||||
}
|
||||
return SWIG_TypeError;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline int SWIG_AsPtr_CString (PyObject * obj, CString **val) {
|
||||
inline int ZNC_SWIG_AsPtr_CString (PyObject * obj, CString **val) {
|
||||
char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ;
|
||||
if (SWIG_IsOK((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) {
|
||||
if (SWIG_IsOK((ZNC_SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) {
|
||||
if (buf) {
|
||||
if (val) *val = new CString(buf, size - 1);
|
||||
if (alloc == SWIG_NEWOBJ) delete[] buf;
|
||||
@@ -389,7 +431,7 @@ while (<$in>) {
|
||||
}
|
||||
when ('CString') {
|
||||
say $out "\t\tCString* p = nullptr;";
|
||||
say $out "\t\tint res = SWIG_AsPtr_CString(pyRes, &p);";
|
||||
say $out "\t\tint res = ZNC_SWIG_AsPtr_CString(pyRes, &p);";
|
||||
say $out "\t\tif (!SWIG_IsOK(res)) {";
|
||||
say $out "\t\t\tDEBUG(\"modpython: \" << (GetUser() ? GetUser()->GetUsername() : CString(\"<no user>\")) << \"/\" << GetModName() << \"/$name was expected to return '$type' but error=\" << res);";
|
||||
say $out "\t\t\tresult = $default;";
|
||||
|
||||
@@ -61,7 +61,10 @@ EModRet OnPrivNotice(CNick& Nick, CString& sMessage)
|
||||
EModRet OnChanNotice(CNick& Nick, CChan& Channel, CString& sMessage)
|
||||
EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic)
|
||||
bool OnServerCapAvailable(const CString& sCap)
|
||||
bool OnServerCap302Available(const CString& sCap, const CString& sValue)
|
||||
void OnServerCapResult(const CString& sCap, bool bSuccess)
|
||||
void OnClientAttached()
|
||||
void OnClientDetached()
|
||||
EModRet OnTimerAutoJoin(CChan& Channel)
|
||||
bool OnEmbeddedWebRequest(CWebSock& WebSock, const CString& sPageName, CTemplate& Tmpl)
|
||||
EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -241,6 +241,10 @@ class CPyRetBool {
|
||||
bool ExistsNV(const CString& sName) {
|
||||
return $self->EndNV() != $self->FindNV(sName);
|
||||
}
|
||||
void AddServerDependentCapability(const CString& sName, PyObject* serverCb,
|
||||
PyObject* clientCb) {
|
||||
$self->AddServerDependentCapability(sName, std::make_unique<CPyCapability>(serverCb, clientCb));
|
||||
}
|
||||
}
|
||||
|
||||
%extend CModules {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -136,7 +136,10 @@ class ZNC_EXPORT_LIB_EXPORT CPyModule : public CModule {
|
||||
CString& sMessage) override;
|
||||
EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) override;
|
||||
bool OnServerCapAvailable(const CString& sCap) override;
|
||||
bool OnServerCap302Available(const CString& sCap, const CString& sValue) override;
|
||||
void OnServerCapResult(const CString& sCap, bool bSuccess) override;
|
||||
void OnClientAttached() override;
|
||||
void OnClientDetached() override;
|
||||
EModRet OnTimerAutoJoin(CChan& Channel) override;
|
||||
bool OnEmbeddedWebRequest(CWebSock&, const CString&, CTemplate&) override;
|
||||
EModRet OnAddNetwork(CIRCNetwork& Network, CString& sErrorRet) override;
|
||||
@@ -374,3 +377,17 @@ inline CPyModCommand* CreatePyModCommand(CPyModule* pModule,
|
||||
PyObject* pyObj) {
|
||||
return new CPyModCommand(pModule, sCmd, sArgs, sDesc, pyObj);
|
||||
}
|
||||
|
||||
class ZNC_EXPORT_LIB_EXPORT CPyCapability : public CCapability {
|
||||
public:
|
||||
CPyCapability(PyObject* serverCb, PyObject* clientCb);
|
||||
~CPyCapability();
|
||||
|
||||
void OnServerChangedSupport(CIRCNetwork* pNetwork, bool bState) override;
|
||||
void OnClientChangedSupport(CClient* pClient, bool bState) override;
|
||||
|
||||
private:
|
||||
PyObject* m_serverCb;
|
||||
PyObject* m_clientCb;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+10
-28
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -410,6 +410,15 @@ class Module:
|
||||
def OnServerCapAvailable(self, sCap):
|
||||
pass
|
||||
|
||||
def OnServerCap302Available(self, sCap, sValue):
|
||||
return self.OnServerCapAvailable(sCap)
|
||||
|
||||
def OnClientAttached(self):
|
||||
pass
|
||||
|
||||
def OnClientDetached(self):
|
||||
pass
|
||||
|
||||
def OnServerCapResult(self, sCap, bSuccess):
|
||||
pass
|
||||
|
||||
@@ -949,33 +958,6 @@ def get_mod_info(modname, retmsg, modinfo):
|
||||
return 2
|
||||
|
||||
|
||||
def get_mod_info_path(path, modname, modinfo):
|
||||
try:
|
||||
x = imp.find_module(modname, [path])
|
||||
except ImportError:
|
||||
return 0
|
||||
# x == (<open file './modules/admin.so', mode 'rb' at 0x7fa2dc748d20>,
|
||||
# './modules/admin.so', ('.so', 'rb', 3))
|
||||
# x == (<open file './modules/pythontest.py', mode 'U' at 0x7fa2dc748d20>,
|
||||
# './modules/pythontest.py', ('.py', 'U', 1))
|
||||
if x[0] is None and x[2][2] != imp.PKG_DIRECTORY:
|
||||
return 0
|
||||
try:
|
||||
pymodule = imp.load_module(modname, *x)
|
||||
except ImportError:
|
||||
return 0
|
||||
finally:
|
||||
if x[0]:
|
||||
x[0].close()
|
||||
if modname not in pymodule.__dict__:
|
||||
return 0
|
||||
cl = pymodule.__dict__[modname]
|
||||
modinfo.SetName(modname)
|
||||
modinfo.SetPath(pymodule.__file__)
|
||||
gather_mod_info(cl, modinfo)
|
||||
return 1
|
||||
|
||||
|
||||
CONTINUE = CModule.CONTINUE
|
||||
HALT = CModule.HALT
|
||||
HALTMODS = CModule.HALTMODS
|
||||
|
||||
+7
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -248,8 +248,9 @@ class CModTcl : public CModule {
|
||||
// chan specific
|
||||
unsigned int nLength = vChans.size();
|
||||
for (unsigned int n = 0; n < nLength; n++) {
|
||||
CString sChannel = TclEscape(CString(vChans[n]->GetName()));
|
||||
sCommand = "Binds::ProcessNick {" + sOldNick + "} {" + sHost +
|
||||
"} - {" + vChans[n]->GetName() + "} {" + sNewNickTmp +
|
||||
"} - {" + sChannel + "} {" + sNewNickTmp +
|
||||
"}";
|
||||
int i = Tcl_Eval(interp, sCommand.c_str());
|
||||
if (i != TCL_OK) {
|
||||
@@ -260,14 +261,16 @@ class CModTcl : public CModule {
|
||||
|
||||
void OnKick(const CNick& OpNick, const CString& sKickedNick, CChan& Channel,
|
||||
const CString& sMessage) override {
|
||||
CString sMes = TclEscape(sMessage);
|
||||
CString sOpNick = TclEscape(CString(OpNick.GetNick()));
|
||||
CString sNick = TclEscape(sKickedNick);
|
||||
CString sOpHost =
|
||||
TclEscape(CString(OpNick.GetIdent() + "@" + OpNick.GetHost()));
|
||||
CString sChannel = TclEscape(Channel.GetName());
|
||||
|
||||
CString sCommand = "Binds::ProcessKick {" + sOpNick + "} {" + sOpHost +
|
||||
"} - {" + Channel.GetName() + "} {" + sNick + "} {" +
|
||||
sMessage + "}";
|
||||
"} - {" + sChannel + "} {" + sNick + "} {" +
|
||||
sMes + "}";
|
||||
int i = Tcl_Eval(interp, sCommand.c_str());
|
||||
if (i != TCL_OK) {
|
||||
PutModule(Tcl_GetStringResult(interp));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
* Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2004-2023 ZNC, see the NOTICE file for details.
|
||||
# Copyright (C) 2004-2025 ZNC, see the NOTICE file for details.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/admindebug.pot\n"
|
||||
"X-Crowdin-File-ID: 273\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: admindebug.cpp:30
|
||||
msgid "Enable Debug Mode"
|
||||
msgstr "Hata Ayıklama Modunu Etkinleştirme"
|
||||
|
||||
#: admindebug.cpp:32
|
||||
msgid "Disable Debug Mode"
|
||||
msgstr "Hata Ayıklama Modunu Devre Dışı Bırakma"
|
||||
|
||||
#: admindebug.cpp:34
|
||||
msgid "Show the Debug Mode status"
|
||||
msgstr "Hata Ayıklama Modu durumunu göster"
|
||||
|
||||
#: admindebug.cpp:40 admindebug.cpp:49
|
||||
msgid "Access denied!"
|
||||
msgstr "Erişim reddedildi!"
|
||||
|
||||
#: admindebug.cpp:58
|
||||
msgid ""
|
||||
"Failure. We need to be running with a TTY. (is ZNC running with --"
|
||||
"foreground?)"
|
||||
msgstr ""
|
||||
"Arıza. Bir TTY ile çalışmamız gerekiyor. (ZNC --foreground ile mi çalışıyor?)"
|
||||
|
||||
#: admindebug.cpp:66
|
||||
msgid "Already enabled."
|
||||
msgstr "Zaten etkin."
|
||||
|
||||
#: admindebug.cpp:68
|
||||
msgid "Already disabled."
|
||||
msgstr "Zaten devre dışı."
|
||||
|
||||
#: admindebug.cpp:92
|
||||
msgid "Debugging mode is on."
|
||||
msgstr "Hata ayıklama modu açık."
|
||||
|
||||
#: admindebug.cpp:94
|
||||
msgid "Debugging mode is off."
|
||||
msgstr "Hata ayıklama modu kapalı."
|
||||
|
||||
#: admindebug.cpp:96
|
||||
msgid "Logging to: stdout."
|
||||
msgstr "Oturum açılıyor: stdout."
|
||||
|
||||
#: admindebug.cpp:105
|
||||
msgid "Enable Debug mode dynamically."
|
||||
msgstr "Hata Ayıklama modunu dinamik olarak etkinleştirin."
|
||||
@@ -0,0 +1,69 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/adminlog.pot\n"
|
||||
"X-Crowdin-File-ID: 149\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: adminlog.cpp:29
|
||||
msgid "Show the logging target"
|
||||
msgstr "Günlük hedefini göster"
|
||||
|
||||
#: adminlog.cpp:31
|
||||
msgid "<file|syslog|both> [path]"
|
||||
msgstr "<file|syslog|both> [yol]"
|
||||
|
||||
#: adminlog.cpp:32
|
||||
msgid "Set the logging target"
|
||||
msgstr "Günlük hedefini ayarlayın"
|
||||
|
||||
#: adminlog.cpp:142
|
||||
msgid "Access denied"
|
||||
msgstr "Erişim reddedildi"
|
||||
|
||||
#: adminlog.cpp:156
|
||||
msgid "Now logging to file"
|
||||
msgstr "Şimdi dosyaya giriş yapılıyor"
|
||||
|
||||
#: adminlog.cpp:160
|
||||
msgid "Now only logging to syslog"
|
||||
msgstr "Artık yalnızca sistem günlüğüne giriş yapılıyor"
|
||||
|
||||
#: adminlog.cpp:164
|
||||
msgid "Now logging to syslog and file"
|
||||
msgstr "Şimdi sistem günlüğüne ve dosyaya giriş yapılıyor"
|
||||
|
||||
#: adminlog.cpp:168
|
||||
msgid "Usage: Target <file|syslog|both> [path]"
|
||||
msgstr "Kullanımı: Target <file|syslog|both> [yol]"
|
||||
|
||||
#: adminlog.cpp:170
|
||||
msgid "Unknown target"
|
||||
msgstr "Bilinmeyen hedef"
|
||||
|
||||
#: adminlog.cpp:192
|
||||
msgid "Logging is enabled for file"
|
||||
msgstr "Dosya için günlük kaydı etkinleştirildi"
|
||||
|
||||
#: adminlog.cpp:195
|
||||
msgid "Logging is enabled for syslog"
|
||||
msgstr "Sistem günlüğü için günlük kaydı etkinleştirildi"
|
||||
|
||||
#: adminlog.cpp:198
|
||||
msgid "Logging is enabled for both, file and syslog"
|
||||
msgstr "Günlük kaydı hem dosya hem de sistem günlüğü için etkinleştirildi"
|
||||
|
||||
#: adminlog.cpp:204
|
||||
msgid "Log file will be written to {1}"
|
||||
msgstr "Günlük dosyası {1}'e yazılacak"
|
||||
|
||||
#: adminlog.cpp:222
|
||||
msgid "Log ZNC events to file and/or syslog."
|
||||
msgstr "ZNC olaylarını dosyaya ve/veya sistem günlüğüne kaydedin."
|
||||
@@ -0,0 +1,123 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/alias.pot\n"
|
||||
"X-Crowdin-File-ID: 150\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: alias.cpp:141
|
||||
msgid "missing required parameter: {1}"
|
||||
msgstr "gerekli parametre eksik: {1}"
|
||||
|
||||
#: alias.cpp:201
|
||||
msgid "Created alias: {1}"
|
||||
msgstr "Takma ad oluşturuldu: {1}"
|
||||
|
||||
#: alias.cpp:203
|
||||
msgid "Alias already exists."
|
||||
msgstr "Takma ad zaten mevcut."
|
||||
|
||||
#: alias.cpp:210
|
||||
msgid "Deleted alias: {1}"
|
||||
msgstr "Silinen takma ad: {1}"
|
||||
|
||||
#: alias.cpp:213 alias.cpp:224 alias.cpp:246 alias.cpp:265 alias.cpp:276
|
||||
#: alias.cpp:333
|
||||
msgid "Alias does not exist."
|
||||
msgstr "Takma ad mevcut değil."
|
||||
|
||||
#: alias.cpp:222 alias.cpp:244 alias.cpp:263 alias.cpp:274
|
||||
msgid "Modified alias."
|
||||
msgstr "Değiştirilmiş takma ad."
|
||||
|
||||
#: alias.cpp:236 alias.cpp:256
|
||||
msgid "Invalid index."
|
||||
msgstr "Geçersiz dizin."
|
||||
|
||||
#: alias.cpp:282 alias.cpp:298
|
||||
msgid "There are no aliases."
|
||||
msgstr "Takma ad yok."
|
||||
|
||||
#: alias.cpp:289
|
||||
msgid "The following aliases exist: {1}"
|
||||
msgstr "Aşağıdaki takma adlar mevcuttur: {1}"
|
||||
|
||||
#: alias.cpp:290
|
||||
msgctxt "list|separator"
|
||||
msgid ", "
|
||||
msgstr ", "
|
||||
|
||||
#: alias.cpp:324
|
||||
msgid "Actions for alias {1}:"
|
||||
msgstr "{1} takma adına ilişkin işlemler:"
|
||||
|
||||
#: alias.cpp:331
|
||||
msgid "End of actions for alias {1}."
|
||||
msgstr "{1} takma adına ilişkin işlemlerin sonu."
|
||||
|
||||
#: alias.cpp:338 alias.cpp:341 alias.cpp:352 alias.cpp:357
|
||||
msgid "<name>"
|
||||
msgstr "<adı>"
|
||||
|
||||
#: alias.cpp:339
|
||||
msgid "Creates a new, blank alias called name."
|
||||
msgstr "Ad adı verilen yeni, boş bir takma ad oluşturur."
|
||||
|
||||
#: alias.cpp:341
|
||||
msgid "Deletes an existing alias."
|
||||
msgstr "Mevcut bir takma adı siler."
|
||||
|
||||
#: alias.cpp:343
|
||||
msgid "<name> <action ...>"
|
||||
msgstr "<adı> <işlem ...>"
|
||||
|
||||
#: alias.cpp:344
|
||||
msgid "Adds a line to an existing alias."
|
||||
msgstr "Mevcut bir takma ada bir satır ekler."
|
||||
|
||||
#: alias.cpp:346
|
||||
msgid "<name> <pos> <action ...>"
|
||||
msgstr "<adı> <pozisyon> <işlem ...>"
|
||||
|
||||
#: alias.cpp:347
|
||||
msgid "Inserts a line into an existing alias."
|
||||
msgstr "Mevcut bir takma ada bir satır ekler."
|
||||
|
||||
#: alias.cpp:349
|
||||
msgid "<name> <pos>"
|
||||
msgstr "<adı> <pozisyon>"
|
||||
|
||||
#: alias.cpp:350
|
||||
msgid "Removes a line from an existing alias."
|
||||
msgstr "Mevcut bir takma addan bir satırı kaldırır."
|
||||
|
||||
#: alias.cpp:353
|
||||
msgid "Removes all lines from an existing alias."
|
||||
msgstr "Mevcut bir takma addan tüm satırları kaldırır."
|
||||
|
||||
#: alias.cpp:355
|
||||
msgid "Lists all aliases by name."
|
||||
msgstr "Tüm takma adları ada göre listeler."
|
||||
|
||||
#: alias.cpp:358
|
||||
msgid "Reports the actions performed by an alias."
|
||||
msgstr "Bir takma ad tarafından gerçekleştirilen eylemleri raporlar."
|
||||
|
||||
#: alias.cpp:362
|
||||
msgid "Generate a list of commands to copy your alias config."
|
||||
msgstr "Takma ad yapılandırmanızı kopyalamak için bir komut listesi oluşturun."
|
||||
|
||||
#: alias.cpp:374
|
||||
msgid "Clearing all of them!"
|
||||
msgstr "Hepsini temizleniyor!"
|
||||
|
||||
#: alias.cpp:409
|
||||
msgid "Provides bouncer-side command alias support."
|
||||
msgstr "Koruma tarafı komut takma adı desteği sağlar."
|
||||
@@ -0,0 +1,86 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/autoattach.pot\n"
|
||||
"X-Crowdin-File-ID: 151\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: autoattach.cpp:94
|
||||
msgid "Added to list"
|
||||
msgstr "Listeye eklendi"
|
||||
|
||||
#: autoattach.cpp:96
|
||||
msgid "{1} is already added"
|
||||
msgstr "{1} zaten eklendi"
|
||||
|
||||
#: autoattach.cpp:100
|
||||
msgid "Usage: Add [!]<#chan> <search> <host>"
|
||||
msgstr "Kullanımı: Add [!]<#kanal> <arama> <host>"
|
||||
|
||||
#: autoattach.cpp:101
|
||||
msgid "Wildcards are allowed"
|
||||
msgstr "Joker karakterlere izin verilir"
|
||||
|
||||
#: autoattach.cpp:113
|
||||
msgid "Removed {1} from list"
|
||||
msgstr "{1} listeden kaldırıldı"
|
||||
|
||||
#: autoattach.cpp:115
|
||||
msgid "Usage: Del [!]<#chan> <search> <host>"
|
||||
msgstr "Kullanımı: Del [!]<#kanal> <arama> <host>"
|
||||
|
||||
#: autoattach.cpp:121 autoattach.cpp:129
|
||||
msgid "Neg"
|
||||
msgstr "Ret"
|
||||
|
||||
#: autoattach.cpp:122 autoattach.cpp:130
|
||||
msgid "Chan"
|
||||
msgstr "Kanal"
|
||||
|
||||
#: autoattach.cpp:123 autoattach.cpp:131
|
||||
msgid "Search"
|
||||
msgstr "Arama"
|
||||
|
||||
#: autoattach.cpp:124 autoattach.cpp:132
|
||||
msgid "Host"
|
||||
msgstr "Host"
|
||||
|
||||
#: autoattach.cpp:138
|
||||
msgid "You have no entries."
|
||||
msgstr "Hiçbir girdiniz yok."
|
||||
|
||||
#: autoattach.cpp:146 autoattach.cpp:149
|
||||
msgid "[!]<#chan> <search> <host>"
|
||||
msgstr "[!]<#kanal> <arama> <host>"
|
||||
|
||||
#: autoattach.cpp:147
|
||||
msgid "Add an entry, use !#chan to negate and * for wildcards"
|
||||
msgstr ""
|
||||
"Bir giriş ekleyin, reddetmek için !#chan ve joker karakterler için * kullanın"
|
||||
|
||||
#: autoattach.cpp:150
|
||||
msgid "Remove an entry, needs to be an exact match"
|
||||
msgstr "Bir girişi kaldırın; tam eşleşme olması gerekiyor"
|
||||
|
||||
#: autoattach.cpp:152
|
||||
msgid "List all entries"
|
||||
msgstr "Tüm girişleri listele"
|
||||
|
||||
#: autoattach.cpp:171
|
||||
msgid "Unable to add [{1}]"
|
||||
msgstr "[{1}] eklenemiyor"
|
||||
|
||||
#: autoattach.cpp:283
|
||||
msgid "List of channel masks and channel masks with ! before them."
|
||||
msgstr "Kanal maskeleri ve kanal maskelerinin listesi ! onlardan önce."
|
||||
|
||||
#: autoattach.cpp:286
|
||||
msgid "Reattaches you to channels on activity."
|
||||
msgstr "Sizi etkinlikteki kanallara yeniden bağlar."
|
||||
@@ -54,7 +54,7 @@ msgstr "Sintaxe: Del [!]<#canal>"
|
||||
|
||||
#: autocycle.cpp:85 autocycle.cpp:90 autocycle.cpp:95
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
msgstr "Canal"
|
||||
|
||||
#: autocycle.cpp:101
|
||||
msgid "You have no entries."
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/autocycle.pot\n"
|
||||
"X-Crowdin-File-ID: 207\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: autocycle.cpp:27 autocycle.cpp:30
|
||||
msgid "[!]<#chan>"
|
||||
msgstr "[!]<#kanal>"
|
||||
|
||||
#: autocycle.cpp:28
|
||||
msgid "Add an entry, use !#chan to negate and * for wildcards"
|
||||
msgstr ""
|
||||
"Bir giriş ekleyin, reddetmek için !#kanal ve joker karakterler için * "
|
||||
"kullanın"
|
||||
|
||||
#: autocycle.cpp:31
|
||||
msgid "Remove an entry, needs to be an exact match"
|
||||
msgstr "Bir girişi kaldırın; tam eşleşme olması gerekiyor"
|
||||
|
||||
#: autocycle.cpp:33
|
||||
msgid "List all entries"
|
||||
msgstr "Tüm girişleri listele"
|
||||
|
||||
#: autocycle.cpp:46
|
||||
msgid "Unable to add {1}"
|
||||
msgstr "{1} eklenemiyor"
|
||||
|
||||
#: autocycle.cpp:66
|
||||
msgid "{1} is already added"
|
||||
msgstr "{1} zaten eklendi"
|
||||
|
||||
#: autocycle.cpp:68
|
||||
msgid "Added {1} to list"
|
||||
msgstr "{1} listeye eklendi"
|
||||
|
||||
#: autocycle.cpp:70
|
||||
msgid "Usage: Add [!]<#chan>"
|
||||
msgstr "Kullanımı: Add [!]<#kanal>"
|
||||
|
||||
#: autocycle.cpp:78
|
||||
msgid "Removed {1} from list"
|
||||
msgstr "{1} listeden kaldırıldı"
|
||||
|
||||
#: autocycle.cpp:80
|
||||
msgid "Usage: Del [!]<#chan>"
|
||||
msgstr "Kullanımı: Del [!]<#kanal>"
|
||||
|
||||
#: autocycle.cpp:85 autocycle.cpp:90 autocycle.cpp:95
|
||||
msgid "Channel"
|
||||
msgstr "Kanal"
|
||||
|
||||
#: autocycle.cpp:101
|
||||
msgid "You have no entries."
|
||||
msgstr "Hiçbir girdiniz yok."
|
||||
|
||||
#: autocycle.cpp:230
|
||||
msgid "List of channel masks and channel masks with ! before them."
|
||||
msgstr "Kanal maskeleri ve kanal maskelerinin listesi ! ile onlardan önce."
|
||||
|
||||
#: autocycle.cpp:235
|
||||
msgid "Rejoins channels to gain Op if you're the only user left"
|
||||
msgstr ""
|
||||
"Geriye kalan tek kullanıcı sizseniz Op kazanmak için kanallara yeniden "
|
||||
"katılır"
|
||||
@@ -0,0 +1,179 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/autoop.pot\n"
|
||||
"X-Crowdin-File-ID: 153\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: autoop.cpp:155
|
||||
msgid "List all users"
|
||||
msgstr "Tüm kullanıcıları listele"
|
||||
|
||||
#: autoop.cpp:157 autoop.cpp:160
|
||||
msgid "<user> <channel> [channel] ..."
|
||||
msgstr "<kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autoop.cpp:158
|
||||
msgid "Adds channels to a user"
|
||||
msgstr "Bir kullanıcıya kanal ekler"
|
||||
|
||||
#: autoop.cpp:161
|
||||
msgid "Removes channels from a user"
|
||||
msgstr "Kullanıcıdan kanalları kaldırma"
|
||||
|
||||
#: autoop.cpp:163 autoop.cpp:166
|
||||
msgid "<user> <mask>,[mask] ..."
|
||||
msgstr "<kullanıcı> <maske>[maske] ..."
|
||||
|
||||
#: autoop.cpp:164
|
||||
msgid "Adds masks to a user"
|
||||
msgstr "Kullanıcıdan kanalları kaldırma"
|
||||
|
||||
#: autoop.cpp:167
|
||||
msgid "Removes masks from a user"
|
||||
msgstr "Kullanıcının maskelerini kaldırır"
|
||||
|
||||
#: autoop.cpp:170
|
||||
msgid "<user> <hostmask>[,<hostmasks>...] <key> [channels]"
|
||||
msgstr "<kullanıcı> <host_maskesi>[,<host_maskeleri>...] <anahtar> [kanallar]"
|
||||
|
||||
#: autoop.cpp:171
|
||||
msgid "Adds a user"
|
||||
msgstr "Bir kullanıcı ekler"
|
||||
|
||||
#: autoop.cpp:173
|
||||
msgid "<user>"
|
||||
msgstr "<kullanıcı>"
|
||||
|
||||
#: autoop.cpp:173
|
||||
msgid "Removes a user"
|
||||
msgstr "Bir kullanıcıyı kaldırır"
|
||||
|
||||
#: autoop.cpp:276
|
||||
msgid "Usage: AddUser <user> <hostmask>[,<hostmasks>...] <key> [channels]"
|
||||
msgstr ""
|
||||
"Kullanımı: AddUser <kullanıcı> <host_maskesi>[,<host_maskeleri>...] "
|
||||
"<anahtar> [kanallar]"
|
||||
|
||||
#: autoop.cpp:292
|
||||
msgid "Usage: DelUser <user>"
|
||||
msgstr "Kullanımı: DelUser <kullanıcı>"
|
||||
|
||||
#: autoop.cpp:301
|
||||
msgid "There are no users defined"
|
||||
msgstr "Tanımlanmış kullanıcı yok"
|
||||
|
||||
#: autoop.cpp:307 autoop.cpp:318 autoop.cpp:322 autoop.cpp:324
|
||||
msgid "User"
|
||||
msgstr "Kullanıcı"
|
||||
|
||||
#: autoop.cpp:308 autoop.cpp:326
|
||||
msgid "Hostmasks"
|
||||
msgstr "Host Maskeleri"
|
||||
|
||||
#: autoop.cpp:309 autoop.cpp:319
|
||||
msgid "Key"
|
||||
msgstr "Anahtar"
|
||||
|
||||
#: autoop.cpp:310 autoop.cpp:320
|
||||
msgid "Channels"
|
||||
msgstr "Kanallar"
|
||||
|
||||
#: autoop.cpp:338
|
||||
msgid "Usage: AddChans <user> <channel> [channel] ..."
|
||||
msgstr "Kullanımı: AddChans <kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autoop.cpp:345 autoop.cpp:366 autoop.cpp:388 autoop.cpp:409 autoop.cpp:473
|
||||
msgid "No such user"
|
||||
msgstr "Böyle bir kullanıcı yok"
|
||||
|
||||
#: autoop.cpp:350
|
||||
msgid "Channel(s) added to user {1}"
|
||||
msgstr "Kanal(lar) {1} kullanıcısına eklendi"
|
||||
|
||||
#: autoop.cpp:359
|
||||
msgid "Usage: DelChans <user> <channel> [channel] ..."
|
||||
msgstr "Kullanımı: DelChans <kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autoop.cpp:372
|
||||
msgid "Channel(s) Removed from user {1}"
|
||||
msgstr "Kanal(lar) {1} kullanıcısından silindi"
|
||||
|
||||
#: autoop.cpp:381
|
||||
msgid "Usage: AddMasks <user> <mask>,[mask] ..."
|
||||
msgstr "Kullanımı: AddMasks <kullanıcı> <maske>,[maske] ..."
|
||||
|
||||
#: autoop.cpp:393
|
||||
msgid "Hostmasks(s) added to user {1}"
|
||||
msgstr "Host maske(ler) {1} kullanıcısına eklendi"
|
||||
|
||||
#: autoop.cpp:402
|
||||
msgid "Usage: DelMasks <user> <mask>,[mask] ..."
|
||||
msgstr "Kullanımı: DelMasks <kullanıcı> <maske>,[maske] ..."
|
||||
|
||||
#: autoop.cpp:414
|
||||
msgid "Removed user {1} with key {2} and channels {3}"
|
||||
msgstr "{2} anahtarı ve {3} kanal(lar)ı olan {1} kullanıcısı kaldırıldı"
|
||||
|
||||
#: autoop.cpp:420
|
||||
msgid "Hostmasks(s) Removed from user {1}"
|
||||
msgstr "Host maske(ler) {1} kullanıcısından kaldırıldı"
|
||||
|
||||
#: autoop.cpp:479
|
||||
msgid "User {1} removed"
|
||||
msgstr "{1} kullanıcısı kaldırıldı"
|
||||
|
||||
#: autoop.cpp:485
|
||||
msgid "That user already exists"
|
||||
msgstr "Bu kullanıcı zaten mevcut"
|
||||
|
||||
#: autoop.cpp:491
|
||||
msgid "User {1} added with hostmask(s) {2}"
|
||||
msgstr "{1} kullanıcısı {2} host maskeleriyle eklendi"
|
||||
|
||||
#: autoop.cpp:533
|
||||
msgid ""
|
||||
"[{1}] sent us a challenge but they are not opped in any defined channels."
|
||||
msgstr ""
|
||||
"[{1}] bize bir challenge gönderiyor ancak tanımlanmış hiçbir kanalda op "
|
||||
"değiller."
|
||||
|
||||
#: autoop.cpp:537
|
||||
msgid "[{1}] sent us a challenge but they do not match a defined user."
|
||||
msgstr ""
|
||||
"[{1}] bize bir challenge gönderiyor ancak tanımlı bir kullanıcıyla "
|
||||
"eşleşmiyor."
|
||||
|
||||
#: autoop.cpp:545
|
||||
msgid "WARNING! [{1}] sent an invalid challenge."
|
||||
msgstr "UYARI! [{1}] geçersiz bir meydan okuma gönderiyor."
|
||||
|
||||
#: autoop.cpp:561
|
||||
msgid "[{1}] sent an unchallenged response. This could be due to lag."
|
||||
msgstr ""
|
||||
"[{1}] bize unchallenge bir yanıt gönderdi. Bunun nedeni gecikme olabilir."
|
||||
|
||||
#: autoop.cpp:578
|
||||
msgid ""
|
||||
"WARNING! [{1}] sent a bad response. Please verify that you have their "
|
||||
"correct password."
|
||||
msgstr ""
|
||||
"UYARI! [{1}] kötü bir yanıt gönderiyor. Lütfen doğru şifreye sahip "
|
||||
"olduğunuzu doğrulayın."
|
||||
|
||||
#: autoop.cpp:587
|
||||
msgid "WARNING! [{1}] sent a response but did not match any defined users."
|
||||
msgstr ""
|
||||
"UYARI! [{1}] bir yanıt gönderdi ancak tanımlanmış hiçbir kullanıcıyla "
|
||||
"eşleşmedi."
|
||||
|
||||
#: autoop.cpp:645
|
||||
msgid "Auto op the good people"
|
||||
msgstr "İyi insanları otomatik olarak op yapar"
|
||||
@@ -14,7 +14,7 @@ msgstr ""
|
||||
|
||||
#: autoreply.cpp:25
|
||||
msgid "<reply>"
|
||||
msgstr ""
|
||||
msgstr "<reply>"
|
||||
|
||||
#: autoreply.cpp:25
|
||||
msgid "Sets a new reply"
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/autoreply.pot\n"
|
||||
"X-Crowdin-File-ID: 154\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: autoreply.cpp:25
|
||||
msgid "<reply>"
|
||||
msgstr "<yanıt>"
|
||||
|
||||
#: autoreply.cpp:25
|
||||
msgid "Sets a new reply"
|
||||
msgstr "Yeni bir yanıt ayarlar"
|
||||
|
||||
#: autoreply.cpp:27
|
||||
msgid "Displays the current query reply"
|
||||
msgstr "Geçerli sorgu yanıtını görüntüler"
|
||||
|
||||
#: autoreply.cpp:75
|
||||
msgid "Current reply is: {1} ({2})"
|
||||
msgstr "Geçerli yanıt: {1} ({2})"
|
||||
|
||||
#: autoreply.cpp:81
|
||||
msgid "New reply set to: {1} ({2})"
|
||||
msgstr "Yeni yanıt şu şekilde ayarlandı: {1} ({2})"
|
||||
|
||||
#: autoreply.cpp:94
|
||||
msgid ""
|
||||
"You might specify a reply text. It is used when automatically answering "
|
||||
"queries, if you are not connected to ZNC."
|
||||
msgstr ""
|
||||
"Bir yanıt metni belirtebilirsiniz. ZNC'ye bağlı değilseniz, sorguları "
|
||||
"otomatik olarak yanıtlarken kullanılır."
|
||||
|
||||
#: autoreply.cpp:98
|
||||
msgid "Reply to queries when you are away"
|
||||
msgstr "Meşgul olduğunuzda sorguları yanıtlayın"
|
||||
@@ -0,0 +1,114 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/autovoice.pot\n"
|
||||
"X-Crowdin-File-ID: 155\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: autovoice.cpp:120
|
||||
msgid "List all users"
|
||||
msgstr "Tüm kullanıcıları listele"
|
||||
|
||||
#: autovoice.cpp:122 autovoice.cpp:125
|
||||
msgid "<user> <channel> [channel] ..."
|
||||
msgstr "<kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autovoice.cpp:123
|
||||
msgid "Adds channels to a user"
|
||||
msgstr "Bir kullanıcıya kanal ekler"
|
||||
|
||||
#: autovoice.cpp:126
|
||||
msgid "Removes channels from a user"
|
||||
msgstr "Bir kullanıcıdan kanalları kaldırır"
|
||||
|
||||
#: autovoice.cpp:128
|
||||
msgid "<user> <hostmask> [channels]"
|
||||
msgstr "<kullanıcı> <host_maskesi> [kanallar]"
|
||||
|
||||
#: autovoice.cpp:129
|
||||
msgid "Adds a user"
|
||||
msgstr "Bir kullanıcı ekler"
|
||||
|
||||
#: autovoice.cpp:131
|
||||
msgid "<user>"
|
||||
msgstr "<kullanıcı>"
|
||||
|
||||
#: autovoice.cpp:131
|
||||
msgid "Removes a user"
|
||||
msgstr "Bir kullanıcıyı kaldırır"
|
||||
|
||||
#: autovoice.cpp:215
|
||||
msgid "Usage: AddUser <user> <hostmask> [channels]"
|
||||
msgstr "Kullanımı: AddUser <kullanıcı> <host_maskesi> [kanallar]"
|
||||
|
||||
#: autovoice.cpp:229
|
||||
msgid "Usage: DelUser <user>"
|
||||
msgstr "Kullanımı: DelUser <kullanıcı>"
|
||||
|
||||
#: autovoice.cpp:238
|
||||
msgid "There are no users defined"
|
||||
msgstr "Tanımlanmış kullanıcı yok"
|
||||
|
||||
#: autovoice.cpp:244 autovoice.cpp:250
|
||||
msgid "User"
|
||||
msgstr "Kullanıcı"
|
||||
|
||||
#: autovoice.cpp:245 autovoice.cpp:251
|
||||
msgid "Hostmask"
|
||||
msgstr "Host Maskesi"
|
||||
|
||||
#: autovoice.cpp:246 autovoice.cpp:252
|
||||
msgid "Channels"
|
||||
msgstr "Kanallar"
|
||||
|
||||
#: autovoice.cpp:263
|
||||
msgid "Usage: AddChans <user> <channel> [channel] ..."
|
||||
msgstr "Kullanımı: AddChans <kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autovoice.cpp:270 autovoice.cpp:292 autovoice.cpp:329
|
||||
msgid "No such user"
|
||||
msgstr "Böyle bir kullanıcı yok"
|
||||
|
||||
#: autovoice.cpp:275
|
||||
msgid "Channel(s) added to user {1}"
|
||||
msgstr "Kanal(lar) {1} kullanıcısına eklendi"
|
||||
|
||||
#: autovoice.cpp:285
|
||||
msgid "Usage: DelChans <user> <channel> [channel] ..."
|
||||
msgstr "Kullanımı: DelChans <kullanıcı> <kanal> [kanal] ..."
|
||||
|
||||
#: autovoice.cpp:298
|
||||
msgid "Channel(s) Removed from user {1}"
|
||||
msgstr "Kanal(lar) {1} kullanıcısından silindi"
|
||||
|
||||
#: autovoice.cpp:335
|
||||
msgid "User {1} removed"
|
||||
msgstr "{1} kullanıcısı kaldırıldı"
|
||||
|
||||
#: autovoice.cpp:341
|
||||
msgid "That user already exists"
|
||||
msgstr "Bu kullanıcı zaten mevcut"
|
||||
|
||||
#: autovoice.cpp:347
|
||||
msgid "User {1} added with hostmask {2}"
|
||||
msgstr "{1} kullanıcısı {2} host maskeleriyle eklendi"
|
||||
|
||||
#: autovoice.cpp:360
|
||||
msgid ""
|
||||
"Each argument is either a channel you want autovoice for (which can include "
|
||||
"wildcards) or, if it starts with !, it is an exception for autovoice."
|
||||
msgstr ""
|
||||
"Her bağımsız değişken otomatik voice istediğiniz bir kanaldır (joker "
|
||||
"karakterler içerebilir) ya da ! ile başlıyorsa, otomatik voice için bir "
|
||||
"istisnadır."
|
||||
|
||||
#: autovoice.cpp:365
|
||||
msgid "Auto voice the good people"
|
||||
msgstr "İyi insanlara otomatik olarak voice verir"
|
||||
@@ -0,0 +1,118 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/awaystore.pot\n"
|
||||
"X-Crowdin-File-ID: 156\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: awaystore.cpp:67
|
||||
msgid "You have been marked as away"
|
||||
msgstr "Away olarak işaretlendiniz"
|
||||
|
||||
#: awaystore.cpp:78 awaystore.cpp:385 awaystore.cpp:388
|
||||
msgid "Welcome back!"
|
||||
msgstr "Tekrar hoşgeldiniz!"
|
||||
|
||||
#: awaystore.cpp:100
|
||||
msgid "Deleted {1} messages"
|
||||
msgstr "{1} mesaj silindi"
|
||||
|
||||
#: awaystore.cpp:104
|
||||
msgid "USAGE: delete <num|all>"
|
||||
msgstr "Kullanımı: delete <num|all>"
|
||||
|
||||
#: awaystore.cpp:109
|
||||
msgid "Illegal message # requested"
|
||||
msgstr "İllegal mesaj # istendi"
|
||||
|
||||
#: awaystore.cpp:113
|
||||
msgid "Message erased"
|
||||
msgstr "Mesaj silindi"
|
||||
|
||||
#: awaystore.cpp:122
|
||||
msgid "Messages saved to disk"
|
||||
msgstr "Mesajlar diske kaydedildi"
|
||||
|
||||
#: awaystore.cpp:124
|
||||
msgid "There are no messages to save"
|
||||
msgstr "Kaydedilecek mesaj yok"
|
||||
|
||||
#: awaystore.cpp:135
|
||||
msgid "Password updated to [{1}]"
|
||||
msgstr "Şifre [{1}] olarak güncellendi"
|
||||
|
||||
#: awaystore.cpp:147
|
||||
msgid "Corrupt message! [{1}]"
|
||||
msgstr "Bozuk mesaj! [{1}]"
|
||||
|
||||
#: awaystore.cpp:159
|
||||
msgid "Corrupt time stamp! [{1}]"
|
||||
msgstr "Bozuk zaman damgası! [{1}]"
|
||||
|
||||
#: awaystore.cpp:178
|
||||
msgid "#--- End of messages"
|
||||
msgstr "#---Mesajların sonu"
|
||||
|
||||
#: awaystore.cpp:183
|
||||
msgid "Timer set to 300 seconds"
|
||||
msgstr "Zamanlayıcı 300 saniyeye ayarlandı"
|
||||
|
||||
#: awaystore.cpp:188 awaystore.cpp:197
|
||||
msgid "Timer disabled"
|
||||
msgstr "Zamanlayıcı devre dışı"
|
||||
|
||||
#: awaystore.cpp:199
|
||||
msgid "Timer set to {1} seconds"
|
||||
msgstr "Zamanlayıcı {1} saniyeye ayarlandı"
|
||||
|
||||
#: awaystore.cpp:203
|
||||
msgid "Current timer setting: {1} seconds"
|
||||
msgstr "Geçerli zamanlayıcı ayarı: {1} saniye"
|
||||
|
||||
#: awaystore.cpp:278
|
||||
msgid "This module needs as an argument a keyphrase used for encryption"
|
||||
msgstr ""
|
||||
"Bu modülün argüman olarak şifreleme için kullanılan bir anahtar kelimeye "
|
||||
"ihtiyacı var"
|
||||
|
||||
#: awaystore.cpp:285
|
||||
msgid ""
|
||||
"Failed to decrypt your saved messages - Did you give the right encryption "
|
||||
"key as an argument to this module?"
|
||||
msgstr ""
|
||||
"Kayıtlı mesajlarınızın şifrelemesi çözülemedi - Bu modüle argüman olarak "
|
||||
"doğru şifreleme anahtarını verdiniz mi?"
|
||||
|
||||
#: awaystore.cpp:386 awaystore.cpp:389
|
||||
msgid "You have {1} messages!"
|
||||
msgstr "{1} mesajınız var!"
|
||||
|
||||
#: awaystore.cpp:456
|
||||
msgid "Unable to find buffer"
|
||||
msgstr "Arabellek bulunamıyor"
|
||||
|
||||
#: awaystore.cpp:469
|
||||
msgid "Unable to decode encrypted messages"
|
||||
msgstr "Şifrelenmiş mesajların kodu çözülemiyor"
|
||||
|
||||
#: awaystore.cpp:516
|
||||
msgid ""
|
||||
"[ -notimer | -timer N ] [-chans] passw0rd . N is number of seconds, 600 by "
|
||||
"default."
|
||||
msgstr ""
|
||||
"[ -notimer | -timer N ] [-chans] şifre . N saniye sayısı, varsayılan "
|
||||
"600'dür."
|
||||
|
||||
#: awaystore.cpp:521
|
||||
msgid ""
|
||||
"Adds auto-away with logging, useful when you use ZNC from different locations"
|
||||
msgstr ""
|
||||
"ZNC'yi farklı konumlardan kullandığınızda kullanışlı olan günlük kaydıyla "
|
||||
"otomatik away özelliği ekler"
|
||||
@@ -14,19 +14,19 @@ msgstr ""
|
||||
|
||||
#: block_motd.cpp:26
|
||||
msgid "[<server>]"
|
||||
msgstr ""
|
||||
msgstr "[<server>]"
|
||||
|
||||
#: block_motd.cpp:27
|
||||
msgid ""
|
||||
"Override the block with this command. Can optionally specify which server to "
|
||||
"query."
|
||||
msgstr ""
|
||||
"Écrase le bloc avec cette commande. Un serveur peut-être optionnellement "
|
||||
"Écrase le bloc avec cette commande. Un serveur peut être optionnellement "
|
||||
"spécifié pour la requête."
|
||||
|
||||
#: block_motd.cpp:36
|
||||
msgid "You are not connected to an IRC Server."
|
||||
msgstr "Vous n'êtes pas connecté à un serveur RIC."
|
||||
msgstr "Vous n'êtes pas connecté à un serveur IRC."
|
||||
|
||||
#: block_motd.cpp:58
|
||||
msgid "MOTD blocked by ZNC"
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/block_motd.pot\n"
|
||||
"X-Crowdin-File-ID: 157\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: block_motd.cpp:26
|
||||
msgid "[<server>]"
|
||||
msgstr "[<sunucu>]"
|
||||
|
||||
#: block_motd.cpp:27
|
||||
msgid ""
|
||||
"Override the block with this command. Can optionally specify which server to "
|
||||
"query."
|
||||
msgstr ""
|
||||
"Bu komutla bloğu geçersiz kılın. İsteğe bağlı olarak hangi sunucunun "
|
||||
"sorgulanacağını belirtebilir."
|
||||
|
||||
#: block_motd.cpp:36
|
||||
msgid "You are not connected to an IRC Server."
|
||||
msgstr "Bir IRC Sunucusuna bağlı değilsiniz."
|
||||
|
||||
#: block_motd.cpp:58
|
||||
msgid "MOTD blocked by ZNC"
|
||||
msgstr "MOTD ZNC tarafından engellendi"
|
||||
|
||||
#: block_motd.cpp:104
|
||||
msgid "Block the MOTD from IRC so it's not sent to your client(s)."
|
||||
msgstr "İstemcilerinize gönderilmemesi için MOTD'yi IRC'den engelleyin."
|
||||
@@ -26,7 +26,7 @@ msgstr "Liste des utilisateurs bloqués"
|
||||
|
||||
#: blockuser.cpp:31 blockuser.cpp:33
|
||||
msgid "<user>"
|
||||
msgstr ""
|
||||
msgstr "<user>"
|
||||
|
||||
#: blockuser.cpp:31
|
||||
msgid "Block a user"
|
||||
|
||||
@@ -14,7 +14,7 @@ msgstr ""
|
||||
|
||||
#: modules/po/../data/blockuser/tmpl/blockuser_WebadminUser.tmpl:9
|
||||
msgid "Account is blocked"
|
||||
msgstr ""
|
||||
msgstr "Conta bloqueada"
|
||||
|
||||
#: blockuser.cpp:23
|
||||
msgid "Your account has been disabled. Contact your administrator."
|
||||
@@ -28,7 +28,7 @@ msgstr "Listar usuários bloqueados"
|
||||
|
||||
#: blockuser.cpp:31 blockuser.cpp:33
|
||||
msgid "<user>"
|
||||
msgstr ""
|
||||
msgstr "<usuário>"
|
||||
|
||||
#: blockuser.cpp:31
|
||||
msgid "Block a user"
|
||||
@@ -48,7 +48,7 @@ msgstr "Acesso negado"
|
||||
|
||||
#: blockuser.cpp:85
|
||||
msgid "No users are blocked"
|
||||
msgstr ""
|
||||
msgstr "Nenhum usuário bloqueado"
|
||||
|
||||
#: blockuser.cpp:88
|
||||
msgid "Blocked users:"
|
||||
@@ -64,7 +64,7 @@ msgstr ""
|
||||
|
||||
#: blockuser.cpp:110 blockuser.cpp:152
|
||||
msgid "Blocked {1}"
|
||||
msgstr ""
|
||||
msgstr "O usuário {1} foi bloqueado"
|
||||
|
||||
#: blockuser.cpp:112
|
||||
msgid "Could not block {1} (misspelled?)"
|
||||
@@ -92,7 +92,7 @@ msgstr "O usuário {1} não está bloqueado"
|
||||
|
||||
#: blockuser.cpp:216
|
||||
msgid "Enter one or more user names. Separate them by spaces."
|
||||
msgstr ""
|
||||
msgstr "Insira um ou mais usuários, separados por espaços."
|
||||
|
||||
#: blockuser.cpp:219
|
||||
msgid "Block certain users from logging in."
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/blockuser.pot\n"
|
||||
"X-Crowdin-File-ID: 158\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: modules/po/../data/blockuser/tmpl/blockuser_WebadminUser.tmpl:9
|
||||
msgid "Account is blocked"
|
||||
msgstr "Hesap bloke edildi"
|
||||
|
||||
#: blockuser.cpp:23
|
||||
msgid "Your account has been disabled. Contact your administrator."
|
||||
msgstr "Hesabınız engellendi. Yöneticinizle iletişime geçin."
|
||||
|
||||
#: blockuser.cpp:29
|
||||
msgid "List blocked users"
|
||||
msgstr "Bloke edilen kullanıcıları listele"
|
||||
|
||||
#: blockuser.cpp:31 blockuser.cpp:33
|
||||
msgid "<user>"
|
||||
msgstr "<kullanıcı>"
|
||||
|
||||
#: blockuser.cpp:31
|
||||
msgid "Block a user"
|
||||
msgstr "Bir kullanıcıyı bloke et"
|
||||
|
||||
#: blockuser.cpp:33
|
||||
msgid "Unblock a user"
|
||||
msgstr "Bir kullanıcının blokesini kaldır"
|
||||
|
||||
#: blockuser.cpp:55
|
||||
msgid "Could not block {1}"
|
||||
msgstr "{1} bloke edilemedi"
|
||||
|
||||
#: blockuser.cpp:76
|
||||
msgid "Access denied"
|
||||
msgstr "Erişim reddedildi"
|
||||
|
||||
#: blockuser.cpp:85
|
||||
msgid "No users are blocked"
|
||||
msgstr "Bloke edilen kullanıcı yok"
|
||||
|
||||
#: blockuser.cpp:88
|
||||
msgid "Blocked users:"
|
||||
msgstr "Bloke edilen kullanıcılar:"
|
||||
|
||||
#: blockuser.cpp:100
|
||||
msgid "Usage: Block <user>"
|
||||
msgstr "Kullanımı: Block <kullanıcı>"
|
||||
|
||||
#: blockuser.cpp:105 blockuser.cpp:147
|
||||
msgid "You can't block yourself"
|
||||
msgstr "Kendinizi kendinizi bloke edemezsiniz"
|
||||
|
||||
#: blockuser.cpp:110 blockuser.cpp:152
|
||||
msgid "Blocked {1}"
|
||||
msgstr "{1} bloke edildi"
|
||||
|
||||
#: blockuser.cpp:112
|
||||
msgid "Could not block {1} (misspelled?)"
|
||||
msgstr "{1} bloke edilemedi (yanlış mı yazılmış?)"
|
||||
|
||||
#: blockuser.cpp:120
|
||||
msgid "Usage: Unblock <user>"
|
||||
msgstr "Kullanımı: UnBlock <kullanıcı>"
|
||||
|
||||
#: blockuser.cpp:125 blockuser.cpp:161
|
||||
msgid "Unblocked {1}"
|
||||
msgstr "{1} blokesi kaldırıldı"
|
||||
|
||||
#: blockuser.cpp:127
|
||||
msgid "This user is not blocked"
|
||||
msgstr "Bu kullanıcı bloke edilmedi"
|
||||
|
||||
#: blockuser.cpp:155
|
||||
msgid "Couldn't block {1}"
|
||||
msgstr "{1} bloke edilemedi"
|
||||
|
||||
#: blockuser.cpp:164
|
||||
msgid "User {1} is not blocked"
|
||||
msgstr "{1} kullanıcısı bloke edilmedi"
|
||||
|
||||
#: blockuser.cpp:216
|
||||
msgid "Enter one or more user names. Separate them by spaces."
|
||||
msgstr "Bir veya daha fazla kullanıcı adı girin. Bunları boşluklarla ayırın."
|
||||
|
||||
#: blockuser.cpp:219
|
||||
msgid "Block certain users from logging in."
|
||||
msgstr "Belirli kullanıcıların giriş yapmasını bloke edin."
|
||||
@@ -0,0 +1,135 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/bouncedcc.pot\n"
|
||||
"X-Crowdin-File-ID: 159\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: bouncedcc.cpp:101 bouncedcc.cpp:119 bouncedcc.cpp:121
|
||||
msgctxt "list"
|
||||
msgid "Type"
|
||||
msgstr "Tip"
|
||||
|
||||
#: bouncedcc.cpp:102 bouncedcc.cpp:132
|
||||
msgctxt "list"
|
||||
msgid "State"
|
||||
msgstr "Durum"
|
||||
|
||||
#: bouncedcc.cpp:103
|
||||
msgctxt "list"
|
||||
msgid "Speed"
|
||||
msgstr "Hız"
|
||||
|
||||
#: bouncedcc.cpp:104 bouncedcc.cpp:115
|
||||
msgctxt "list"
|
||||
msgid "Nick"
|
||||
msgstr "Nick"
|
||||
|
||||
#: bouncedcc.cpp:105 bouncedcc.cpp:116
|
||||
msgctxt "list"
|
||||
msgid "IP"
|
||||
msgstr "IP"
|
||||
|
||||
#: bouncedcc.cpp:106 bouncedcc.cpp:122
|
||||
msgctxt "list"
|
||||
msgid "File"
|
||||
msgstr "Dosya"
|
||||
|
||||
#: bouncedcc.cpp:119
|
||||
msgctxt "list"
|
||||
msgid "Chat"
|
||||
msgstr "Chat"
|
||||
|
||||
#: bouncedcc.cpp:121
|
||||
msgctxt "list"
|
||||
msgid "Xfer"
|
||||
msgstr "Xfer"
|
||||
|
||||
#: bouncedcc.cpp:125
|
||||
msgid "Waiting"
|
||||
msgstr "Bekleniyor"
|
||||
|
||||
#: bouncedcc.cpp:127
|
||||
msgid "Halfway"
|
||||
msgstr "Halfway"
|
||||
|
||||
#: bouncedcc.cpp:129
|
||||
msgid "Connected"
|
||||
msgstr "Bağlandı"
|
||||
|
||||
#: bouncedcc.cpp:137
|
||||
msgid "You have no active DCCs."
|
||||
msgstr "Aktif DCCniz bulunmamaktadır."
|
||||
|
||||
#: bouncedcc.cpp:148
|
||||
msgid "Use client IP: {1}"
|
||||
msgstr "İstemci IP'sini kullan: {1}"
|
||||
|
||||
#: bouncedcc.cpp:153
|
||||
msgid "List all active DCCs"
|
||||
msgstr "Tüm etkin DCC'leri listele"
|
||||
|
||||
#: bouncedcc.cpp:156
|
||||
msgid "Change the option to use IP of client"
|
||||
msgstr "İstemcinin IP'sini kullanma seçeneğini değiştirin"
|
||||
|
||||
#: bouncedcc.cpp:383 bouncedcc.cpp:412 bouncedcc.cpp:436 bouncedcc.cpp:451
|
||||
msgctxt "type"
|
||||
msgid "Chat"
|
||||
msgstr "Chat"
|
||||
|
||||
#: bouncedcc.cpp:383 bouncedcc.cpp:412 bouncedcc.cpp:436 bouncedcc.cpp:451
|
||||
msgctxt "type"
|
||||
msgid "Xfer"
|
||||
msgstr "Xfer"
|
||||
|
||||
#: bouncedcc.cpp:385
|
||||
msgid "DCC {1} Bounce ({2}): Too long line received"
|
||||
msgstr "DCC {1} Geri Dönme ({2}): Çok uzun satır alındı"
|
||||
|
||||
#: bouncedcc.cpp:418
|
||||
msgid "DCC {1} Bounce ({2}): Timeout while connecting to {3} {4}"
|
||||
msgstr "DCC {1} Geri Dönme ({2}): {3} {4}'e bağlanırken zaman aşımı"
|
||||
|
||||
#: bouncedcc.cpp:422
|
||||
msgid "DCC {1} Bounce ({2}): Timeout while connecting."
|
||||
msgstr "DCC {1} Geri Dönme ({2}): Bağlantı sırasında zaman aşımı."
|
||||
|
||||
#: bouncedcc.cpp:427
|
||||
msgid ""
|
||||
"DCC {1} Bounce ({2}): Timeout while waiting for incoming connection on {3} "
|
||||
"{4}"
|
||||
msgstr ""
|
||||
"DCC {1} Geri Dönme ({2}): {3} {4} üzerinde gelen bağlantı beklenirken zaman "
|
||||
"aşımı"
|
||||
|
||||
#: bouncedcc.cpp:440
|
||||
msgid "DCC {1} Bounce ({2}): Connection refused while connecting to {3} {4}"
|
||||
msgstr "DCC {1} Geri Döndü ({2}): {3} {4}'e bağlanırken bağlantı reddedildi"
|
||||
|
||||
#: bouncedcc.cpp:444
|
||||
msgid "DCC {1} Bounce ({2}): Connection refused while connecting."
|
||||
msgstr "DCC {1} Geri Dönme ({2}): Bağlanırken bağlantı reddedildi."
|
||||
|
||||
#: bouncedcc.cpp:457 bouncedcc.cpp:465
|
||||
msgid "DCC {1} Bounce ({2}): Socket error on {3} {4}: {5}"
|
||||
msgstr "DCC {1} Geri Dönme ({2}): {3} {4} üzerinde soket hatası: {5}"
|
||||
|
||||
#: bouncedcc.cpp:460
|
||||
msgid "DCC {1} Bounce ({2}): Socket error: {3}"
|
||||
msgstr "DCC {1} Geri Dönme ({2}): Soket hatası: {3}"
|
||||
|
||||
#: bouncedcc.cpp:547
|
||||
msgid ""
|
||||
"Bounces DCC transfers through ZNC instead of sending them directly to the "
|
||||
"user. "
|
||||
msgstr ""
|
||||
"DCC aktarımlarını doğrudan kullanıcıya göndermek yerine ZNC aracılığıyla "
|
||||
"geri döndürür. "
|
||||
@@ -18,7 +18,7 @@ msgstr "Servidor"
|
||||
|
||||
#: buffextras.cpp:47
|
||||
msgid "{1} set mode: {2} {3}"
|
||||
msgstr ""
|
||||
msgstr "{1} definiu o(s) modo(s): {2} {3}"
|
||||
|
||||
#: buffextras.cpp:55
|
||||
msgid "{1} kicked {2} with reason: {3}"
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/buffextras.pot\n"
|
||||
"X-Crowdin-File-ID: 160\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: buffextras.cpp:45
|
||||
msgid "Server"
|
||||
msgstr "Sunucu"
|
||||
|
||||
#: buffextras.cpp:47
|
||||
msgid "{1} set mode: {2} {3}"
|
||||
msgstr "{1} modu ayarladı: {2} {3}"
|
||||
|
||||
#: buffextras.cpp:55
|
||||
msgid "{1} kicked {2} with reason: {3}"
|
||||
msgstr "{1}, {2}'yi şu nedenle attı: {3}"
|
||||
|
||||
#: buffextras.cpp:64
|
||||
msgid "{1} quit: {2}"
|
||||
msgstr "{1} çıkış: {2}"
|
||||
|
||||
#: buffextras.cpp:73
|
||||
msgid "{1} joined"
|
||||
msgstr "{1} katıldı"
|
||||
|
||||
#: buffextras.cpp:81
|
||||
msgid "{1} parted: {2}"
|
||||
msgstr "{1} ayrıldı: {2}"
|
||||
|
||||
#: buffextras.cpp:90
|
||||
msgid "{1} is now known as {2}"
|
||||
msgstr "{1} artık {2} olarak biliniyor"
|
||||
|
||||
#: buffextras.cpp:100
|
||||
msgid "{1} changed the topic to: {2}"
|
||||
msgstr "{1} başlığı şu şekilde değiştirdi: {2}"
|
||||
|
||||
#: buffextras.cpp:115
|
||||
msgid "Adds joins, parts etc. to the playback buffer"
|
||||
msgstr "Katılımlar, ayrılmalar vb. oynatma arabelleğine ekler"
|
||||
+18
-11
@@ -15,7 +15,7 @@ msgstr ""
|
||||
# this text is inserted into `click here` in the other string
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:5
|
||||
msgid "here"
|
||||
msgstr ""
|
||||
msgstr "ici"
|
||||
|
||||
# {1} is `here`, translateable in the other string
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:6
|
||||
@@ -23,53 +23,60 @@ msgid ""
|
||||
"You already have a certificate set, use the form below to overwrite the "
|
||||
"current certificate. Alternatively click {1} to delete your certificate."
|
||||
msgstr ""
|
||||
"Vous avez déjà un certificat enregistré, utilisez le formulaire ci-dessous "
|
||||
"pour écraser le certificat actuel. Alternativement, cliquez sur {1} pour "
|
||||
"supprimer votre certificat."
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:8
|
||||
msgid "You do not have a certificate yet."
|
||||
msgstr ""
|
||||
msgstr "Vous n'avez pas encore de certificat."
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:14 cert.cpp:72
|
||||
msgid "Certificate"
|
||||
msgstr ""
|
||||
msgstr "Certificat"
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:18
|
||||
msgid "PEM File:"
|
||||
msgstr ""
|
||||
msgstr "Fichier PEM :"
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:22
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour"
|
||||
|
||||
#: cert.cpp:28
|
||||
msgid "Pem file deleted"
|
||||
msgstr ""
|
||||
msgstr "Fichier PEM supprimé"
|
||||
|
||||
#: cert.cpp:31
|
||||
msgid "The pem file doesn't exist or there was a error deleting the pem file."
|
||||
msgstr ""
|
||||
"Le fichier PEM n'existe pas, ou bien une erreur est survenue en supprimant "
|
||||
"le fichier PEM."
|
||||
|
||||
#: cert.cpp:38
|
||||
msgid "You have a certificate in {1}"
|
||||
msgstr ""
|
||||
msgstr "Vous avez un certificat dans {1}"
|
||||
|
||||
#: cert.cpp:41
|
||||
msgid ""
|
||||
"You do not have a certificate. Please use the web interface to add a "
|
||||
"certificate"
|
||||
msgstr ""
|
||||
"Vous n'avez pas de certificat. Utilisez l'interface web pour ajouter un "
|
||||
"certificat"
|
||||
|
||||
#: cert.cpp:44
|
||||
msgid "Alternatively you can either place one at {1}"
|
||||
msgstr ""
|
||||
msgstr "Alternativement, vous pouvez en placer un à {1}"
|
||||
|
||||
#: cert.cpp:52
|
||||
msgid "Delete the current certificate"
|
||||
msgstr ""
|
||||
msgstr "Supprimer le certificat actuel"
|
||||
|
||||
#: cert.cpp:54
|
||||
msgid "Show the current certificate"
|
||||
msgstr ""
|
||||
msgstr "Montrer le certificat actuel"
|
||||
|
||||
#: cert.cpp:105
|
||||
msgid "Use a ssl certificate to connect to a server"
|
||||
msgstr ""
|
||||
msgstr "Utiliser un certificat SSL pour vous connecter à un serveur"
|
||||
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
# this text is inserted into `click here` in the other string
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:5
|
||||
msgid "here"
|
||||
msgstr ""
|
||||
msgstr "aqui"
|
||||
|
||||
# {1} is `here`, translateable in the other string
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:6
|
||||
@@ -26,7 +26,7 @@ msgstr ""
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:8
|
||||
msgid "You do not have a certificate yet."
|
||||
msgstr ""
|
||||
msgstr "Você não possui um certificado."
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:14 cert.cpp:72
|
||||
msgid "Certificate"
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/cert.pot\n"
|
||||
"X-Crowdin-File-ID: 161\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
# this text is inserted into `click here` in the other string
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:5
|
||||
msgid "here"
|
||||
msgstr "burada"
|
||||
|
||||
# {1} is `here`, translateable in the other string
|
||||
#: 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 ""
|
||||
"Zaten bir sertifika setiniz var, mevcut sertifikanın üzerine yazmak için "
|
||||
"aşağıdaki formu kullanın. Alternatif olarak sertifikanızı silmek için {1} "
|
||||
"öğesine tıklayın."
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:8
|
||||
msgid "You do not have a certificate yet."
|
||||
msgstr "Henüz bir sertifikanız yok."
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:14 cert.cpp:72
|
||||
msgid "Certificate"
|
||||
msgstr "Sertifika"
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:18
|
||||
msgid "PEM File:"
|
||||
msgstr "PEM Dosyası:"
|
||||
|
||||
#: modules/po/../data/cert/tmpl/index.tmpl:22
|
||||
msgid "Update"
|
||||
msgstr "Güncelle"
|
||||
|
||||
#: cert.cpp:28
|
||||
msgid "Pem file deleted"
|
||||
msgstr "PEM dosyası silindi"
|
||||
|
||||
#: cert.cpp:31
|
||||
msgid "The pem file doesn't exist or there was a error deleting the pem file."
|
||||
msgstr "PEM dosyası mevcut değil veya PEM dosyası silinirken bir hata oluştu."
|
||||
|
||||
#: cert.cpp:38
|
||||
msgid "You have a certificate in {1}"
|
||||
msgstr "{1} alanında bir sertifikanız var"
|
||||
|
||||
#: cert.cpp:41
|
||||
msgid ""
|
||||
"You do not have a certificate. Please use the web interface to add a "
|
||||
"certificate"
|
||||
msgstr "Sertifikanız yok. Sertifika eklemek için lütfen web arayüzünü kullanın"
|
||||
|
||||
#: cert.cpp:44
|
||||
msgid "Alternatively you can either place one at {1}"
|
||||
msgstr "Alternatif olarak {1}'e de bir tane yerleştirebilirsiniz"
|
||||
|
||||
#: cert.cpp:52
|
||||
msgid "Delete the current certificate"
|
||||
msgstr "Mevcut sertifikayı sil"
|
||||
|
||||
#: cert.cpp:54
|
||||
msgid "Show the current certificate"
|
||||
msgstr "Geçerli sertifikayı göster"
|
||||
|
||||
#: cert.cpp:105
|
||||
msgid "Use a ssl certificate to connect to a server"
|
||||
msgstr "Bir sunucuya bağlanmak için SSL sertifikası kullan"
|
||||
@@ -14,95 +14,99 @@ msgstr ""
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:7
|
||||
msgid "Add a key"
|
||||
msgstr ""
|
||||
msgstr "Ajouter une clé"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:11
|
||||
msgid "Key:"
|
||||
msgstr ""
|
||||
msgstr "Clé :"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:15
|
||||
msgid "Add Key"
|
||||
msgstr ""
|
||||
msgstr "Ajouter une clé"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:23
|
||||
msgid "You have no keys."
|
||||
msgstr ""
|
||||
msgstr "Vous n'avez pas de clé."
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:30
|
||||
msgctxt "web"
|
||||
msgid "Key"
|
||||
msgstr ""
|
||||
msgstr "Clé"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:36
|
||||
msgid "del"
|
||||
msgstr ""
|
||||
msgstr "Suppr"
|
||||
|
||||
#: certauth.cpp:31
|
||||
msgid "[pubkey]"
|
||||
msgstr ""
|
||||
msgstr "[clé publique]"
|
||||
|
||||
#: certauth.cpp:32
|
||||
msgid "Add a public key. If key is not provided will use the current key"
|
||||
msgstr ""
|
||||
"Ajouter une clé publique. Si aucune clé n'est spécifiée, la clé actuelle "
|
||||
"sera utilisée"
|
||||
|
||||
#: certauth.cpp:35
|
||||
msgid "id"
|
||||
msgstr ""
|
||||
msgstr "id"
|
||||
|
||||
#: certauth.cpp:35
|
||||
msgid "Delete a key by its number in List"
|
||||
msgstr ""
|
||||
msgstr "Supprime une clé via sur numéro dans la liste"
|
||||
|
||||
#: certauth.cpp:37
|
||||
msgid "List your public keys"
|
||||
msgstr ""
|
||||
msgstr "Lister vos clés publiques"
|
||||
|
||||
#: certauth.cpp:39
|
||||
msgid "Print your current key"
|
||||
msgstr ""
|
||||
msgstr "Afficher votre clé actuelle"
|
||||
|
||||
#: certauth.cpp:142
|
||||
msgid "You are not connected with any valid public key"
|
||||
msgstr ""
|
||||
msgstr "Vous n'êtes pas connecté(e) avec une clé publique valide"
|
||||
|
||||
#: certauth.cpp:144
|
||||
msgid "Your current public key is: {1}"
|
||||
msgstr ""
|
||||
msgstr "Votre clé publique actuelle est : {1}"
|
||||
|
||||
#: certauth.cpp:157
|
||||
msgid "You did not supply a public key or connect with one."
|
||||
msgstr ""
|
||||
"Vous n'avez pas fourni de clé publique ou ne vous êtes pas connecté avec."
|
||||
|
||||
#: certauth.cpp:160
|
||||
msgid "Key '{1}' added."
|
||||
msgstr ""
|
||||
msgstr "Clé '{1}' ajoutée."
|
||||
|
||||
#: certauth.cpp:162
|
||||
msgid "The key '{1}' is already added."
|
||||
msgstr ""
|
||||
msgstr "La clé '{1}' a déjà été ajoutée."
|
||||
|
||||
#: certauth.cpp:170 certauth.cpp:183
|
||||
msgctxt "list"
|
||||
msgid "Id"
|
||||
msgstr ""
|
||||
msgstr "ID"
|
||||
|
||||
#: certauth.cpp:171 certauth.cpp:184
|
||||
msgctxt "list"
|
||||
msgid "Key"
|
||||
msgstr ""
|
||||
msgstr "Clé"
|
||||
|
||||
#: certauth.cpp:176 certauth.cpp:190 certauth.cpp:199
|
||||
msgid "No keys set for your user"
|
||||
msgstr ""
|
||||
msgstr "Pas de clés enregistrées pour votre utilisateur"
|
||||
|
||||
#: certauth.cpp:204
|
||||
msgid "Invalid #, check \"list\""
|
||||
msgstr ""
|
||||
msgstr "Canal invalide, vérifiez avec \"/list\"."
|
||||
|
||||
#: certauth.cpp:216
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "Supprimé"
|
||||
|
||||
#: certauth.cpp:291
|
||||
msgid "Allows users to authenticate via SSL client certificates."
|
||||
msgstr ""
|
||||
"Autorise les utilisateurs à s'authentifier via le certificat SSL client."
|
||||
|
||||
@@ -35,7 +35,7 @@ msgstr "Chave"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:36
|
||||
msgid "del"
|
||||
msgstr ""
|
||||
msgstr "excluir"
|
||||
|
||||
#: certauth.cpp:31
|
||||
msgid "[pubkey]"
|
||||
@@ -91,7 +91,7 @@ msgstr ""
|
||||
#: certauth.cpp:171 certauth.cpp:184
|
||||
msgctxt "list"
|
||||
msgid "Key"
|
||||
msgstr ""
|
||||
msgstr "Chave"
|
||||
|
||||
#: certauth.cpp:176 certauth.cpp:190 certauth.cpp:199
|
||||
msgid "No keys set for your user"
|
||||
@@ -103,7 +103,7 @@ msgstr ""
|
||||
|
||||
#: certauth.cpp:216
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "removida"
|
||||
|
||||
#: certauth.cpp:291
|
||||
msgid "Allows users to authenticate via SSL client certificates."
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/certauth.pot\n"
|
||||
"X-Crowdin-File-ID: 162\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:7
|
||||
msgid "Add a key"
|
||||
msgstr "Bir anahtar ekle"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:11
|
||||
msgid "Key:"
|
||||
msgstr "Anahtar:"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:15
|
||||
msgid "Add Key"
|
||||
msgstr "Anahtar Ekle"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:23
|
||||
msgid "You have no keys."
|
||||
msgstr "Hiçbir anahtarınız yok."
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:30
|
||||
msgctxt "web"
|
||||
msgid "Key"
|
||||
msgstr "Anahtar"
|
||||
|
||||
#: modules/po/../data/certauth/tmpl/index.tmpl:36
|
||||
msgid "del"
|
||||
msgstr "sil"
|
||||
|
||||
#: certauth.cpp:31
|
||||
msgid "[pubkey]"
|
||||
msgstr "[pubkey]"
|
||||
|
||||
#: certauth.cpp:32
|
||||
msgid "Add a public key. If key is not provided will use the current key"
|
||||
msgstr ""
|
||||
"Ortak anahtar ekleyin. Anahtar sağlanmazsa mevcut anahtar kullanılacaktır"
|
||||
|
||||
#: certauth.cpp:35
|
||||
msgid "id"
|
||||
msgstr "id"
|
||||
|
||||
#: certauth.cpp:35
|
||||
msgid "Delete a key by its number in List"
|
||||
msgstr "Listedeki numarasına göre bir anahtarı silme"
|
||||
|
||||
#: certauth.cpp:37
|
||||
msgid "List your public keys"
|
||||
msgstr "Genel anahtarlarınızı listeleyin"
|
||||
|
||||
#: certauth.cpp:39
|
||||
msgid "Print your current key"
|
||||
msgstr "Mevcut anahtarınızı yazdırın"
|
||||
|
||||
#: certauth.cpp:142
|
||||
msgid "You are not connected with any valid public key"
|
||||
msgstr "Herhangi bir geçerli genel anahtara bağlı değilsiniz"
|
||||
|
||||
#: certauth.cpp:144
|
||||
msgid "Your current public key is: {1}"
|
||||
msgstr "Mevcut genel anahtarınız: {1}"
|
||||
|
||||
#: certauth.cpp:157
|
||||
msgid "You did not supply a public key or connect with one."
|
||||
msgstr "Bir ortak anahtar sağlamadınız veya bir ortak anahtara bağlanmadınız."
|
||||
|
||||
#: certauth.cpp:160
|
||||
msgid "Key '{1}' added."
|
||||
msgstr "'{1}' anahtarı eklendi."
|
||||
|
||||
#: certauth.cpp:162
|
||||
msgid "The key '{1}' is already added."
|
||||
msgstr "'{1}' anahtarı zaten eklenmiş."
|
||||
|
||||
#: certauth.cpp:170 certauth.cpp:183
|
||||
msgctxt "list"
|
||||
msgid "Id"
|
||||
msgstr "Id"
|
||||
|
||||
#: certauth.cpp:171 certauth.cpp:184
|
||||
msgctxt "list"
|
||||
msgid "Key"
|
||||
msgstr "Anahtar"
|
||||
|
||||
#: certauth.cpp:176 certauth.cpp:190 certauth.cpp:199
|
||||
msgid "No keys set for your user"
|
||||
msgstr "Kullanıcınız için ayarlanmış anahtar yok"
|
||||
|
||||
#: certauth.cpp:204
|
||||
msgid "Invalid #, check \"list\""
|
||||
msgstr "Geçersiz #, \"listeyi\" kontrol et"
|
||||
|
||||
#: certauth.cpp:216
|
||||
msgid "Removed"
|
||||
msgstr "Kaldırıldı"
|
||||
|
||||
#: certauth.cpp:291
|
||||
msgid "Allows users to authenticate via SSL client certificates."
|
||||
msgstr ""
|
||||
"Kullanıcıların SSL istemci sertifikaları aracılığıyla kimlik doğrulaması "
|
||||
"yapmasına olanak tanır."
|
||||
@@ -0,0 +1,18 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/chansaver.pot\n"
|
||||
"X-Crowdin-File-ID: 163\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: chansaver.cpp:91
|
||||
msgid "Keeps config up-to-date when user joins/parts."
|
||||
msgstr ""
|
||||
"Kullanıcı kanala katıldığında/ayrıldığında yapılandırmayı güncel tutar."
|
||||
@@ -0,0 +1,18 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/clearbufferonmsg.pot\n"
|
||||
"X-Crowdin-File-ID: 164\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: clearbufferonmsg.cpp:160
|
||||
msgid "Clears all channel and query buffers whenever the user does something"
|
||||
msgstr ""
|
||||
"Kullanıcı bir şey yaptığında tüm kanal ve sorgu arabelleklerini temizler"
|
||||
@@ -14,16 +14,16 @@ msgstr ""
|
||||
|
||||
#: clientnotify.cpp:53
|
||||
msgid "<message|notice|off>"
|
||||
msgstr ""
|
||||
msgstr "<message|notice|off>"
|
||||
|
||||
#: clientnotify.cpp:54
|
||||
msgid "Sets the notify method"
|
||||
msgstr ""
|
||||
msgstr "Définit la méthode de notification"
|
||||
|
||||
#: clientnotify.cpp:56 clientnotify.cpp:59 clientnotify.cpp:63
|
||||
#: clientnotify.cpp:68
|
||||
msgid "<on|off>"
|
||||
msgstr ""
|
||||
msgstr "<on|off>"
|
||||
|
||||
#: clientnotify.cpp:57
|
||||
msgid "Turns notifications for unseen connections on or off"
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/clientnotify.pot\n"
|
||||
"X-Crowdin-File-ID: 165\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: clientnotify.cpp:53
|
||||
msgid "<message|notice|off>"
|
||||
msgstr "<message|notice|off>"
|
||||
|
||||
#: clientnotify.cpp:54
|
||||
msgid "Sets the notify method"
|
||||
msgstr "Bildirim yöntemini ayarlayın"
|
||||
|
||||
#: clientnotify.cpp:56 clientnotify.cpp:59 clientnotify.cpp:63
|
||||
#: clientnotify.cpp:68
|
||||
msgid "<on|off>"
|
||||
msgstr "<on|off>"
|
||||
|
||||
#: clientnotify.cpp:57
|
||||
msgid "Turns notifications for unseen connections on or off"
|
||||
msgstr "Görünmeyen bağlantılara ilişkin bildirimleri açar veya kapatır"
|
||||
|
||||
#: clientnotify.cpp:60
|
||||
msgid ""
|
||||
"Specifies whether you want to be notified about new connections with new IPs"
|
||||
msgstr ""
|
||||
"Yeni IP'lere sahip yeni bağlantılar hakkında bilgilendirilmek isteyip "
|
||||
"istemediğinizi belirtir"
|
||||
|
||||
#: clientnotify.cpp:64
|
||||
msgid ""
|
||||
"Specifies whether you want to be notified about new connections with new "
|
||||
"client IDs"
|
||||
msgstr ""
|
||||
"Yeni istemci kimlikleriyle yeni bağlantılar hakkında bilgilendirilmek "
|
||||
"isteyip istemediğinizi belirtir"
|
||||
|
||||
#: clientnotify.cpp:69
|
||||
msgid "Turns notifications for clients disconnecting on or off"
|
||||
msgstr "Bağlantısı kesilen istemciler için bildirimleri açar veya kapatır"
|
||||
|
||||
#: clientnotify.cpp:71
|
||||
msgid "Shows the current settings"
|
||||
msgstr "Geçerli ayarları gösterir"
|
||||
|
||||
#: clientnotify.cpp:104 clientnotify.cpp:134
|
||||
msgid "<This message is impossible for 1 client>"
|
||||
msgid_plural ""
|
||||
"Another client ({1}) authenticated as your user. Use the 'ListClients' "
|
||||
"command to see all {2} clients."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Başka bir istemcinin ({1}) kullanıcınız olarak kimliği doğrulandı. Tüm {2} "
|
||||
"istemcilerini görmek için 'ListClients' komutunu kullanın."
|
||||
|
||||
#: clientnotify.cpp:147
|
||||
msgid "Usage: Method <message|notice|off>"
|
||||
msgstr "Kullanımı: Method <message|notice|off>"
|
||||
|
||||
#: clientnotify.cpp:153 clientnotify.cpp:166 clientnotify.cpp:179
|
||||
#: clientnotify.cpp:192 clientnotify.cpp:205
|
||||
msgid "Saved."
|
||||
msgstr "Kaydedildi"
|
||||
|
||||
#: clientnotify.cpp:160
|
||||
msgid "Usage: NewOnly <on|off>"
|
||||
msgstr "Kullanımı: NewOnly <on|off>"
|
||||
|
||||
#: clientnotify.cpp:173
|
||||
msgid "Usage: NotifyOnNewIP <on|off>"
|
||||
msgstr "Kullanımı: NotifyOnNewIP <on|off>"
|
||||
|
||||
#: clientnotify.cpp:186
|
||||
msgid "Usage: NotifyOnNewID <on|off>"
|
||||
msgstr "Kullanımı: NotifyOnNewID <on|off>"
|
||||
|
||||
#: clientnotify.cpp:199
|
||||
msgid "Usage: OnDisconnect <on|off>"
|
||||
msgstr "Kullanımı: OnDisconnect <on|off>"
|
||||
|
||||
#: clientnotify.cpp:210
|
||||
msgid ""
|
||||
"Current settings: Method: {1}, for unseen only: {2}, notifyfor unseen IPs: "
|
||||
"{3}, notify for unseen IDs: {4}, notify ondisconnecting clients: {5}"
|
||||
msgstr ""
|
||||
"Geçerli ayarlar: Yöntem: {1}, yalnızca görülmeyenler için: {2}, görünmeyen "
|
||||
"IP'ler için bildir: {3}, görünmeyen kimlikler için bildir: {4}, istemcilerin "
|
||||
"bağlantısı kesildiğinde bildir: {5}"
|
||||
|
||||
#: clientnotify.cpp:224
|
||||
msgid ""
|
||||
"Notifies you when another IRC client logs into or out of your account. "
|
||||
"Configurable."
|
||||
msgstr ""
|
||||
"Başka bir IRC istemcisi hesabınıza giriş yaptığında veya hesabınızdan çıkış "
|
||||
"yaptığında sizi bilgilendirir. Yapılandırılabilir."
|
||||
@@ -139,7 +139,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:619
|
||||
msgid "Error: Invalid network."
|
||||
msgstr ""
|
||||
msgstr "Erro: Rede inválida"
|
||||
|
||||
#: controlpanel.cpp:663
|
||||
msgid "Usage: SetNetwork <variable> <username> <network> <value>"
|
||||
@@ -151,7 +151,7 @@ msgstr "Sintaxe: AddChan <usuário> <rede> <canal>"
|
||||
|
||||
#: controlpanel.cpp:762
|
||||
msgid "Error: User {1} already has a channel named {2}."
|
||||
msgstr ""
|
||||
msgstr "Erro: O usuário {1} já possui o canal {2}"
|
||||
|
||||
#: controlpanel.cpp:769
|
||||
msgid "Channel {1} for user {2} added to network {3}."
|
||||
@@ -265,11 +265,11 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1058
|
||||
msgid "Error: Internal error!"
|
||||
msgstr ""
|
||||
msgstr "Erro: Erro interno!"
|
||||
|
||||
#: controlpanel.cpp:1062
|
||||
msgid "User {1} deleted!"
|
||||
msgstr ""
|
||||
msgstr "O usuário {1} foi excluído"
|
||||
|
||||
#: controlpanel.cpp:1077
|
||||
msgid "Usage: CloneUser <old username> <new username>"
|
||||
@@ -320,7 +320,7 @@ msgstr ""
|
||||
#: controlpanel.cpp:1216 controlpanel.cpp:1224
|
||||
msgctxt "listnetworks"
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
msgstr "Rede"
|
||||
|
||||
#: controlpanel.cpp:1217 controlpanel.cpp:1226 controlpanel.cpp:1234
|
||||
msgctxt "listnetworks"
|
||||
@@ -340,11 +340,11 @@ msgstr ""
|
||||
#: controlpanel.cpp:1220 controlpanel.cpp:1231
|
||||
msgctxt "listnetworks"
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
msgstr "Canais"
|
||||
|
||||
#: controlpanel.cpp:1239
|
||||
msgid "No networks"
|
||||
msgstr ""
|
||||
msgstr "Não há redes disponíveis."
|
||||
|
||||
#: controlpanel.cpp:1250
|
||||
msgid "Usage: AddServer <username> <network> <server> [[+]port] [password]"
|
||||
@@ -352,7 +352,7 @@ msgstr "Sintaxe: AddServer <usuário> <rede> <servidor> [[+]porta] [senha]"
|
||||
|
||||
#: controlpanel.cpp:1269
|
||||
msgid "Added IRC Server {1} to network {2} for user {3}."
|
||||
msgstr ""
|
||||
msgstr "O servidor {1} foi adicionado à rede {2} para o usuário {3}"
|
||||
|
||||
#: controlpanel.cpp:1273
|
||||
msgid "Error: Could not add IRC server {1} to network {2} for user {3}."
|
||||
@@ -449,7 +449,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1492
|
||||
msgid "Loaded module {1}"
|
||||
msgstr ""
|
||||
msgstr "Módulo {1} carregado"
|
||||
|
||||
#: controlpanel.cpp:1497
|
||||
msgid "Error: Unable to reload module {1}: {2}"
|
||||
@@ -494,7 +494,7 @@ msgstr "Sintaxe: UnloadNetModule <usuário> <rede> <nome do módulo>"
|
||||
#: controlpanel.cpp:1611 controlpanel.cpp:1617
|
||||
msgctxt "listmodules"
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "Nome"
|
||||
|
||||
#: controlpanel.cpp:1612 controlpanel.cpp:1618
|
||||
msgctxt "listmodules"
|
||||
@@ -503,11 +503,11 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1637
|
||||
msgid "User {1} has no modules loaded."
|
||||
msgstr ""
|
||||
msgstr "O usuário {1} não possui módulos carregados."
|
||||
|
||||
#: controlpanel.cpp:1641
|
||||
msgid "Modules loaded for user {1}:"
|
||||
msgstr ""
|
||||
msgstr "Módulos carregados para o usuário {1}:"
|
||||
|
||||
#: controlpanel.cpp:1661
|
||||
msgid "Network {1} of user {2} has no modules loaded."
|
||||
@@ -523,7 +523,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1674
|
||||
msgid "Prints help for matching commands and variables"
|
||||
msgstr ""
|
||||
msgstr "Exibe ajuda para comandos e variáveis correspondentes"
|
||||
|
||||
#: controlpanel.cpp:1677
|
||||
msgid "<variable> [username]"
|
||||
@@ -579,11 +579,11 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1697
|
||||
msgid "Adds a new channel"
|
||||
msgstr ""
|
||||
msgstr "Adiciona um novo canal"
|
||||
|
||||
#: controlpanel.cpp:1700
|
||||
msgid "Deletes a channel"
|
||||
msgstr ""
|
||||
msgstr "Exclui um canal"
|
||||
|
||||
#: controlpanel.cpp:1702
|
||||
msgid "Lists users"
|
||||
@@ -591,23 +591,23 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1704
|
||||
msgid "<username> <password>"
|
||||
msgstr ""
|
||||
msgstr "<usuário> <senha>"
|
||||
|
||||
#: controlpanel.cpp:1705
|
||||
msgid "Adds a new user"
|
||||
msgstr ""
|
||||
msgstr "Cria um novo usuário"
|
||||
|
||||
#: controlpanel.cpp:1707 controlpanel.cpp:1730 controlpanel.cpp:1744
|
||||
msgid "<username>"
|
||||
msgstr ""
|
||||
msgstr "<usuário>"
|
||||
|
||||
#: controlpanel.cpp:1707
|
||||
msgid "Deletes a user"
|
||||
msgstr ""
|
||||
msgstr "Exclui um usuário"
|
||||
|
||||
#: controlpanel.cpp:1709
|
||||
msgid "<old username> <new username>"
|
||||
msgstr ""
|
||||
msgstr "<antigo nome> <novo nome>"
|
||||
|
||||
#: controlpanel.cpp:1710
|
||||
msgid "Clones a user"
|
||||
@@ -615,11 +615,11 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1712 controlpanel.cpp:1715
|
||||
msgid "<username> <network> <server>"
|
||||
msgstr ""
|
||||
msgstr "<usuário> <rede> <servidor>"
|
||||
|
||||
#: controlpanel.cpp:1713
|
||||
msgid "Adds a new IRC server for the given or current user"
|
||||
msgstr ""
|
||||
msgstr "Adiciona um novo servidor IRC para o usuário atual ou especificado"
|
||||
|
||||
#: controlpanel.cpp:1716
|
||||
msgid "Deletes an IRC server from the given or current user"
|
||||
@@ -643,7 +643,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1725
|
||||
msgid "Loads a Module for a user"
|
||||
msgstr ""
|
||||
msgstr "Carrega um módulo para um usuário"
|
||||
|
||||
#: controlpanel.cpp:1727
|
||||
msgid "<username> <modulename>"
|
||||
@@ -663,7 +663,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1735
|
||||
msgid "Loads a Module for a network"
|
||||
msgstr ""
|
||||
msgstr "Carrega um módulo para uma rede"
|
||||
|
||||
#: controlpanel.cpp:1738
|
||||
msgid "<username> <network> <modulename>"
|
||||
@@ -679,7 +679,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1745
|
||||
msgid "List the configured CTCP replies"
|
||||
msgstr ""
|
||||
msgstr "Lista as respostas CTCP configuradas"
|
||||
|
||||
#: controlpanel.cpp:1747
|
||||
msgid "<username> <ctcp> [reply]"
|
||||
@@ -703,7 +703,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1756
|
||||
msgid "Add a network for a user"
|
||||
msgstr ""
|
||||
msgstr "Adiciona uma rede para o usuário"
|
||||
|
||||
#: controlpanel.cpp:1759
|
||||
msgid "Delete a network for a user"
|
||||
@@ -715,7 +715,7 @@ msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1762
|
||||
msgid "List all networks for a user"
|
||||
msgstr ""
|
||||
msgstr "Lista todas as redes de um usuário"
|
||||
|
||||
#: controlpanel.cpp:1775
|
||||
msgid ""
|
||||
|
||||
@@ -0,0 +1,741 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: znc-bouncer\n"
|
||||
"X-Crowdin-Project-ID: 289533\n"
|
||||
"X-Crowdin-Language: tr\n"
|
||||
"X-Crowdin-File: /master/modules/po/controlpanel.pot\n"
|
||||
"X-Crowdin-File-ID: 166\n"
|
||||
"Project-Id-Version: znc-bouncer\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
|
||||
#: controlpanel.cpp:51 controlpanel.cpp:64
|
||||
msgctxt "helptable"
|
||||
msgid "Type"
|
||||
msgstr "Tip"
|
||||
|
||||
#: controlpanel.cpp:52 controlpanel.cpp:66
|
||||
msgctxt "helptable"
|
||||
msgid "Variables"
|
||||
msgstr "Değişkenler"
|
||||
|
||||
#: controlpanel.cpp:78
|
||||
msgid "String"
|
||||
msgstr "Dizi"
|
||||
|
||||
#: controlpanel.cpp:79
|
||||
msgid "Boolean (true/false)"
|
||||
msgstr "Boolean (doğru/yanlış)"
|
||||
|
||||
#: controlpanel.cpp:80
|
||||
msgid "Integer"
|
||||
msgstr "Tamsayı"
|
||||
|
||||
#: controlpanel.cpp:81
|
||||
msgid "Number"
|
||||
msgstr "Numara"
|
||||
|
||||
#: controlpanel.cpp:131
|
||||
msgid "The following variables are available when using the Set/Get commands:"
|
||||
msgstr "Set/Get komutlarını kullanırken aşağıdaki değişkenler kullanılabilir:"
|
||||
|
||||
#: controlpanel.cpp:155
|
||||
msgid ""
|
||||
"The following variables are available when using the SetNetwork/GetNetwork "
|
||||
"commands:"
|
||||
msgstr ""
|
||||
"SetNetwork/GetNetwork komutlarını kullanırken aşağıdaki değişkenler "
|
||||
"kullanılabilir:"
|
||||
|
||||
#: controlpanel.cpp:169
|
||||
msgid ""
|
||||
"The following variables are available when using the SetChan/GetChan "
|
||||
"commands:"
|
||||
msgstr ""
|
||||
"SetChan/GetChan komutlarını kullanırken aşağıdaki değişkenler kullanılabilir:"
|
||||
|
||||
#: controlpanel.cpp:176
|
||||
msgid ""
|
||||
"You can use $user as the user name and $network as the network name for "
|
||||
"modifying your own user and network."
|
||||
msgstr ""
|
||||
"Kendi kullanıcınızı ve ağınızı değiştirmek için kullanıcı adı olarak $user "
|
||||
"ve ağ adı olarak $network kullanabilirsiniz."
|
||||
|
||||
#: controlpanel.cpp:186 controlpanel.cpp:1047 controlpanel.cpp:1084
|
||||
msgid "Error: User [{1}] does not exist!"
|
||||
msgstr "Hata: [{1}] kullanıcısı mevcut değil!"
|
||||
|
||||
#: controlpanel.cpp:191
|
||||
msgid "Error: You need to have admin rights to modify other users!"
|
||||
msgstr ""
|
||||
"Hata: Diğer kullanıcıları değiştirmek için yönetici haklarına sahip olmanız "
|
||||
"gerekiyor!"
|
||||
|
||||
#: controlpanel.cpp:201
|
||||
msgid "Error: You cannot use $network to modify other users!"
|
||||
msgstr "Hata: Diğer kullanıcıları değiştirmek için $network'ü kullanamazsınız!"
|
||||
|
||||
#: controlpanel.cpp:209
|
||||
msgid "Error: User {1} does not have a network named [{2}]."
|
||||
msgstr "Hata: {1} kullanıcısının [{2}] adında bir ağı yok."
|
||||
|
||||
#: controlpanel.cpp:221
|
||||
msgid "Usage: Get <variable> [username]"
|
||||
msgstr "Kullanımı: Get <değişken> [kullanıcı_adı]"
|
||||
|
||||
#: controlpanel.cpp:321 controlpanel.cpp:576 controlpanel.cpp:651
|
||||
#: controlpanel.cpp:739 controlpanel.cpp:874 controlpanel.cpp:959
|
||||
msgid "Error: Unknown variable"
|
||||
msgstr "Hata: Bilinmeyen değişken"
|
||||
|
||||
#: controlpanel.cpp:330
|
||||
msgid "Usage: Set <variable> <username> <value>"
|
||||
msgstr "Kullanımı: Set <değişken> <kullanıcı_adı> <değer>"
|
||||
|
||||
#: controlpanel.cpp:348 controlpanel.cpp:355 controlpanel.cpp:367
|
||||
#: controlpanel.cpp:379 controlpanel.cpp:387 controlpanel.cpp:395
|
||||
#: controlpanel.cpp:403 controlpanel.cpp:411 controlpanel.cpp:419
|
||||
#: controlpanel.cpp:427 controlpanel.cpp:437 controlpanel.cpp:494
|
||||
#: controlpanel.cpp:513 controlpanel.cpp:529 controlpanel.cpp:539
|
||||
#: controlpanel.cpp:688 controlpanel.cpp:695 controlpanel.cpp:707
|
||||
#: controlpanel.cpp:728 controlpanel.cpp:1126 controlpanel.cpp:1176
|
||||
#: controlpanel.cpp:1259 controlpanel.cpp:1295 controlpanel.cpp:1428
|
||||
#: controlpanel.cpp:1455
|
||||
msgid "Access denied!"
|
||||
msgstr "Erişim reddedildi!"
|
||||
|
||||
#: controlpanel.cpp:360 controlpanel.cpp:700
|
||||
msgid "This bind host is already set!"
|
||||
msgstr "This bind host is already set!"
|
||||
|
||||
#: controlpanel.cpp:445 controlpanel.cpp:454 controlpanel.cpp:923
|
||||
msgid "Setting failed, limit for buffer size is {1}"
|
||||
msgstr "Ayar başarısız oldu, arabellek boyutu sınırı: {1}"
|
||||
|
||||
#: controlpanel.cpp:474
|
||||
msgid "Password has been changed!"
|
||||
msgstr "Şifre değiştirildi!"
|
||||
|
||||
#: controlpanel.cpp:482
|
||||
msgid "Timeout can't be less than 30 seconds!"
|
||||
msgstr "Zaman aşımı 30 saniyeden az olamaz!"
|
||||
|
||||
#: controlpanel.cpp:546
|
||||
msgid "That would be a bad idea!"
|
||||
msgstr "Bu kötü bir fikir olurdu!"
|
||||
|
||||
#: controlpanel.cpp:564
|
||||
msgid "Supported languages: {1}"
|
||||
msgstr "Desteklenen diller: {1}"
|
||||
|
||||
#: controlpanel.cpp:588
|
||||
msgid "Usage: GetNetwork <variable> [username] [network]"
|
||||
msgstr "Kullanımı: GetNetwork <değişken> [kullanıcı_adı] [ağ]"
|
||||
|
||||
#: controlpanel.cpp:607
|
||||
msgid "Error: A network must be specified to get another users settings."
|
||||
msgstr ""
|
||||
"Hata: Başka bir kullanıcının ayarlarını alabilmek için bir ağ "
|
||||
"belirtilmelidir."
|
||||
|
||||
#: controlpanel.cpp:613
|
||||
msgid "You are not currently attached to a network."
|
||||
msgstr ""
|
||||
"Hata: Başka bir kullanıcının ayarlarını alabilmek için bir ağ "
|
||||
"belirtilmelidir."
|
||||
|
||||
#: controlpanel.cpp:619
|
||||
msgid "Error: Invalid network."
|
||||
msgstr "Hata: Geçersiz ağ."
|
||||
|
||||
#: controlpanel.cpp:663
|
||||
msgid "Usage: SetNetwork <variable> <username> <network> <value>"
|
||||
msgstr "Kullanımı: SetNetwork <değişken> <kullanıcı_adı> <ağ> <değer>"
|
||||
|
||||
#: controlpanel.cpp:749
|
||||
msgid "Usage: AddChan <username> <network> <channel>"
|
||||
msgstr "Kullanımı: AddChan <kullanıcı_adı><ağ> <kanal>"
|
||||
|
||||
#: controlpanel.cpp:762
|
||||
msgid "Error: User {1} already has a channel named {2}."
|
||||
msgstr "Hata: {1} kullanıcısının zaten {2} adında bir kanalı var."
|
||||
|
||||
#: controlpanel.cpp:769
|
||||
msgid "Channel {1} for user {2} added to network {3}."
|
||||
msgstr "{2} kullanıcısı için {1} kanalı, {3} ağına eklendi."
|
||||
|
||||
#: controlpanel.cpp:773
|
||||
msgid ""
|
||||
"Could not add channel {1} for user {2} to network {3}, does it already exist?"
|
||||
msgstr ""
|
||||
"{2} kullanıcısı için {1} kanalı {3} ağına eklenemedi, zaten mevcut olabilir "
|
||||
"mi?"
|
||||
|
||||
#: controlpanel.cpp:783
|
||||
msgid "Usage: DelChan <username> <network> <channel>"
|
||||
msgstr "Kullanımı: DelChan <kullanıcı_adı><ağ><kanal>"
|
||||
|
||||
#: controlpanel.cpp:798
|
||||
msgid "Error: User {1} does not have any channel matching [{2}] in network {3}"
|
||||
msgstr ""
|
||||
"Hata: {1} kullanıcısının, {3} ağında [{2}] ile eşleşen herhangi bir kanalı "
|
||||
"yok"
|
||||
|
||||
#: controlpanel.cpp:811
|
||||
msgid "Channel {1} is deleted from network {2} of user {3}"
|
||||
msgid_plural "Channels {1} are deleted from network {2} of user {3}"
|
||||
msgstr[0] "{1} kanalı, {3} kullanıcısının {2} ağından silindi"
|
||||
msgstr[1] "{1} kanalları, {3} kullanıcısının {2} ağından silindi"
|
||||
|
||||
#: controlpanel.cpp:826
|
||||
msgid "Usage: GetChan <variable> <username> <network> <chan>"
|
||||
msgstr "Kullanımı: GetChan <değişken> <kullanıcı_adı> <ağ> <kanal>"
|
||||
|
||||
#: controlpanel.cpp:840 controlpanel.cpp:904
|
||||
msgid "Error: No channels matching [{1}] found."
|
||||
msgstr "Hata: [{1}] ile eşleşen kanal bulunamadı."
|
||||
|
||||
#: controlpanel.cpp:889
|
||||
msgid "Usage: SetChan <variable> <username> <network> <chan> <value>"
|
||||
msgstr "Kullanımı: SetChan <değişken> <kullanıcı_adı> <ağ> <kanal> <değer>"
|
||||
|
||||
#: controlpanel.cpp:970 controlpanel.cpp:980
|
||||
msgctxt "listusers"
|
||||
msgid "Username"
|
||||
msgstr "Kullanıcı Adı"
|
||||
|
||||
#: controlpanel.cpp:971 controlpanel.cpp:981
|
||||
msgctxt "listusers"
|
||||
msgid "Realname"
|
||||
msgstr "Gerçek Adı"
|
||||
|
||||
#: controlpanel.cpp:972 controlpanel.cpp:984 controlpanel.cpp:986
|
||||
msgctxt "listusers"
|
||||
msgid "IsAdmin"
|
||||
msgstr "Admin mi"
|
||||
|
||||
#: controlpanel.cpp:973 controlpanel.cpp:987
|
||||
msgctxt "listusers"
|
||||
msgid "Nick"
|
||||
msgstr "Nick"
|
||||
|
||||
#: controlpanel.cpp:974 controlpanel.cpp:988
|
||||
msgctxt "listusers"
|
||||
msgid "AltNick"
|
||||
msgstr "Alt(ernatif)Nick"
|
||||
|
||||
#: controlpanel.cpp:975 controlpanel.cpp:989
|
||||
msgctxt "listusers"
|
||||
msgid "Ident"
|
||||
msgstr "Ident"
|
||||
|
||||
#: controlpanel.cpp:976 controlpanel.cpp:990
|
||||
msgctxt "listusers"
|
||||
msgid "BindHost"
|
||||
msgstr "BindHost"
|
||||
|
||||
#: controlpanel.cpp:984 controlpanel.cpp:1234
|
||||
msgid "No"
|
||||
msgstr "Hayır"
|
||||
|
||||
#: controlpanel.cpp:986 controlpanel.cpp:1226
|
||||
msgid "Yes"
|
||||
msgstr "Evet"
|
||||
|
||||
#: controlpanel.cpp:1000 controlpanel.cpp:1069
|
||||
msgid "Error: You need to have admin rights to add new users!"
|
||||
msgstr ""
|
||||
"Hata: Yeni kullanıcılar eklemek için yönetici haklarına sahip olmanız "
|
||||
"gerekiyor!"
|
||||
|
||||
#: controlpanel.cpp:1006
|
||||
msgid "Usage: AddUser <username> <password>"
|
||||
msgstr "Kullanımı: AddUser <kullanıcı_adı> <şifre>"
|
||||
|
||||
#: controlpanel.cpp:1011
|
||||
msgid "Error: User {1} already exists!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1023 controlpanel.cpp:1098
|
||||
msgid "Error: User not added: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1027 controlpanel.cpp:1102
|
||||
msgid "User {1} added!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1034
|
||||
msgid "Error: You need to have admin rights to delete users!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1040
|
||||
msgid "Usage: DelUser <username>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1052
|
||||
msgid "Error: You can't delete yourself!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1058
|
||||
msgid "Error: Internal error!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1062
|
||||
msgid "User {1} deleted!"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1077
|
||||
msgid "Usage: CloneUser <old username> <new username>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1092
|
||||
msgid "Error: Cloning failed: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1121
|
||||
msgid "Usage: AddNetwork [user] network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1132
|
||||
msgid ""
|
||||
"Network number limit reached. Ask an admin to increase the limit for you, or "
|
||||
"delete unneeded networks using /znc DelNetwork <name>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1140
|
||||
msgid "Error: User {1} already has a network with the name {2}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1147
|
||||
msgid "Network {1} added to user {2}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1151
|
||||
msgid "Error: Network [{1}] could not be added for user {2}: {3}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1171
|
||||
msgid "Usage: DelNetwork [user] network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1187
|
||||
msgid "The currently active network can be deleted via {1}status"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1193
|
||||
msgid "Network {1} deleted for user {2}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1197
|
||||
msgid "Error: Network {1} could not be deleted for user {2}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1216 controlpanel.cpp:1224
|
||||
msgctxt "listnetworks"
|
||||
msgid "Network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1217 controlpanel.cpp:1226 controlpanel.cpp:1234
|
||||
msgctxt "listnetworks"
|
||||
msgid "OnIRC"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1218 controlpanel.cpp:1227
|
||||
msgctxt "listnetworks"
|
||||
msgid "IRC Server"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1219 controlpanel.cpp:1229
|
||||
msgctxt "listnetworks"
|
||||
msgid "IRC User"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1220 controlpanel.cpp:1231
|
||||
msgctxt "listnetworks"
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1239
|
||||
msgid "No networks"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1250
|
||||
msgid "Usage: AddServer <username> <network> <server> [[+]port] [password]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1269
|
||||
msgid "Added IRC Server {1} to network {2} for user {3}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1273
|
||||
msgid "Error: Could not add IRC server {1} to network {2} for user {3}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1286
|
||||
msgid "Usage: DelServer <username> <network> <server> [[+]port] [password]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1306
|
||||
msgid "Deleted IRC Server {1} from network {2} for user {3}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1310
|
||||
msgid "Error: Could not delete IRC server {1} from network {2} for user {3}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1320
|
||||
msgid "Usage: Reconnect <username> <network>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1347
|
||||
msgid "Queued network {1} of user {2} for a reconnect."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1356
|
||||
msgid "Usage: Disconnect <username> <network>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1371
|
||||
msgid "Closed IRC connection for network {1} of user {2}."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1386 controlpanel.cpp:1391
|
||||
msgctxt "listctcp"
|
||||
msgid "Request"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1387 controlpanel.cpp:1392
|
||||
msgctxt "listctcp"
|
||||
msgid "Reply"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1396
|
||||
msgid "No CTCP replies for user {1} are configured"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1399
|
||||
msgid "CTCP replies for user {1}:"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1415
|
||||
msgid "Usage: AddCTCP [user] [request] [reply]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1417
|
||||
msgid ""
|
||||
"This will cause ZNC to reply to the CTCP instead of forwarding it to clients."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1420
|
||||
msgid "An empty reply will cause the CTCP request to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1434
|
||||
msgid "CTCP requests {1} to user {2} will now be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1438
|
||||
msgid "CTCP requests {1} to user {2} will now get reply: {3}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1460
|
||||
msgid "Usage: DelCTCP [user] [request]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1466
|
||||
msgid "CTCP requests {1} to user {2} will now be sent to IRC clients"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1470
|
||||
msgid ""
|
||||
"CTCP requests {1} to user {2} will be sent to IRC clients (nothing has "
|
||||
"changed)"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1480 controlpanel.cpp:1554
|
||||
msgid "Loading modules has been disabled."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1489
|
||||
msgid "Error: Unable to load module {1}: {2}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1492
|
||||
msgid "Loaded module {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1497
|
||||
msgid "Error: Unable to reload module {1}: {2}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1500
|
||||
msgid "Reloaded module {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1504
|
||||
msgid "Error: Unable to load module {1} because it is already loaded"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1515
|
||||
msgid "Usage: LoadModule <username> <modulename> [args]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1534
|
||||
msgid "Usage: LoadNetModule <username> <network> <modulename> [args]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1559
|
||||
msgid "Please use /znc unloadmod {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1565
|
||||
msgid "Error: Unable to unload module {1}: {2}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1568
|
||||
msgid "Unloaded module {1}"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1577
|
||||
msgid "Usage: UnloadModule <username> <modulename>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1594
|
||||
msgid "Usage: UnloadNetModule <username> <network> <modulename>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1611 controlpanel.cpp:1617
|
||||
msgctxt "listmodules"
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1612 controlpanel.cpp:1618
|
||||
msgctxt "listmodules"
|
||||
msgid "Arguments"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1637
|
||||
msgid "User {1} has no modules loaded."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1641
|
||||
msgid "Modules loaded for user {1}:"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1661
|
||||
msgid "Network {1} of user {2} has no modules loaded."
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1666
|
||||
msgid "Modules loaded for network {1} of user {2}:"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1673
|
||||
msgid "[command] [variable]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1674
|
||||
msgid "Prints help for matching commands and variables"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1677
|
||||
msgid "<variable> [username]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1678
|
||||
msgid "Prints the variable's value for the given or current user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1680
|
||||
msgid "<variable> <username> <value>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1681
|
||||
msgid "Sets the variable's value for the given user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1683
|
||||
msgid "<variable> [username] [network]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1684
|
||||
msgid "Prints the variable's value for the given network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1686
|
||||
msgid "<variable> <username> <network> <value>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1687
|
||||
msgid "Sets the variable's value for the given network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1689
|
||||
msgid "<variable> [username] <network> <chan>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1690
|
||||
msgid "Prints the variable's value for the given channel"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1693
|
||||
msgid "<variable> <username> <network> <chan> <value>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1694
|
||||
msgid "Sets the variable's value for the given channel"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1696 controlpanel.cpp:1699
|
||||
msgid "<username> <network> <chan>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1697
|
||||
msgid "Adds a new channel"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1700
|
||||
msgid "Deletes a channel"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1702
|
||||
msgid "Lists users"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1704
|
||||
msgid "<username> <password>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1705
|
||||
msgid "Adds a new user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1707 controlpanel.cpp:1730 controlpanel.cpp:1744
|
||||
msgid "<username>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1707
|
||||
msgid "Deletes a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1709
|
||||
msgid "<old username> <new username>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1710
|
||||
msgid "Clones a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1712 controlpanel.cpp:1715
|
||||
msgid "<username> <network> <server>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1713
|
||||
msgid "Adds a new IRC server for the given or current user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1716
|
||||
msgid "Deletes an IRC server from the given or current user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1718 controlpanel.cpp:1721 controlpanel.cpp:1741
|
||||
msgid "<username> <network>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1719
|
||||
msgid "Cycles the user's IRC server connection"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1722
|
||||
msgid "Disconnects the user from their IRC server"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1724
|
||||
msgid "<username> <modulename> [args]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1725
|
||||
msgid "Loads a Module for a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1727
|
||||
msgid "<username> <modulename>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1728
|
||||
msgid "Removes a Module of a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1731
|
||||
msgid "Get the list of modules for a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1734
|
||||
msgid "<username> <network> <modulename> [args]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1735
|
||||
msgid "Loads a Module for a network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1738
|
||||
msgid "<username> <network> <modulename>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1739
|
||||
msgid "Removes a Module of a network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1742
|
||||
msgid "Get the list of modules for a network"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1745
|
||||
msgid "List the configured CTCP replies"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1747
|
||||
msgid "<username> <ctcp> [reply]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1748
|
||||
msgid "Configure a new CTCP reply"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1750
|
||||
msgid "<username> <ctcp>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1751
|
||||
msgid "Remove a CTCP reply"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1755 controlpanel.cpp:1758
|
||||
msgid "[username] <network>"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1756
|
||||
msgid "Add a network for a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1759
|
||||
msgid "Delete a network for a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1761
|
||||
msgid "[username]"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1762
|
||||
msgid "List all networks for a user"
|
||||
msgstr ""
|
||||
|
||||
#: controlpanel.cpp:1775
|
||||
msgid ""
|
||||
"Dynamic configuration through IRC. Allows editing only yourself if you're "
|
||||
"not ZNC admin."
|
||||
msgstr ""
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user