mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-02 15:27:09 +01:00
merge from 2.1.11 and resolve conflicts
This commit is contained in:
commit
7f1e9d3972
@ -281,14 +281,14 @@ build_additional_translators(List) ->
|
|||||||
List).
|
List).
|
||||||
|
|
||||||
print_translation(File, Line, Str, StrT) ->
|
print_translation(File, Line, Str, StrT) ->
|
||||||
{ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""),
|
StrQ = ejabberd_regexp:greplace(Str, "\\\"", "\\\\\""),
|
||||||
{ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""),
|
StrTQ = ejabberd_regexp:greplace(StrT, "\\\"", "\\\\\""),
|
||||||
io:format("#: ~s:~p~nmsgid \"~s\"~nmsgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
|
io:format("#: ~s:~p~nmsgid \"~s\"~nmsgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
|
||||||
|
|
||||||
print_translation_obsolete(Str, StrT) ->
|
print_translation_obsolete(Str, StrT) ->
|
||||||
File = "unknown.erl",
|
File = "unknown.erl",
|
||||||
Line = 1,
|
Line = 1,
|
||||||
{ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""),
|
StrQ = ejabberd_regexp:greplace(Str, "\\\"", "\\\\\""),
|
||||||
{ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""),
|
StrTQ = ejabberd_regexp:greplace(StrT, "\\\"", "\\\\\""),
|
||||||
io:format("#: ~s:~p~n#~~ msgid \"~s\"~n#~~ msgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
|
io:format("#: ~s:~p~n#~~ msgid \"~s\"~n#~~ msgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]).
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<TITLE>Ejabberd 2.1.x Developers Guide
|
<TITLE>Ejabberd 2.1.11 Developers Guide
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
@ -49,7 +49,7 @@ TD P{margin:0px;}
|
|||||||
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic dev.tex -->
|
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic dev.tex -->
|
||||||
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
|
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
|
||||||
|
|
||||||
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 2.1.x Developers Guide</H1><H3 CLASS="titlerest">Alexey Shchepin<BR>
|
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 2.1.11 Developers Guide</H1><H3 CLASS="titlerest">Alexey Shchepin<BR>
|
||||||
<A HREF="mailto:alexey@sevcom.net"><TT>mailto:alexey@sevcom.net</TT></A><BR>
|
<A HREF="mailto:alexey@sevcom.net"><TT>mailto:alexey@sevcom.net</TT></A><BR>
|
||||||
<A HREF="xmpp:aleksey@jabber.ru"><TT>xmpp:aleksey@jabber.ru</TT></A></H3></TD></TR>
|
<A HREF="xmpp:aleksey@jabber.ru"><TT>xmpp:aleksey@jabber.ru</TT></A></H3></TD></TR>
|
||||||
</TABLE><DIV CLASS="center">
|
</TABLE><DIV CLASS="center">
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||||
<HTML>
|
<HTML>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<TITLE>Ejabberd 2.1.x Feature Sheet
|
<TITLE>Ejabberd 2.1.11 Feature Sheet
|
||||||
</TITLE>
|
</TITLE>
|
||||||
|
|
||||||
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
<META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
||||||
@ -50,7 +50,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}
|
|||||||
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic features.tex -->
|
<!--HEVEA command line is: /usr/bin/hevea -fix -pedantic features.tex -->
|
||||||
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
|
<!--CUT DEF section 1 --><P><A NAME="titlepage"></A>
|
||||||
|
|
||||||
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 2.1.x Feature Sheet</H1><H3 CLASS="titlerest">Sander Devrieze<BR>
|
</P><TABLE CLASS="title"><TR><TD><H1 CLASS="titlemain">Ejabberd 2.1.11 Feature Sheet</H1><H3 CLASS="titlerest">Sander Devrieze<BR>
|
||||||
<A HREF="mailto:s.devrieze@pandora.be"><TT>mailto:s.devrieze@pandora.be</TT></A><BR>
|
<A HREF="mailto:s.devrieze@pandora.be"><TT>mailto:s.devrieze@pandora.be</TT></A><BR>
|
||||||
<A HREF="xmpp:sander@devrieze.dyndns.org"><TT>xmpp:sander@devrieze.dyndns.org</TT></A></H3></TD></TR>
|
<A HREF="xmpp:sander@devrieze.dyndns.org"><TT>xmpp:sander@devrieze.dyndns.org</TT></A></H3></TD></TR>
|
||||||
</TABLE><DIV CLASS="center">
|
</TABLE><DIV CLASS="center">
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ejabberd 2.1.x
|
ejabberd 2.1.11
|
||||||
|
|
||||||
Installation and Operation Guide
|
Installation and Operation Guide
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}
|
|||||||
<HR SIZE=2><BR>
|
<HR SIZE=2><BR>
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<TABLE CELLSPACING=6 CELLPADDING=0><TR><TD ALIGN=right NOWRAP> <FONT SIZE=6><B>ejabberd 2.1.x </B></FONT></TD></TR>
|
<TABLE CELLSPACING=6 CELLPADDING=0><TR><TD ALIGN=right NOWRAP> <FONT SIZE=6><B>ejabberd 2.1.11 </B></FONT></TD></TR>
|
||||||
<TR><TD ALIGN=right NOWRAP> </TD></TR>
|
<TR><TD ALIGN=right NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=right NOWRAP> <FONT SIZE=6>Installation and Operation Guide</FONT></TD></TR>
|
<TR><TD ALIGN=right NOWRAP> <FONT SIZE=6>Installation and Operation Guide</FONT></TD></TR>
|
||||||
</TABLE><BR>
|
</TABLE><BR>
|
||||||
@ -109,7 +109,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}
|
|||||||
</LI><LI CLASS="li-toc"><A HREF="#htoc15">2.4.7  Specific Notes for Sun Solaris</A>
|
</LI><LI CLASS="li-toc"><A HREF="#htoc15">2.4.7  Specific Notes for Sun Solaris</A>
|
||||||
</LI><LI CLASS="li-toc"><A HREF="#htoc16">2.4.8  Specific Notes for Microsoft Windows</A>
|
</LI><LI CLASS="li-toc"><A HREF="#htoc16">2.4.8  Specific Notes for Microsoft Windows</A>
|
||||||
</LI></UL>
|
</LI></UL>
|
||||||
</LI><LI CLASS="li-toc"><A HREF="#htoc17">2.5  Create a XMPP Account for Administration</A>
|
</LI><LI CLASS="li-toc"><A HREF="#htoc17">2.5  Create an XMPP Account for Administration</A>
|
||||||
</LI><LI CLASS="li-toc"><A HREF="#htoc18">2.6  Upgrading <TT>ejabberd</TT></A>
|
</LI><LI CLASS="li-toc"><A HREF="#htoc18">2.6  Upgrading <TT>ejabberd</TT></A>
|
||||||
</LI></UL>
|
</LI></UL>
|
||||||
</LI><LI CLASS="li-toc"><A HREF="#htoc19">Chapter 3  Configuring <TT>ejabberd</TT></A>
|
</LI><LI CLASS="li-toc"><A HREF="#htoc19">Chapter 3  Configuring <TT>ejabberd</TT></A>
|
||||||
@ -348,7 +348,7 @@ as long as your system have all the dependencies.</P><P> <A NAME="installreq"></
|
|||||||
GNU Make
|
GNU Make
|
||||||
</LI><LI CLASS="li-itemize">GCC
|
</LI><LI CLASS="li-itemize">GCC
|
||||||
</LI><LI CLASS="li-itemize">Libexpat 1.95 or higher
|
</LI><LI CLASS="li-itemize">Libexpat 1.95 or higher
|
||||||
</LI><LI CLASS="li-itemize">Erlang/OTP R10B-9 or higher. The recommended versions are R12B-5 and R13B04.
|
</LI><LI CLASS="li-itemize">Erlang/OTP R10B-9 or higher. The recommended versions are R13B04 and R14B04.
|
||||||
Don’t use R14A or R14B because <A HREF="http://www.erlang.org/cgi-bin/ezmlm-cgi/4/54598">they have a bug</A>.
|
Don’t use R14A or R14B because <A HREF="http://www.erlang.org/cgi-bin/ezmlm-cgi/4/54598">they have a bug</A>.
|
||||||
</LI><LI CLASS="li-itemize">OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption.
|
</LI><LI CLASS="li-itemize">OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption.
|
||||||
</LI><LI CLASS="li-itemize">Zlib 1.2.3 or higher, for Stream Compression support (<A HREF="http://xmpp.org/extensions/xep-0138.html">XEP-0138</A>). Optional.
|
</LI><LI CLASS="li-itemize">Zlib 1.2.3 or higher, for Stream Compression support (<A HREF="http://xmpp.org/extensions/xep-0138.html">XEP-0138</A>). Optional.
|
||||||
@ -513,16 +513,16 @@ variable.
|
|||||||
nmake -f Makefile.win32
|
nmake -f Makefile.win32
|
||||||
</PRE></LI><LI CLASS="li-enumerate">Edit the file <CODE>ejabberd\src\ejabberd.cfg</CODE> and run
|
</PRE></LI><LI CLASS="li-enumerate">Edit the file <CODE>ejabberd\src\ejabberd.cfg</CODE> and run
|
||||||
<PRE CLASS="verbatim">werl -s ejabberd -name ejabberd
|
<PRE CLASS="verbatim">werl -s ejabberd -name ejabberd
|
||||||
</PRE></LI></OL><P> <A NAME="initialadmin"></A> </P><!--TOC section Create a XMPP Account for Administration-->
|
</PRE></LI></OL><P> <A NAME="initialadmin"></A> </P><!--TOC section Create an XMPP Account for Administration-->
|
||||||
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc17">2.5</A>  <A HREF="#initialadmin">Create a XMPP Account for Administration</A></H2><!--SEC END --><P> <A NAME="initialadmin"></A> </P><P>You need a XMPP account and grant him administrative privileges
|
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc17">2.5</A>  <A HREF="#initialadmin">Create an XMPP Account for Administration</A></H2><!--SEC END --><P> <A NAME="initialadmin"></A> </P><P>You need an XMPP account and grant him administrative privileges
|
||||||
to enter the <TT>ejabberd</TT> Web Admin:
|
to enter the <TT>ejabberd</TT> Web Admin:
|
||||||
</P><OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
|
</P><OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
|
||||||
Register a XMPP account on your <TT>ejabberd</TT> server, for example <TT>admin1@example.org</TT>.
|
Register an XMPP account on your <TT>ejabberd</TT> server, for example <TT>admin1@example.org</TT>.
|
||||||
There are two ways to register a XMPP account:
|
There are two ways to register an XMPP account:
|
||||||
<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
|
<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
|
||||||
Using <TT>ejabberdctl</TT> (see section <A HREF="#ejabberdctl">4.1</A>):
|
Using <TT>ejabberdctl</TT> (see section <A HREF="#ejabberdctl">4.1</A>):
|
||||||
<PRE CLASS="verbatim">ejabberdctl register admin1 example.org FgT5bk3
|
<PRE CLASS="verbatim">ejabberdctl register admin1 example.org FgT5bk3
|
||||||
</PRE></LI><LI CLASS="li-enumerate">Using a XMPP client and In-Band Registration (see section <A HREF="#modregister">3.3.19</A>).
|
</PRE></LI><LI CLASS="li-enumerate">Using an XMPP client and In-Band Registration (see section <A HREF="#modregister">3.3.19</A>).
|
||||||
</LI></OL>
|
</LI></OL>
|
||||||
</LI><LI CLASS="li-enumerate">Edit the <TT>ejabberd</TT> configuration file to give administration rights to the XMPP account you created:
|
</LI><LI CLASS="li-enumerate">Edit the <TT>ejabberd</TT> configuration file to give administration rights to the XMPP account you created:
|
||||||
<PRE CLASS="verbatim">{acl, admin, {user, "admin1", "example.org"}}.
|
<PRE CLASS="verbatim">{acl, admin, {user, "admin1", "example.org"}}.
|
||||||
@ -695,7 +695,7 @@ Handles STUN Binding requests as defined in
|
|||||||
Options: <TT>certfile</TT>
|
Options: <TT>certfile</TT>
|
||||||
</DD><DT CLASS="dt-description"><B><TT>ejabberd_http</TT></B></DT><DD CLASS="dd-description">
|
</DD><DT CLASS="dt-description"><B><TT>ejabberd_http</TT></B></DT><DD CLASS="dd-description">
|
||||||
Handles incoming HTTP connections.<BR>
|
Handles incoming HTTP connections.<BR>
|
||||||
Options: <TT>captcha</TT>, <TT>certfile</TT>, <TT>http_bind</TT>, <TT>http_poll</TT>,
|
Options: <TT>captcha</TT>, <TT>certfile</TT>, <TT>default_host</TT>, <TT>http_bind</TT>, <TT>http_poll</TT>,
|
||||||
<TT>request_handlers</TT>, <TT>tls</TT>, <TT>trusted_proxies</TT>, <TT>web_admin</TT><BR>
|
<TT>request_handlers</TT>, <TT>tls</TT>, <TT>trusted_proxies</TT>, <TT>web_admin</TT><BR>
|
||||||
</DD></DL><P> <A NAME="listened-options"></A> </P><!--TOC subsubsection Options-->
|
</DD></DL><P> <A NAME="listened-options"></A> </P><!--TOC subsubsection Options-->
|
||||||
<H4 CLASS="subsubsection"><!--SEC ANCHOR --><A HREF="#listened-options">Options</A></H4><!--SEC END --><P> <A NAME="listened-options"></A> </P><P>This is a detailed description of each option allowed by the listening modules:
|
<H4 CLASS="subsubsection"><!--SEC ANCHOR --><A HREF="#listened-options">Options</A></H4><!--SEC END --><P> <A NAME="listened-options"></A> </P><P>This is a detailed description of each option allowed by the listening modules:
|
||||||
@ -712,6 +712,11 @@ immediately). Default value is 5.
|
|||||||
Simple web page that allows a user to fill a CAPTCHA challenge (see section <A HREF="#captcha">3.1.8</A>).
|
Simple web page that allows a user to fill a CAPTCHA challenge (see section <A HREF="#captcha">3.1.8</A>).
|
||||||
</DD><DT CLASS="dt-description"><B><TT>{certfile, Path}</TT></B></DT><DD CLASS="dd-description"> Full path to a file containing the default SSL certificate.
|
</DD><DT CLASS="dt-description"><B><TT>{certfile, Path}</TT></B></DT><DD CLASS="dd-description"> Full path to a file containing the default SSL certificate.
|
||||||
To define a certificate file specific for a given domain, use the global option <TT>domain_certfile</TT>.
|
To define a certificate file specific for a given domain, use the global option <TT>domain_certfile</TT>.
|
||||||
|
</DD><DT CLASS="dt-description"><B><TT>{default_host, undefined|HostName}</TT></B></DT><DD CLASS="dd-description">
|
||||||
|
If the HTTP request received by ejabberd contains the HTTP header <TT>Host</TT>
|
||||||
|
with an ambiguous virtual host that doesn’t match any one defined in ejabberd (see <A HREF="#hostnames">3.1.1</A>),
|
||||||
|
then this configured HostName is set as the request Host.
|
||||||
|
The default value of this option is: <TT>undefined</TT>.
|
||||||
</DD><DT CLASS="dt-description"><B><TT>{hosts, [Hostname, ...], [HostOption, ...]}</TT></B></DT><DD CLASS="dd-description">
|
</DD><DT CLASS="dt-description"><B><TT>{hosts, [Hostname, ...], [HostOption, ...]}</TT></B></DT><DD CLASS="dd-description">
|
||||||
The external Jabber component that connects to this <TT>ejabberd_service</TT>
|
The external Jabber component that connects to this <TT>ejabberd_service</TT>
|
||||||
can serve one or more hostnames.
|
can serve one or more hostnames.
|
||||||
@ -1059,7 +1064,11 @@ The possible values match exactly the three possibilities described in
|
|||||||
<A HREF="http://tools.ietf.org/html/rfc6120#section-7.7.2.2">XMPP Core: section 7.7.2.2</A>.
|
<A HREF="http://tools.ietf.org/html/rfc6120#section-7.7.2.2">XMPP Core: section 7.7.2.2</A>.
|
||||||
The default value is <TT>closeold</TT>.
|
The default value is <TT>closeold</TT>.
|
||||||
If the client uses old Jabber Non-SASL authentication (<A HREF="http://xmpp.org/extensions/xep-0078.html">XEP-0078</A>),
|
If the client uses old Jabber Non-SASL authentication (<A HREF="http://xmpp.org/extensions/xep-0078.html">XEP-0078</A>),
|
||||||
then this option is not respected, and the action performed is <TT>closeold</TT>.</P><P> <A NAME="internalauth"></A> </P><!--TOC subsubsection Internal-->
|
then this option is not respected, and the action performed is <TT>closeold</TT>.</P><P>The option <TT>fqdn</TT> allows you to define the Fully Qualified Domain Name
|
||||||
|
of the machine, in case it isn’t detected automatically.
|
||||||
|
The FQDN is used to authenticate some clients that use the DIGEST-MD5 SASL mechanism.
|
||||||
|
The option syntax is:
|
||||||
|
</P><DL CLASS="description"><DT CLASS="dt-description"><B><TT>{fqdn, undefined|FqdnString}.</TT></B></DT></DL><P> <A NAME="internalauth"></A> </P><!--TOC subsubsection Internal-->
|
||||||
<H4 CLASS="subsubsection"><!--SEC ANCHOR --><A HREF="#internalauth">Internal</A></H4><!--SEC END --><P> <A NAME="internalauth"></A>
|
<H4 CLASS="subsubsection"><!--SEC ANCHOR --><A HREF="#internalauth">Internal</A></H4><!--SEC END --><P> <A NAME="internalauth"></A>
|
||||||
</P><P><TT>ejabberd</TT> uses its internal Mnesia database as the default authentication method.
|
</P><P><TT>ejabberd</TT> uses its internal Mnesia database as the default authentication method.
|
||||||
The value <TT>internal</TT> will enable the internal authentication method.</P><P>The option <TT>{auth_password_format, plain|scram}</TT>
|
The value <TT>internal</TT> will enable the internal authentication method.</P><P>The option <TT>{auth_password_format, plain|scram}</TT>
|
||||||
@ -1340,7 +1349,7 @@ using ImageMagick’s Convert program.</P><P>The configurable options are:
|
|||||||
</P><DL CLASS="description"><DT CLASS="dt-description">
|
</P><DL CLASS="description"><DT CLASS="dt-description">
|
||||||
<B><TT>{captcha_cmd, Path}</TT></B></DT><DD CLASS="dd-description">
|
<B><TT>{captcha_cmd, Path}</TT></B></DT><DD CLASS="dd-description">
|
||||||
Full path to a script that generates the image.
|
Full path to a script that generates the image.
|
||||||
The default value is an empty string: <TT>""</TT>
|
The default value disables the feature: <TT>undefined</TT>
|
||||||
</DD><DT CLASS="dt-description"><B><TT>{captcha_host, ProtocolHostPort}</TT></B></DT><DD CLASS="dd-description">
|
</DD><DT CLASS="dt-description"><B><TT>{captcha_host, ProtocolHostPort}</TT></B></DT><DD CLASS="dd-description">
|
||||||
ProtocolHostPort is a string with the host, and optionally the Protocol and Port number.
|
ProtocolHostPort is a string with the host, and optionally the Protocol and Port number.
|
||||||
It must identify where ejabberd listens for CAPTCHA requests.
|
It must identify where ejabberd listens for CAPTCHA requests.
|
||||||
@ -1950,7 +1959,10 @@ all entries end with a comma:
|
|||||||
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1><TR><TD ALIGN=left NOWRAP><B>Module</B></TD><TD ALIGN=left NOWRAP><B>Feature</B></TD><TD ALIGN=left NOWRAP><B>Dependencies</B></TD></TR>
|
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=1><TR><TD ALIGN=left NOWRAP><B>Module</B></TD><TD ALIGN=left NOWRAP><B>Feature</B></TD><TD ALIGN=left NOWRAP><B>Dependencies</B></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><TT>mod_adhoc</TT></TD><TD ALIGN=left NOWRAP>Ad-Hoc Commands (<A HREF="http://xmpp.org/extensions/xep-0050.html">XEP-0050</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><TT>mod_adhoc</TT></TD><TD ALIGN=left NOWRAP>Ad-Hoc Commands (<A HREF="http://xmpp.org/extensions/xep-0050.html">XEP-0050</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modannounce"><TT>mod_announce</TT></A></TD><TD ALIGN=left NOWRAP>Manage announcements</TD><TD ALIGN=left NOWRAP>recommends <TT>mod_adhoc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modannounce"><TT>mod_announce</TT></A></TD><TD ALIGN=left NOWRAP>Manage announcements</TD><TD ALIGN=left NOWRAP>recommends <TT>mod_adhoc</TT></TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modannounce"><TT>mod_announce_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Manage announcements</TD><TD ALIGN=left NOWRAP>recommends <TT>mod_adhoc</TT></TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><TT>mod_blocking</TT></TD><TD ALIGN=left NOWRAP>Simple Communications Blocking (<A HREF="http://xmpp.org/extensions/xep-0191.html">XEP-0191</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_privacy</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP><TT>mod_blocking</TT></TD><TD ALIGN=left NOWRAP>Simple Communications Blocking (<A HREF="http://xmpp.org/extensions/xep-0191.html">XEP-0191</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_privacy</TT></TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><TT>mod_blocking_odbc</TT></TD><TD ALIGN=left NOWRAP>Simple Communications Blocking (<A HREF="http://xmpp.org/extensions/xep-0191.html">XEP-0191</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_privacy_odbc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><TT>mod_caps</TT></TD><TD ALIGN=left NOWRAP>Entity Capabilities (<A HREF="http://xmpp.org/extensions/xep-0115.html">XEP-0115</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><TT>mod_caps</TT></TD><TD ALIGN=left NOWRAP>Entity Capabilities (<A HREF="http://xmpp.org/extensions/xep-0115.html">XEP-0115</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><TT>mod_configure</TT></TD><TD ALIGN=left NOWRAP>Server configuration using Ad-Hoc</TD><TD ALIGN=left NOWRAP><TT>mod_adhoc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP><TT>mod_configure</TT></TD><TD ALIGN=left NOWRAP>Server configuration using Ad-Hoc</TD><TD ALIGN=left NOWRAP><TT>mod_adhoc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#moddisco"><TT>mod_disco</TT></A></TD><TD ALIGN=left NOWRAP>Service Discovery (<A HREF="http://xmpp.org/extensions/xep-0030.html">XEP-0030</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#moddisco"><TT>mod_disco</TT></A></TD><TD ALIGN=left NOWRAP>Service Discovery (<A HREF="http://xmpp.org/extensions/xep-0030.html">XEP-0030</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
@ -1958,10 +1970,12 @@ all entries end with a comma:
|
|||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modhttpbind"><TT>mod_http_bind</TT></A></TD><TD ALIGN=left NOWRAP>XMPP over Bosh service (HTTP Binding)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modhttpbind"><TT>mod_http_bind</TT></A></TD><TD ALIGN=left NOWRAP>XMPP over Bosh service (HTTP Binding)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modhttpfileserver"><TT>mod_http_fileserver</TT></A></TD><TD ALIGN=left NOWRAP>Small HTTP file server</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modhttpfileserver"><TT>mod_http_fileserver</TT></A></TD><TD ALIGN=left NOWRAP>Small HTTP file server</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modirc"><TT>mod_irc</TT></A></TD><TD ALIGN=left NOWRAP>IRC transport</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modirc"><TT>mod_irc</TT></A></TD><TD ALIGN=left NOWRAP>IRC transport</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modirc"><TT>mod_irc_odbc</TT></A></TD><TD ALIGN=left NOWRAP>IRC transport</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modlast"><TT>mod_last</TT></A></TD><TD ALIGN=left NOWRAP>Last Activity (<A HREF="http://xmpp.org/extensions/xep-0012.html">XEP-0012</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modlast"><TT>mod_last</TT></A></TD><TD ALIGN=left NOWRAP>Last Activity (<A HREF="http://xmpp.org/extensions/xep-0012.html">XEP-0012</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modlast"><TT>mod_last_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Last Activity (<A HREF="http://xmpp.org/extensions/xep-0012.html">XEP-0012</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modlast"><TT>mod_last_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Last Activity (<A HREF="http://xmpp.org/extensions/xep-0012.html">XEP-0012</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modmuc"><TT>mod_muc</TT></A></TD><TD ALIGN=left NOWRAP>Multi-User Chat (<A HREF="http://xmpp.org/extensions/xep-0045.html">XEP-0045</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modmuc"><TT>mod_muc</TT></A></TD><TD ALIGN=left NOWRAP>Multi-User Chat (<A HREF="http://xmpp.org/extensions/xep-0045.html">XEP-0045</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modmuclog"><TT>mod_muc_log</TT></A></TD><TD ALIGN=left NOWRAP>Multi-User Chat room logging</TD><TD ALIGN=left NOWRAP><TT>mod_muc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modmuc"><TT>mod_muc_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Multi-User Chat (<A HREF="http://xmpp.org/extensions/xep-0045.html">XEP-0045</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modmuclog"><TT>mod_muc_log</TT></A></TD><TD ALIGN=left NOWRAP>Multi-User Chat room logging</TD><TD ALIGN=left NOWRAP><TT>mod_muc</TT> or <TT>mod_muc_odbc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modoffline"><TT>mod_offline</TT></A></TD><TD ALIGN=left NOWRAP>Offline message storage (<A HREF="http://xmpp.org/extensions/xep-0160.html">XEP-0160</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modoffline"><TT>mod_offline</TT></A></TD><TD ALIGN=left NOWRAP>Offline message storage (<A HREF="http://xmpp.org/extensions/xep-0160.html">XEP-0160</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modoffline"><TT>mod_offline_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Offline message storage (<A HREF="http://xmpp.org/extensions/xep-0160.html">XEP-0160</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modoffline"><TT>mod_offline_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Offline message storage (<A HREF="http://xmpp.org/extensions/xep-0160.html">XEP-0160</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modping"><TT>mod_ping</TT></A></TD><TD ALIGN=left NOWRAP>XMPP Ping and periodic keepalives (<A HREF="http://xmpp.org/extensions/xep-0199.html">XEP-0199</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modping"><TT>mod_ping</TT></A></TD><TD ALIGN=left NOWRAP>XMPP Ping and periodic keepalives (<A HREF="http://xmpp.org/extensions/xep-0199.html">XEP-0199</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
@ -1980,6 +1994,8 @@ all entries end with a comma:
|
|||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modservicelog"><TT>mod_service_log</TT></A></TD><TD ALIGN=left NOWRAP>Copy user messages to logger service</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modservicelog"><TT>mod_service_log</TT></A></TD><TD ALIGN=left NOWRAP>Copy user messages to logger service</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modsharedroster"><TT>mod_shared_roster</TT></A></TD><TD ALIGN=left NOWRAP>Shared roster management</TD><TD ALIGN=left NOWRAP><TT>mod_roster</TT> or</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modsharedroster"><TT>mod_shared_roster</TT></A></TD><TD ALIGN=left NOWRAP>Shared roster management</TD><TD ALIGN=left NOWRAP><TT>mod_roster</TT> or</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP><TT>mod_roster_odbc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP><TT>mod_roster_odbc</TT></TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modsharedroster"><TT>mod_shared_roster_odbc</TT></A></TD><TD ALIGN=left NOWRAP>Shared roster management</TD><TD ALIGN=left NOWRAP>supported DB (*) and</TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP><TT>mod_roster</TT> or <TT>mod_roster_odbc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modsharedrosterldap"><TT>mod_shared_roster_ldap</TT></A></TD><TD ALIGN=left NOWRAP>LDAP Shared roster management</TD><TD ALIGN=left NOWRAP><TT>mod_roster</TT> or</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modsharedrosterldap"><TT>mod_shared_roster_ldap</TT></A></TD><TD ALIGN=left NOWRAP>LDAP Shared roster management</TD><TD ALIGN=left NOWRAP><TT>mod_roster</TT> or</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP><TT>mod_roster_odbc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP> </TD><TD ALIGN=left NOWRAP><TT>mod_roster_odbc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modsic"><TT>mod_sic</TT></A></TD><TD ALIGN=left NOWRAP>Server IP Check (<A HREF="http://xmpp.org/extensions/xep-0279.html">XEP-0279</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modsic"><TT>mod_sic</TT></A></TD><TD ALIGN=left NOWRAP>Server IP Check (<A HREF="http://xmpp.org/extensions/xep-0279.html">XEP-0279</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
@ -1989,6 +2005,7 @@ all entries end with a comma:
|
|||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcardldap"><TT>mod_vcard_ldap</TT></A></TD><TD ALIGN=left NOWRAP>vcard-temp (<A HREF="http://xmpp.org/extensions/xep-0054.html">XEP-0054</A>)</TD><TD ALIGN=left NOWRAP>LDAP server</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcardldap"><TT>mod_vcard_ldap</TT></A></TD><TD ALIGN=left NOWRAP>vcard-temp (<A HREF="http://xmpp.org/extensions/xep-0054.html">XEP-0054</A>)</TD><TD ALIGN=left NOWRAP>LDAP server</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcard"><TT>mod_vcard_odbc</TT></A></TD><TD ALIGN=left NOWRAP>vcard-temp (<A HREF="http://xmpp.org/extensions/xep-0054.html">XEP-0054</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcard"><TT>mod_vcard_odbc</TT></A></TD><TD ALIGN=left NOWRAP>vcard-temp (<A HREF="http://xmpp.org/extensions/xep-0054.html">XEP-0054</A>)</TD><TD ALIGN=left NOWRAP>supported DB (*)</TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcardxupdate"><TT>mod_vcard_xupdate</TT></A></TD><TD ALIGN=left NOWRAP>vCard-Based Avatars (<A HREF="http://xmpp.org/extensions/xep-0153.html">XEP-0153</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_vcard</TT> or <TT>mod_vcard_odbc</TT></TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcardxupdate"><TT>mod_vcard_xupdate</TT></A></TD><TD ALIGN=left NOWRAP>vCard-Based Avatars (<A HREF="http://xmpp.org/extensions/xep-0153.html">XEP-0153</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_vcard</TT> or <TT>mod_vcard_odbc</TT></TD></TR>
|
||||||
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modvcardxupdate"><TT>mod_vcard_xupdate_odbc</TT></A></TD><TD ALIGN=left NOWRAP>vCard-Based Avatars (<A HREF="http://xmpp.org/extensions/xep-0153.html">XEP-0153</A>)</TD><TD ALIGN=left NOWRAP><TT>mod_vcard</TT> or <TT>mod_vcard_odbc</TT></TD></TR>
|
||||||
<TR><TD ALIGN=left NOWRAP><A HREF="#modversion"><TT>mod_version</TT></A></TD><TD ALIGN=left NOWRAP>Software Version (<A HREF="http://xmpp.org/extensions/xep-0092.html">XEP-0092</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
<TR><TD ALIGN=left NOWRAP><A HREF="#modversion"><TT>mod_version</TT></A></TD><TD ALIGN=left NOWRAP>Software Version (<A HREF="http://xmpp.org/extensions/xep-0092.html">XEP-0092</A>)</TD><TD ALIGN=left NOWRAP> </TD></TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
<DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE><UL CLASS="itemize"><LI CLASS="li-itemize">
|
<DIV CLASS="center"><HR WIDTH="80%" SIZE=2></DIV></DIV></BLOCKQUOTE><UL CLASS="itemize"><LI CLASS="li-itemize">
|
||||||
@ -2010,10 +2027,16 @@ Last connection date and time: Use <TT>mod_last_odbc</TT> instead of
|
|||||||
</LI><LI CLASS="li-itemize">Offline messages: Use <TT>mod_offline_odbc</TT> instead of
|
</LI><LI CLASS="li-itemize">Offline messages: Use <TT>mod_offline_odbc</TT> instead of
|
||||||
<TT>mod_offline</TT>.
|
<TT>mod_offline</TT>.
|
||||||
</LI><LI CLASS="li-itemize">Rosters: Use <TT>mod_roster_odbc</TT> instead of <TT>mod_roster</TT>.
|
</LI><LI CLASS="li-itemize">Rosters: Use <TT>mod_roster_odbc</TT> instead of <TT>mod_roster</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">Shared Rosters: Use <TT>mod_shared_roster_odbc</TT> instead of <TT>mod_shared_roster</TT>.
|
||||||
</LI><LI CLASS="li-itemize">Users’ VCARD: Use <TT>mod_vcard_odbc</TT> instead of <TT>mod_vcard</TT>.
|
</LI><LI CLASS="li-itemize">Users’ VCARD: Use <TT>mod_vcard_odbc</TT> instead of <TT>mod_vcard</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">vCard-Based Avatars: Use <TT>mod_vcard_xupdate_odbc</TT> instead of <TT>mod_vcard_xupdate</TT>.
|
||||||
</LI><LI CLASS="li-itemize">Private XML storage: Use <TT>mod_private_odbc</TT> instead of <TT>mod_private</TT>.
|
</LI><LI CLASS="li-itemize">Private XML storage: Use <TT>mod_private_odbc</TT> instead of <TT>mod_private</TT>.
|
||||||
</LI><LI CLASS="li-itemize">User rules for blocking communications: Use <TT>mod_privacy_odbc</TT> instead of <TT>mod_privacy</TT>.
|
</LI><LI CLASS="li-itemize">User rules for blocking communications: Use <TT>mod_privacy_odbc</TT> instead of <TT>mod_privacy</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">Simple Communications Blocking: Use <TT>mod_blocking_odbc</TT> instead of <TT>mod_blocking</TT>.
|
||||||
</LI><LI CLASS="li-itemize">Pub-Sub nodes, items and subscriptions: Use <TT>mod_pubsub_odbc</TT> instead of <TT>mod_pubsub</TT>.
|
</LI><LI CLASS="li-itemize">Pub-Sub nodes, items and subscriptions: Use <TT>mod_pubsub_odbc</TT> instead of <TT>mod_pubsub</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">Multi-user chats: Use <TT>mod_muc_odbc</TT> instead of <TT>mod_muc</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">Manage announcements: Use <TT>mod_announce_odbc</TT> instead of <TT>mod_announce</TT>.
|
||||||
|
</LI><LI CLASS="li-itemize">IRC transport: Use <TT>mod_irc_odbc</TT> instead of <TT>mod_irc</TT>.
|
||||||
</LI></UL><P>You can find more
|
</LI></UL><P>You can find more
|
||||||
<A HREF="http://www.ejabberd.im/contributions">contributed modules</A> on the
|
<A HREF="http://www.ejabberd.im/contributions">contributed modules</A> on the
|
||||||
<TT>ejabberd</TT> website. Please remember that these contributions might not work or
|
<TT>ejabberd</TT> website. Please remember that these contributions might not work or
|
||||||
@ -2526,7 +2549,7 @@ discarded. A good value for this option is 4 seconds.
|
|||||||
</DD><DT CLASS="dt-description"><B><TT>{default_room_options, [ {OptionName, OptionValue}, ...]}</TT></B></DT><DD CLASS="dd-description">
|
</DD><DT CLASS="dt-description"><B><TT>{default_room_options, [ {OptionName, OptionValue}, ...]}</TT></B></DT><DD CLASS="dd-description">
|
||||||
This module option allows to define the desired default room options.
|
This module option allows to define the desired default room options.
|
||||||
Note that the creator of a room can modify the options of his room
|
Note that the creator of a room can modify the options of his room
|
||||||
at any time using a XMPP client with MUC capability.
|
at any time using an XMPP client with MUC capability.
|
||||||
The available room options and the default values are:
|
The available room options and the default values are:
|
||||||
<DL CLASS="description"><DT CLASS="dt-description">
|
<DL CLASS="description"><DT CLASS="dt-description">
|
||||||
<B><TT>{allow_change_subj, true|false}</TT></B></DT><DD CLASS="dd-description"> Allow occupants to change the subject.
|
<B><TT>{allow_change_subj, true|false}</TT></B></DT><DD CLASS="dd-description"> Allow occupants to change the subject.
|
||||||
@ -3189,7 +3212,7 @@ Enabling this option reduces the load for both ejabberd and the database.
|
|||||||
This option does not affect the client in any way.
|
This option does not affect the client in any way.
|
||||||
This option is only useful if Roster Versioning is enabled.
|
This option is only useful if Roster Versioning is enabled.
|
||||||
This option is disabled by default.
|
This option is disabled by default.
|
||||||
Important: if you use <TT>mod_shared_roster</TT> or <TT>mod_shared_roster_ldap</TT>,
|
Important: if you use <TT>mod_shared_roster</TT>, <TT>mod_shared_roster_odbc</TT> or <TT>mod_shared_roster_ldap</TT>,
|
||||||
you must disable this option.
|
you must disable this option.
|
||||||
</DD></DL><P>This example configuration enables Roster Versioning with storage of current id:
|
</DD></DL><P>This example configuration enables Roster Versioning with storage of current id:
|
||||||
</P><PRE CLASS="verbatim">{modules,
|
</P><PRE CLASS="verbatim">{modules,
|
||||||
@ -4146,7 +4169,7 @@ the environment variable <TT>EJABBERD_DOC_PATH</TT>.
|
|||||||
See section <A HREF="#erlangconfiguration">4.1.2</A>.</P><P> <A NAME="adhoccommands"></A> </P><!--TOC section Ad-hoc Commands-->
|
See section <A HREF="#erlangconfiguration">4.1.2</A>.</P><P> <A NAME="adhoccommands"></A> </P><!--TOC section Ad-hoc Commands-->
|
||||||
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc78">4.4</A>  <A HREF="#adhoccommands">Ad-hoc Commands</A></H2><!--SEC END --><P> <A NAME="adhoccommands"></A> </P><P>If you enable <TT>mod_configure</TT> and <TT>mod_adhoc</TT>,
|
<H2 CLASS="section"><!--SEC ANCHOR --><A NAME="htoc78">4.4</A>  <A HREF="#adhoccommands">Ad-hoc Commands</A></H2><!--SEC END --><P> <A NAME="adhoccommands"></A> </P><P>If you enable <TT>mod_configure</TT> and <TT>mod_adhoc</TT>,
|
||||||
you can perform several administrative tasks in <TT>ejabberd</TT>
|
you can perform several administrative tasks in <TT>ejabberd</TT>
|
||||||
with a XMPP client.
|
with an XMPP client.
|
||||||
The client must support Ad-Hoc Commands (<A HREF="http://xmpp.org/extensions/xep-0050.html">XEP-0050</A>),
|
The client must support Ad-Hoc Commands (<A HREF="http://xmpp.org/extensions/xep-0050.html">XEP-0050</A>),
|
||||||
and you must login in the XMPP server with
|
and you must login in the XMPP server with
|
||||||
an account with proper privileges.</P><P> <A NAME="changeerlangnodename"></A> </P><!--TOC section Change Computer Hostname-->
|
an account with proper privileges.</P><P> <A NAME="changeerlangnodename"></A> </P><!--TOC section Change Computer Hostname-->
|
||||||
@ -4467,6 +4490,7 @@ Alexey Shchepin (<A HREF="xmpp:aleksey@jabber.ru"><TT>xmpp:aleksey@jabber.ru</TT
|
|||||||
</LI><LI CLASS="li-itemize">Badlop (<A HREF="xmpp:badlop@jabberes.org"><TT>xmpp:badlop@jabberes.org</TT></A>)
|
</LI><LI CLASS="li-itemize">Badlop (<A HREF="xmpp:badlop@jabberes.org"><TT>xmpp:badlop@jabberes.org</TT></A>)
|
||||||
</LI><LI CLASS="li-itemize">Evgeniy Khramtsov (<A HREF="xmpp:xram@jabber.ru"><TT>xmpp:xram@jabber.ru</TT></A>)
|
</LI><LI CLASS="li-itemize">Evgeniy Khramtsov (<A HREF="xmpp:xram@jabber.ru"><TT>xmpp:xram@jabber.ru</TT></A>)
|
||||||
</LI><LI CLASS="li-itemize">Florian Zumbiehl (<A HREF="xmpp:florz@florz.de"><TT>xmpp:florz@florz.de</TT></A>)
|
</LI><LI CLASS="li-itemize">Florian Zumbiehl (<A HREF="xmpp:florz@florz.de"><TT>xmpp:florz@florz.de</TT></A>)
|
||||||
|
</LI><LI CLASS="li-itemize">Ludovic Bocquet (<A HREF="xmpp:lbocquet@jabber.org"><TT>xmpp:lbocquet@jabber.org</TT></A>)
|
||||||
</LI><LI CLASS="li-itemize">Marcin Owsiany (<A HREF="xmpp:marcin.owsiany@gmail.com"><TT>xmpp:marcin.owsiany@gmail.com</TT></A>)
|
</LI><LI CLASS="li-itemize">Marcin Owsiany (<A HREF="xmpp:marcin.owsiany@gmail.com"><TT>xmpp:marcin.owsiany@gmail.com</TT></A>)
|
||||||
</LI><LI CLASS="li-itemize">Michael Grigutsch (<A HREF="xmpp:migri@jabber.i-pobox.net"><TT>xmpp:migri@jabber.i-pobox.net</TT></A>)
|
</LI><LI CLASS="li-itemize">Michael Grigutsch (<A HREF="xmpp:migri@jabber.i-pobox.net"><TT>xmpp:migri@jabber.i-pobox.net</TT></A>)
|
||||||
</LI><LI CLASS="li-itemize">Mickael Remond (<A HREF="xmpp:mremond@process-one.net"><TT>xmpp:mremond@process-one.net</TT></A>)
|
</LI><LI CLASS="li-itemize">Mickael Remond (<A HREF="xmpp:mremond@process-one.net"><TT>xmpp:mremond@process-one.net</TT></A>)
|
||||||
|
@ -66,7 +66,9 @@
|
|||||||
\newcommand{\module}[1]{\texttt{#1}}
|
\newcommand{\module}[1]{\texttt{#1}}
|
||||||
\newcommand{\modadhoc}{\module{mod\_adhoc}}
|
\newcommand{\modadhoc}{\module{mod\_adhoc}}
|
||||||
\newcommand{\modannounce}{\module{mod\_announce}}
|
\newcommand{\modannounce}{\module{mod\_announce}}
|
||||||
|
\newcommand{\modannounceodbc}{\module{mod\_announce\_odbc}}
|
||||||
\newcommand{\modblocking}{\module{mod\_blocking}}
|
\newcommand{\modblocking}{\module{mod\_blocking}}
|
||||||
|
\newcommand{\modblockingodbc}{\module{mod\_blocking\_odbc}}
|
||||||
\newcommand{\modcaps}{\module{mod\_caps}}
|
\newcommand{\modcaps}{\module{mod\_caps}}
|
||||||
\newcommand{\modconfigure}{\module{mod\_configure}}
|
\newcommand{\modconfigure}{\module{mod\_configure}}
|
||||||
\newcommand{\moddisco}{\module{mod\_disco}}
|
\newcommand{\moddisco}{\module{mod\_disco}}
|
||||||
@ -74,9 +76,11 @@
|
|||||||
\newcommand{\modhttpbind}{\module{mod\_http\_bind}}
|
\newcommand{\modhttpbind}{\module{mod\_http\_bind}}
|
||||||
\newcommand{\modhttpfileserver}{\module{mod\_http\_fileserver}}
|
\newcommand{\modhttpfileserver}{\module{mod\_http\_fileserver}}
|
||||||
\newcommand{\modirc}{\module{mod\_irc}}
|
\newcommand{\modirc}{\module{mod\_irc}}
|
||||||
|
\newcommand{\modircodbc}{\module{mod\_irc\_odbc}}
|
||||||
\newcommand{\modlast}{\module{mod\_last}}
|
\newcommand{\modlast}{\module{mod\_last}}
|
||||||
\newcommand{\modlastodbc}{\module{mod\_last\_odbc}}
|
\newcommand{\modlastodbc}{\module{mod\_last\_odbc}}
|
||||||
\newcommand{\modmuc}{\module{mod\_muc}}
|
\newcommand{\modmuc}{\module{mod\_muc}}
|
||||||
|
\newcommand{\modmucodbc}{\module{mod\_muc\_odbc}}
|
||||||
\newcommand{\modmuclog}{\module{mod\_muc\_log}}
|
\newcommand{\modmuclog}{\module{mod\_muc\_log}}
|
||||||
\newcommand{\modoffline}{\module{mod\_offline}}
|
\newcommand{\modoffline}{\module{mod\_offline}}
|
||||||
\newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}}
|
\newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}}
|
||||||
@ -95,6 +99,7 @@
|
|||||||
\newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}}
|
\newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}}
|
||||||
\newcommand{\modservicelog}{\module{mod\_service\_log}}
|
\newcommand{\modservicelog}{\module{mod\_service\_log}}
|
||||||
\newcommand{\modsharedroster}{\module{mod\_shared\_roster}}
|
\newcommand{\modsharedroster}{\module{mod\_shared\_roster}}
|
||||||
|
\newcommand{\modsharedrosterodbc}{\module{mod\_shared\_roster\_odbc}}
|
||||||
\newcommand{\modsharedrosterldap}{\module{mod\_shared\_roster\_ldap}}
|
\newcommand{\modsharedrosterldap}{\module{mod\_shared\_roster\_ldap}}
|
||||||
\newcommand{\modsic}{\module{mod\_sic}}
|
\newcommand{\modsic}{\module{mod\_sic}}
|
||||||
\newcommand{\modstats}{\module{mod\_stats}}
|
\newcommand{\modstats}{\module{mod\_stats}}
|
||||||
@ -103,6 +108,7 @@
|
|||||||
\newcommand{\modvcardldap}{\module{mod\_vcard\_ldap}}
|
\newcommand{\modvcardldap}{\module{mod\_vcard\_ldap}}
|
||||||
\newcommand{\modvcardodbc}{\module{mod\_vcard\_odbc}}
|
\newcommand{\modvcardodbc}{\module{mod\_vcard\_odbc}}
|
||||||
\newcommand{\modvcardxupdate}{\module{mod\_vcard\_xupdate}}
|
\newcommand{\modvcardxupdate}{\module{mod\_vcard\_xupdate}}
|
||||||
|
\newcommand{\modvcardxupdateodbc}{\module{mod\_vcard\_xupdate\_odbc}}
|
||||||
\newcommand{\modversion}{\module{mod\_version}}
|
\newcommand{\modversion}{\module{mod\_version}}
|
||||||
|
|
||||||
%% Contributed modules
|
%% Contributed modules
|
||||||
@ -1234,6 +1240,12 @@ The default value is \term{closeold}.
|
|||||||
If the client uses old Jabber Non-SASL authentication (\xepref{0078}),
|
If the client uses old Jabber Non-SASL authentication (\xepref{0078}),
|
||||||
then this option is not respected, and the action performed is \term{closeold}.
|
then this option is not respected, and the action performed is \term{closeold}.
|
||||||
|
|
||||||
|
The option \option{fqdn} allows you to define the Fully Qualified Domain Name
|
||||||
|
of the machine, in case it isn't detected automatically.
|
||||||
|
The FQDN is used to authenticate some clients that use the DIGEST-MD5 SASL mechanism.
|
||||||
|
The option syntax is:
|
||||||
|
\esyntax{\{fqdn, undefined|FqdnString\}.}
|
||||||
|
|
||||||
\makesubsubsection{internalauth}{Internal}
|
\makesubsubsection{internalauth}{Internal}
|
||||||
\ind{internal authentication}\ind{Mnesia}
|
\ind{internal authentication}\ind{Mnesia}
|
||||||
|
|
||||||
@ -2581,7 +2593,10 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline
|
\hline
|
||||||
\hline \modadhoc{} & Ad-Hoc Commands (\xepref{0050}) & \\
|
\hline \modadhoc{} & Ad-Hoc Commands (\xepref{0050}) & \\
|
||||||
\hline \ahrefloc{modannounce}{\modannounce{}} & Manage announcements & recommends \modadhoc{} \\
|
\hline \ahrefloc{modannounce}{\modannounce{}} & Manage announcements & recommends \modadhoc{} \\
|
||||||
|
\hline \ahrefloc{modannounce}{\modannounceodbc{}} & Manage announcements & recommends \modadhoc{} \\
|
||||||
|
& & supported DB (*) \\
|
||||||
\hline \modblocking{} & Simple Communications Blocking (\xepref{0191}) & \modprivacy{} \\
|
\hline \modblocking{} & Simple Communications Blocking (\xepref{0191}) & \modprivacy{} \\
|
||||||
|
\hline \modblockingodbc{} & Simple Communications Blocking (\xepref{0191}) & \modprivacyodbc{} \\
|
||||||
\hline \modcaps{} & Entity Capabilities (\xepref{0115}) & \\
|
\hline \modcaps{} & Entity Capabilities (\xepref{0115}) & \\
|
||||||
\hline \modconfigure{} & Server configuration using Ad-Hoc & \modadhoc{} \\
|
\hline \modconfigure{} & Server configuration using Ad-Hoc & \modadhoc{} \\
|
||||||
\hline \ahrefloc{moddisco}{\moddisco{}} & Service Discovery (\xepref{0030}) & \\
|
\hline \ahrefloc{moddisco}{\moddisco{}} & Service Discovery (\xepref{0030}) & \\
|
||||||
@ -2589,10 +2604,12 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline \ahrefloc{modhttpbind}{\modhttpbind{}} & XMPP over Bosh service (HTTP Binding) & \\
|
\hline \ahrefloc{modhttpbind}{\modhttpbind{}} & XMPP over Bosh service (HTTP Binding) & \\
|
||||||
\hline \ahrefloc{modhttpfileserver}{\modhttpfileserver{}} & Small HTTP file server & \\
|
\hline \ahrefloc{modhttpfileserver}{\modhttpfileserver{}} & Small HTTP file server & \\
|
||||||
\hline \ahrefloc{modirc}{\modirc{}} & IRC transport & \\
|
\hline \ahrefloc{modirc}{\modirc{}} & IRC transport & \\
|
||||||
|
\hline \ahrefloc{modirc}{\modircodbc{}} & IRC transport & supported DB (*) \\
|
||||||
\hline \ahrefloc{modlast}{\modlast{}} & Last Activity (\xepref{0012}) & \\
|
\hline \ahrefloc{modlast}{\modlast{}} & Last Activity (\xepref{0012}) & \\
|
||||||
\hline \ahrefloc{modlast}{\modlastodbc{}} & Last Activity (\xepref{0012}) & supported DB (*) \\
|
\hline \ahrefloc{modlast}{\modlastodbc{}} & Last Activity (\xepref{0012}) & supported DB (*) \\
|
||||||
\hline \ahrefloc{modmuc}{\modmuc{}} & Multi-User Chat (\xepref{0045}) & \\
|
\hline \ahrefloc{modmuc}{\modmuc{}} & Multi-User Chat (\xepref{0045}) & \\
|
||||||
\hline \ahrefloc{modmuclog}{\modmuclog{}} & Multi-User Chat room logging & \modmuc{} \\
|
\hline \ahrefloc{modmuc}{\modmucodbc{}} & Multi-User Chat (\xepref{0045}) & supported DB (*) \\
|
||||||
|
\hline \ahrefloc{modmuclog}{\modmuclog{}} & Multi-User Chat room logging & \modmuc{} or \modmucodbc{} \\
|
||||||
\hline \ahrefloc{modoffline}{\modoffline{}} & Offline message storage (\xepref{0160}) & \\
|
\hline \ahrefloc{modoffline}{\modoffline{}} & Offline message storage (\xepref{0160}) & \\
|
||||||
\hline \ahrefloc{modoffline}{\modofflineodbc{}} & Offline message storage (\xepref{0160}) & supported DB (*) \\
|
\hline \ahrefloc{modoffline}{\modofflineodbc{}} & Offline message storage (\xepref{0160}) & supported DB (*) \\
|
||||||
\hline \ahrefloc{modping}{\modping{}} & XMPP Ping and periodic keepalives (\xepref{0199}) & \\
|
\hline \ahrefloc{modping}{\modping{}} & XMPP Ping and periodic keepalives (\xepref{0199}) & \\
|
||||||
@ -2611,6 +2628,8 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline \ahrefloc{modservicelog}{\modservicelog{}} & Copy user messages to logger service & \\
|
\hline \ahrefloc{modservicelog}{\modservicelog{}} & Copy user messages to logger service & \\
|
||||||
\hline \ahrefloc{modsharedroster}{\modsharedroster{}} & Shared roster management & \modroster{} or \\
|
\hline \ahrefloc{modsharedroster}{\modsharedroster{}} & Shared roster management & \modroster{} or \\
|
||||||
& & \modrosterodbc\\
|
& & \modrosterodbc\\
|
||||||
|
\hline \ahrefloc{modsharedroster}{\modsharedrosterodbc{}} & Shared roster management & supported DB (*) and\\
|
||||||
|
& & \modroster{} or \modrosterodbc\\
|
||||||
\hline \ahrefloc{modsharedrosterldap}{\modsharedrosterldap{}} & LDAP Shared roster management & \modroster{} or \\
|
\hline \ahrefloc{modsharedrosterldap}{\modsharedrosterldap{}} & LDAP Shared roster management & \modroster{} or \\
|
||||||
& & \modrosterodbc\\
|
& & \modrosterodbc\\
|
||||||
\hline \ahrefloc{modsic}{\modsic{}} & Server IP Check (\xepref{0279}) & \\
|
\hline \ahrefloc{modsic}{\modsic{}} & Server IP Check (\xepref{0279}) & \\
|
||||||
@ -2620,6 +2639,7 @@ The following table lists all modules included in \ejabberd{}.
|
|||||||
\hline \ahrefloc{modvcardldap}{\modvcardldap{}} & vcard-temp (\xepref{0054}) & LDAP server \\
|
\hline \ahrefloc{modvcardldap}{\modvcardldap{}} & vcard-temp (\xepref{0054}) & LDAP server \\
|
||||||
\hline \ahrefloc{modvcard}{\modvcardodbc{}} & vcard-temp (\xepref{0054}) & supported DB (*) \\
|
\hline \ahrefloc{modvcard}{\modvcardodbc{}} & vcard-temp (\xepref{0054}) & supported DB (*) \\
|
||||||
\hline \ahrefloc{modvcardxupdate}{\modvcardxupdate{}} & vCard-Based Avatars (\xepref{0153}) & \modvcard{} or \modvcardodbc{} \\
|
\hline \ahrefloc{modvcardxupdate}{\modvcardxupdate{}} & vCard-Based Avatars (\xepref{0153}) & \modvcard{} or \modvcardodbc{} \\
|
||||||
|
\hline \ahrefloc{modvcardxupdate}{\modvcardxupdateodbc{}} & vCard-Based Avatars (\xepref{0153}) & \modvcard{} or \modvcardodbc{} \\
|
||||||
\hline \ahrefloc{modversion}{\modversion{}} & Software Version (\xepref{0092}) & \\
|
\hline \ahrefloc{modversion}{\modversion{}} & Software Version (\xepref{0092}) & \\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
@ -2650,10 +2670,16 @@ database for the following data:
|
|||||||
\item Offline messages: Use \term{mod\_offline\_odbc} instead of
|
\item Offline messages: Use \term{mod\_offline\_odbc} instead of
|
||||||
\term{mod\_offline}.
|
\term{mod\_offline}.
|
||||||
\item Rosters: Use \term{mod\_roster\_odbc} instead of \term{mod\_roster}.
|
\item Rosters: Use \term{mod\_roster\_odbc} instead of \term{mod\_roster}.
|
||||||
|
\item Shared Rosters: Use \term{mod\_shared\_roster\_odbc} instead of \term{mod\_shared\_roster}.
|
||||||
\item Users' VCARD: Use \term{mod\_vcard\_odbc} instead of \term{mod\_vcard}.
|
\item Users' VCARD: Use \term{mod\_vcard\_odbc} instead of \term{mod\_vcard}.
|
||||||
|
\item vCard-Based Avatars: Use \term{mod\_vcard\_xupdate\_odbc} instead of \term{mod\_vcard\_xupdate}.
|
||||||
\item Private XML storage: Use \term{mod\_private\_odbc} instead of \term{mod\_private}.
|
\item Private XML storage: Use \term{mod\_private\_odbc} instead of \term{mod\_private}.
|
||||||
\item User rules for blocking communications: Use \term{mod\_privacy\_odbc} instead of \term{mod\_privacy}.
|
\item User rules for blocking communications: Use \term{mod\_privacy\_odbc} instead of \term{mod\_privacy}.
|
||||||
|
\item Simple Communications Blocking: Use \term{mod\_blocking\_odbc} instead of \term{mod\_blocking}.
|
||||||
\item Pub-Sub nodes, items and subscriptions: Use \term{mod\_pubsub\_odbc} instead of \term{mod\_pubsub}.
|
\item Pub-Sub nodes, items and subscriptions: Use \term{mod\_pubsub\_odbc} instead of \term{mod\_pubsub}.
|
||||||
|
\item Multi-user chats: Use \term{mod\_muc\_odbc} instead of \term{mod\_muc}.
|
||||||
|
\item Manage announcements: Use \term{mod\_announce\_odbc} instead of \term{mod\_announce}.
|
||||||
|
\item IRC transport: Use \term{mod\_irc\_odbc} instead of \term{mod\_irc}.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
You can find more
|
You can find more
|
||||||
@ -4052,7 +4078,7 @@ Options:
|
|||||||
This option does not affect the client in any way.
|
This option does not affect the client in any way.
|
||||||
This option is only useful if Roster Versioning is enabled.
|
This option is only useful if Roster Versioning is enabled.
|
||||||
This option is disabled by default.
|
This option is disabled by default.
|
||||||
Important: if you use \modsharedroster{} or \modsharedrosterldap{},
|
Important: if you use \modsharedroster{}, \modsharedrosterodbc{} or \modsharedrosterldap{},
|
||||||
you must disable this option.
|
you must disable this option.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
58
doc/release_notes_2.1.11.txt
Normal file
58
doc/release_notes_2.1.11.txt
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
Release Notes
|
||||||
|
ejabberd 2.1.11
|
||||||
|
|
||||||
|
ejabberd 2.1.11 includes a few bugfixes and improvements.
|
||||||
|
|
||||||
|
Read more details about the changes in:
|
||||||
|
http://redir.process-one.net/ejabberd-2.1.11
|
||||||
|
|
||||||
|
Download the source code and installers from:
|
||||||
|
http://www.process-one.net/en/ejabberd/
|
||||||
|
|
||||||
|
|
||||||
|
The major changes are:
|
||||||
|
|
||||||
|
* HTTP service
|
||||||
|
- Fix ejabberd_http:get_line
|
||||||
|
- Don't use binary:match to extract lines from binaries
|
||||||
|
- Parse and encode https header names like native http parser does
|
||||||
|
- Parse correctly https request split into multiple packets
|
||||||
|
- Properly handle HEAD request in mod_http_bind (EJAB-1538)
|
||||||
|
- New option default_host for handling requests with ambiguous Host (EJAB-1261)
|
||||||
|
|
||||||
|
* ODBC
|
||||||
|
- New ODBC support for mod_announce
|
||||||
|
- New ODBC support for mod_blocking
|
||||||
|
- New ODBC support for mod_irc
|
||||||
|
- New ODBC support for mod_muc
|
||||||
|
- New ODBC support for mod_shared_roster
|
||||||
|
- New ODBC support for mod_vcard_xupdate
|
||||||
|
- Add ODBC exporting function for privacy table
|
||||||
|
- Work also with some unicode strings in PgSQL (EJAB-1490)
|
||||||
|
- Replace a single quote with double quotes in an ODBC escape
|
||||||
|
|
||||||
|
* SSL
|
||||||
|
- Make sure that res is initialized in all cases
|
||||||
|
- Parse correctly https request split into multiple packets (EJAB-1537)
|
||||||
|
- Added missed tls:recv_data/2
|
||||||
|
- Don't ignore Length parameter in tls:recv
|
||||||
|
- Avoid quadratic behavior in reading SSL data
|
||||||
|
- Dix http_bind webserver TLS fail on Chrome (EJAB-1530)
|
||||||
|
|
||||||
|
* Miscelanea
|
||||||
|
- Assume we have only one CPU when an auto-detection fails (EJAB-1516)
|
||||||
|
- Auth: Relax digest-uri handling (EJAB-1529)
|
||||||
|
- Caps: Cache caps timestamp before the IQ-request is done
|
||||||
|
- IRC: Use of MUC password
|
||||||
|
- Private: misc errors cases fixes
|
||||||
|
- Pubsub: return user affiliation for a specified node (EJAB-1294)
|
||||||
|
- Shared Roster: Foreign items were not pushed (EJAB-1509)
|
||||||
|
- Shared Roster LDAP: user substitution in ldap_rfilter (EJAB-1555)
|
||||||
|
- Windows: Fix makefile rules for building DLLs
|
||||||
|
|
||||||
|
|
||||||
|
Bug reports
|
||||||
|
|
||||||
|
You can officially report bugs on ProcessOne support site:
|
||||||
|
http://support.process-one.net/
|
@ -1,2 +1,2 @@
|
|||||||
% ejabberd version (automatically generated).
|
% ejabberd version (automatically generated).
|
||||||
\newcommand{\version}{2.1.x}
|
\newcommand{\version}{2.1.11}
|
||||||
|
@ -170,7 +170,7 @@ LD=link.exe
|
|||||||
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(EXPAT_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(EXPAT_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
||||||
|
|
||||||
$(DLL) : $(OBJECT)
|
$(DLL) : $(OBJECT)
|
||||||
$(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT)
|
$(LD) $(LD_FLAGS) -out:$@ $<
|
||||||
|
|
||||||
$(OBJECT) : $(SOURCE)
|
$(OBJECT) : $(SOURCE)
|
||||||
$(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE)
|
$(CC) $(CC_FLAGS) -c -Fo$@ $<
|
||||||
|
14
src/acl.erl
14
src/acl.erl
@ -181,9 +181,11 @@ match_acl(ACL, JID, Host) ->
|
|||||||
lists:member(Server, ?MYHOSTS)))
|
lists:member(Server, ?MYHOSTS)))
|
||||||
andalso is_regexp_match(User, UR);
|
andalso is_regexp_match(User, UR);
|
||||||
{shared_group, G} ->
|
{shared_group, G} ->
|
||||||
mod_shared_roster:is_user_in_group({User, Server}, G, Host);
|
Mod = loaded_shared_roster_module(Host),
|
||||||
|
Mod:is_user_in_group({User, Server}, G, Host);
|
||||||
{shared_group, G, H} ->
|
{shared_group, G, H} ->
|
||||||
mod_shared_roster:is_user_in_group({User, Server}, G, H);
|
Mod = loaded_shared_roster_module(H),
|
||||||
|
Mod:is_user_in_group({User, Server}, G, H);
|
||||||
{user_regexp, UR, S} ->
|
{user_regexp, UR, S} ->
|
||||||
(S == Server) andalso
|
(S == Server) andalso
|
||||||
is_regexp_match(User, UR);
|
is_regexp_match(User, UR);
|
||||||
@ -238,4 +240,10 @@ is_regexp_match(String, RegExp) ->
|
|||||||
is_glob_match(String, Glob) ->
|
is_glob_match(String, Glob) ->
|
||||||
is_regexp_match(String, ejabberd_regexp:sh_to_awk(Glob)).
|
is_regexp_match(String, ejabberd_regexp:sh_to_awk(Glob)).
|
||||||
|
|
||||||
|
loaded_shared_roster_module(Host) ->
|
||||||
|
case {gen_mod:is_loaded(Host, mod_shared_roster_odbc),
|
||||||
|
gen_mod:is_loaded(Host, mod_shared_roster_ldap)} of
|
||||||
|
{true, _} -> mod_shared_roster_odbc;
|
||||||
|
{_, true} -> mod_shared_roster_ldap;
|
||||||
|
_ -> mod_shared_roster
|
||||||
|
end.
|
||||||
|
@ -380,7 +380,12 @@ do_setopts(#state{procs_num = N} = State, Opts) ->
|
|||||||
shrink_size = ShrinkSize}.
|
shrink_size = ShrinkSize}.
|
||||||
|
|
||||||
get_proc_num() ->
|
get_proc_num() ->
|
||||||
erlang:system_info(logical_processors).
|
case erlang:system_info(logical_processors) of
|
||||||
|
unknown ->
|
||||||
|
1;
|
||||||
|
Num ->
|
||||||
|
Num
|
||||||
|
end.
|
||||||
|
|
||||||
get_proc_by_hash(Tab, Term) ->
|
get_proc_by_hash(Tab, Term) ->
|
||||||
N = erlang:phash2(Term, get_proc_num()) + 1,
|
N = erlang:phash2(Term, get_proc_num()) + 1,
|
||||||
|
@ -37,9 +37,11 @@
|
|||||||
-behaviour(cyrsasl).
|
-behaviour(cyrsasl).
|
||||||
|
|
||||||
-record(state, {step, nonce, username, authzid, get_password, check_password, auth_module,
|
-record(state, {step, nonce, username, authzid, get_password, check_password, auth_module,
|
||||||
host}).
|
host, hostfqdn}).
|
||||||
|
|
||||||
start(_Opts) ->
|
start(_Opts) ->
|
||||||
|
Fqdn = get_local_fqdn(),
|
||||||
|
?INFO_MSG("FQDN used to check DIGEST-MD5 SASL authentication: ~p", [Fqdn]),
|
||||||
cyrsasl:register_mechanism("DIGEST-MD5", ?MODULE, digest).
|
cyrsasl:register_mechanism("DIGEST-MD5", ?MODULE, digest).
|
||||||
|
|
||||||
stop() ->
|
stop() ->
|
||||||
@ -49,6 +51,7 @@ mech_new(Host, GetPassword, _CheckPassword, CheckPasswordDigest) ->
|
|||||||
{ok, #state{step = 1,
|
{ok, #state{step = 1,
|
||||||
nonce = randoms:get_string(),
|
nonce = randoms:get_string(),
|
||||||
host = Host,
|
host = Host,
|
||||||
|
hostfqdn = get_local_fqdn(),
|
||||||
get_password = GetPassword,
|
get_password = GetPassword,
|
||||||
check_password = CheckPasswordDigest}}.
|
check_password = CheckPasswordDigest}}.
|
||||||
|
|
||||||
@ -64,10 +67,11 @@ mech_step(#state{step = 3, nonce = Nonce} = State, ClientIn) ->
|
|||||||
KeyVals ->
|
KeyVals ->
|
||||||
DigestURI = xml:get_attr_s("digest-uri", KeyVals),
|
DigestURI = xml:get_attr_s("digest-uri", KeyVals),
|
||||||
UserName = xml:get_attr_s("username", KeyVals),
|
UserName = xml:get_attr_s("username", KeyVals),
|
||||||
case is_digesturi_valid(DigestURI, State#state.host) of
|
case is_digesturi_valid(DigestURI, State#state.host, State#state.hostfqdn) of
|
||||||
false ->
|
false ->
|
||||||
?DEBUG("User login not authorized because digest-uri "
|
?DEBUG("User login not authorized because digest-uri "
|
||||||
"seems invalid: ~p", [DigestURI]),
|
"seems invalid: ~p (checking for Host ~p, FQDN ~p)", [DigestURI,
|
||||||
|
State#state.host, State#state.hostfqdn]),
|
||||||
{error, "not-authorized", UserName};
|
{error, "not-authorized", UserName};
|
||||||
true ->
|
true ->
|
||||||
AuthzId = xml:get_attr_s("authzid", KeyVals),
|
AuthzId = xml:get_attr_s("authzid", KeyVals),
|
||||||
@ -154,21 +158,35 @@ parse4([], Key, Val, Ts) ->
|
|||||||
%% however ejabberd doesn't allow that.
|
%% however ejabberd doesn't allow that.
|
||||||
%% If the service (for example jabber.example.org)
|
%% If the service (for example jabber.example.org)
|
||||||
%% is provided by several hosts (being one of them server3.example.org),
|
%% is provided by several hosts (being one of them server3.example.org),
|
||||||
%% then digest-uri can be like xmpp/server3.example.org/jabber.example.org
|
%% then acceptable digest-uris would be:
|
||||||
%% In that case, ejabberd only checks the service name, not the host.
|
%% xmpp/server3.example.org/jabber.example.org, xmpp/server3.example.org and
|
||||||
is_digesturi_valid(DigestURICase, JabberHost) ->
|
%% xmpp/jabber.example.org
|
||||||
|
%% The last version is not actually allowed by the RFC, but implemented by popular clients
|
||||||
|
is_digesturi_valid(DigestURICase, JabberDomain, JabberFQDN) ->
|
||||||
DigestURI = stringprep:tolower(DigestURICase),
|
DigestURI = stringprep:tolower(DigestURICase),
|
||||||
case catch string:tokens(DigestURI, "/") of
|
case catch string:tokens(DigestURI, "/") of
|
||||||
["xmpp", Host] when Host == JabberHost ->
|
["xmpp", Host] when (Host == JabberDomain) or (Host == JabberFQDN) ->
|
||||||
true;
|
true;
|
||||||
["xmpp", _Host, ServName] when ServName == JabberHost ->
|
["xmpp", Host, ServName] when (ServName == JabberDomain) and (Host == JabberFQDN) ->
|
||||||
true;
|
true;
|
||||||
_ ->
|
_ ->
|
||||||
false
|
false
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
get_local_fqdn() ->
|
||||||
|
case (catch get_local_fqdn2()) of
|
||||||
|
Str when is_list(Str) -> Str;
|
||||||
|
_ -> "unknown-fqdn, please configure fqdn option in ejabberd.cfg!"
|
||||||
|
end.
|
||||||
|
get_local_fqdn2() ->
|
||||||
|
case ejabberd_config:get_local_option(fqdn) of
|
||||||
|
ConfiguredFqdn when is_list(ConfiguredFqdn) ->
|
||||||
|
ConfiguredFqdn;
|
||||||
|
_undefined ->
|
||||||
|
{ok, Hostname} = inet:gethostname(),
|
||||||
|
{ok, {hostent, Fqdn, _, _, _, _}} = inet:gethostbyname(Hostname),
|
||||||
|
Fqdn
|
||||||
|
end.
|
||||||
|
|
||||||
digit_to_xchar(D) when (D >= 0) and (D < 10) ->
|
digit_to_xchar(D) when (D >= 0) and (D < 10) ->
|
||||||
D + 48;
|
D + 48;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{application, ejabberd,
|
{application, ejabberd,
|
||||||
[{description, "ejabberd"},
|
[{description, "ejabberd"},
|
||||||
{vsn, "2.2.10"},
|
{vsn, "2.2.11"},
|
||||||
{modules, [acl,
|
{modules, [acl,
|
||||||
adhoc,
|
adhoc,
|
||||||
configure,
|
configure,
|
||||||
|
@ -222,6 +222,9 @@
|
|||||||
%% Store the plain passwords or hashed for SCRAM:
|
%% Store the plain passwords or hashed for SCRAM:
|
||||||
%%{auth_password_format, plain}.
|
%%{auth_password_format, plain}.
|
||||||
%%{auth_password_format, scram}.
|
%%{auth_password_format, scram}.
|
||||||
|
%%
|
||||||
|
%% Define the FQDN if ejabberd doesn't detect it:
|
||||||
|
%%{fqdn, "server3.example.com"}.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
%% Authentication using external script
|
%% Authentication using external script
|
||||||
|
@ -88,6 +88,10 @@ commands() ->
|
|||||||
args = [], result = {res, rescode}},
|
args = [], result = {res, rescode}},
|
||||||
#ejabberd_commands{name = stop_kindly, tags = [server],
|
#ejabberd_commands{name = stop_kindly, tags = [server],
|
||||||
desc = "Inform users and rooms, wait, and stop the server",
|
desc = "Inform users and rooms, wait, and stop the server",
|
||||||
|
longdesc = "Provide the delay in seconds, and the "
|
||||||
|
"announcement quoted, for example: \n"
|
||||||
|
"ejabberdctl stop_kindly 60 "
|
||||||
|
"\\\"The server will stop in one minute.\\\"",
|
||||||
module = ?MODULE, function = stop_kindly,
|
module = ?MODULE, function = stop_kindly,
|
||||||
args = [{delay, integer}, {announcement, string}],
|
args = [{delay, integer}, {announcement, string}],
|
||||||
result = {res, rescode}},
|
result = {res, rescode}},
|
||||||
@ -316,7 +320,7 @@ stop_kindly(DelaySeconds, AnnouncementText) ->
|
|||||||
- TimestampStart,
|
- TimestampStart,
|
||||||
io:format("[~p/~p ~ps] ~s... ",
|
io:format("[~p/~p ~ps] ~s... ",
|
||||||
[NumberThis, NumberLast, SecondsDiff, Desc]),
|
[NumberThis, NumberLast, SecondsDiff, Desc]),
|
||||||
Result = apply(Mod, Func, Args),
|
Result = (catch apply(Mod, Func, Args)),
|
||||||
io:format("~p~n", [Result]),
|
io:format("~p~n", [Result]),
|
||||||
NumberThis+1
|
NumberThis+1
|
||||||
end,
|
end,
|
||||||
|
@ -270,7 +270,7 @@ process(_Handlers, #request{method='POST', q=Q, lang=Lang, path=[_, Id]}) ->
|
|||||||
Form =
|
Form =
|
||||||
{xmlelement, "p", [],
|
{xmlelement, "p", [],
|
||||||
[{xmlcdata,
|
[{xmlcdata,
|
||||||
translate:translate(Lang, "The captcha is valid.")
|
translate:translate(Lang, "The CAPTCHA is valid.")
|
||||||
}]},
|
}]},
|
||||||
ejabberd_web:make_xhtml([Form]);
|
ejabberd_web:make_xhtml([Form]);
|
||||||
captcha_non_valid ->
|
captcha_non_valid ->
|
||||||
|
@ -381,6 +381,9 @@ process_term(Term, State) ->
|
|||||||
State;
|
State;
|
||||||
{hosts, _Hosts} ->
|
{hosts, _Hosts} ->
|
||||||
State;
|
State;
|
||||||
|
{fqdn, HostFQDN} ->
|
||||||
|
?DEBUG("FQDN set to: ~p", [HostFQDN]),
|
||||||
|
add_option(fqdn, HostFQDN, State);
|
||||||
{host_config, Host, Terms} ->
|
{host_config, Host, Terms} ->
|
||||||
lists:foldl(fun(T, S) -> process_host_term(T, Host, S) end,
|
lists:foldl(fun(T, S) -> process_host_term(T, Host, S) end,
|
||||||
State, Terms);
|
State, Terms);
|
||||||
|
@ -294,7 +294,7 @@ accept(ListenSocket, Module, Opts, Interval) ->
|
|||||||
CallMod:start(strip_frontend(Module), gen_tcp, Socket, Opts),
|
CallMod:start(strip_frontend(Module), gen_tcp, Socket, Opts),
|
||||||
accept(ListenSocket, Module, Opts, NewInterval);
|
accept(ListenSocket, Module, Opts, NewInterval);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?INFO_MSG("(~w) Failed TCP accept: ~w",
|
?ERROR_MSG("(~w) Failed TCP accept: ~w",
|
||||||
[ListenSocket, Reason]),
|
[ListenSocket, Reason]),
|
||||||
accept(ListenSocket, Module, Opts, NewInterval)
|
accept(ListenSocket, Module, Opts, NewInterval)
|
||||||
end.
|
end.
|
||||||
|
@ -69,6 +69,7 @@ update(ModulesToUpdate) ->
|
|||||||
|
|
||||||
%% OTP R14B03 and older provided release_handler_1:eval_script/3
|
%% OTP R14B03 and older provided release_handler_1:eval_script/3
|
||||||
%% But OTP R14B04 and newer provide release_handler_1:eval_script/5
|
%% But OTP R14B04 and newer provide release_handler_1:eval_script/5
|
||||||
|
%% Dialyzer reports a call to missing function; don't worry.
|
||||||
eval_script(Script, Apps, LibDirs) ->
|
eval_script(Script, Apps, LibDirs) ->
|
||||||
case lists:member({eval_script, 5}, release_handler_1:module_info(exports)) of
|
case lists:member({eval_script, 5}, release_handler_1:module_info(exports)) of
|
||||||
true ->
|
true ->
|
||||||
@ -143,6 +144,8 @@ build_script(Dir, UpdatedBeams) ->
|
|||||||
[{ejabberd, "", filename:join(Dir, "..")}]),
|
[{ejabberd, "", filename:join(Dir, "..")}]),
|
||||||
case Check of
|
case Check of
|
||||||
ok ->
|
ok ->
|
||||||
|
%% This clause is for OTP R14B03 and older.
|
||||||
|
%% Newer Dialyzer reports a never match pattern; don't worry.
|
||||||
?DEBUG("script: ~p~n", [Script]),
|
?DEBUG("script: ~p~n", [Script]),
|
||||||
?DEBUG("low level script: ~p~n", [LowLevelScript]),
|
?DEBUG("low level script: ~p~n", [LowLevelScript]),
|
||||||
?DEBUG("check: ~p~n", [Check]);
|
?DEBUG("check: ~p~n", [Check]);
|
||||||
|
@ -29,8 +29,8 @@ LD=link.exe
|
|||||||
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(ZLIB_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(ZLIB_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
||||||
|
|
||||||
$(DLL) : $(OBJECT)
|
$(DLL) : $(OBJECT)
|
||||||
$(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT)
|
$(LD) $(LD_FLAGS) -out:$@ $<
|
||||||
|
|
||||||
$(OBJECT) : $(SOURCE)
|
$(OBJECT) : $(SOURCE)
|
||||||
$(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE)
|
$(CC) $(CC_FLAGS) -c -Fo$@ $<
|
||||||
|
|
||||||
|
200
src/ejd2odbc.erl
200
src/ejd2odbc.erl
@ -34,15 +34,26 @@
|
|||||||
export_last/2,
|
export_last/2,
|
||||||
export_vcard/2,
|
export_vcard/2,
|
||||||
export_vcard_search/2,
|
export_vcard_search/2,
|
||||||
export_private_storage/2]).
|
export_vcard_xupdate/2,
|
||||||
|
export_private_storage/2,
|
||||||
|
export_privacy/2,
|
||||||
|
export_motd/2,
|
||||||
|
export_motd_users/2,
|
||||||
|
export_irc_custom/2,
|
||||||
|
export_sr_group/2,
|
||||||
|
export_sr_user/2,
|
||||||
|
export_muc_room/2,
|
||||||
|
export_muc_registered/2]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
-include("jlib.hrl").
|
-include("jlib.hrl").
|
||||||
-include("mod_roster.hrl").
|
-include("mod_roster.hrl").
|
||||||
|
-include("mod_privacy.hrl").
|
||||||
|
|
||||||
-record(offline_msg, {us, timestamp, expire, from, to, packet}).
|
-record(offline_msg, {us, timestamp, expire, from, to, packet}).
|
||||||
-record(last_activity, {us, timestamp, status}).
|
-record(last_activity, {us, timestamp, status}).
|
||||||
-record(vcard, {us, vcard}).
|
-record(vcard, {us, vcard}).
|
||||||
|
-record(vcard_xupdate, {us, hash}).
|
||||||
-record(vcard_search, {us,
|
-record(vcard_search, {us,
|
||||||
user, luser,
|
user, luser,
|
||||||
fn, lfn,
|
fn, lfn,
|
||||||
@ -58,6 +69,13 @@
|
|||||||
orgunit, lorgunit
|
orgunit, lorgunit
|
||||||
}).
|
}).
|
||||||
-record(private_storage, {usns, xml}).
|
-record(private_storage, {usns, xml}).
|
||||||
|
-record(irc_custom, {us_host, data}).
|
||||||
|
-record(muc_room, {name_host, opts}).
|
||||||
|
-record(muc_registered, {us_host, nick}).
|
||||||
|
-record(sr_group, {group_host, opts}).
|
||||||
|
-record(sr_user, {us, group_host}).
|
||||||
|
-record(motd, {server, packet}).
|
||||||
|
-record(motd_users, {us, dummy = []}).
|
||||||
|
|
||||||
-define(MAX_RECORDS_PER_TRANSACTION, 1000).
|
-define(MAX_RECORDS_PER_TRANSACTION, 1000).
|
||||||
|
|
||||||
@ -250,6 +268,20 @@ export_vcard_search(Server, Output) ->
|
|||||||
[]
|
[]
|
||||||
end).
|
end).
|
||||||
|
|
||||||
|
export_vcard_xupdate(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, vcard_xupdate, Output,
|
||||||
|
fun(Host, #vcard_xupdate{us = {LUser, LServer}, hash = Hash})
|
||||||
|
when LServer == Host ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
SHash = ejabberd_odbc:escape(Hash),
|
||||||
|
["delete from vcard_xupdate where username='", Username, "';"
|
||||||
|
"insert into vcard_xupdate(username, hash) "
|
||||||
|
"values ('", Username, "', '", SHash, "');"];
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
export_private_storage(Server, Output) ->
|
export_private_storage(Server, Output) ->
|
||||||
export_common(
|
export_common(
|
||||||
Server, private_storage, Output,
|
Server, private_storage, Output,
|
||||||
@ -265,6 +297,167 @@ export_private_storage(Server, Output) ->
|
|||||||
[]
|
[]
|
||||||
end).
|
end).
|
||||||
|
|
||||||
|
export_muc_room(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, muc_room, Output,
|
||||||
|
fun(Host, #muc_room{name_host = {Name, RoomHost}, opts = Opts}) ->
|
||||||
|
case lists:suffix(Host, RoomHost) of
|
||||||
|
true ->
|
||||||
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
SRoomHost = ejabberd_odbc:escape(RoomHost),
|
||||||
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
|
["delete from muc_room where name='", SName,
|
||||||
|
"' and host='", SRoomHost, "';",
|
||||||
|
"insert into muc_room(name, host, opts) values (",
|
||||||
|
"'", SName, "', '", SRoomHost, "', '", SOpts, "');"];
|
||||||
|
false ->
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_muc_registered(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, muc_registered, Output,
|
||||||
|
fun(Host, #muc_registered{us_host = {{U, S}, RoomHost}, nick = Nick}) ->
|
||||||
|
case lists:suffix(Host, RoomHost) of
|
||||||
|
true ->
|
||||||
|
SJID = ejabberd_odbc:escape(
|
||||||
|
jlib:jid_to_string(
|
||||||
|
jlib:make_jid(U, S, ""))),
|
||||||
|
SNick = ejabberd_odbc:escape(Nick),
|
||||||
|
SRoomHost = ejabberd_odbc:escape(RoomHost),
|
||||||
|
["delete from muc_registered where jid='", SJID,
|
||||||
|
"' and host='", SRoomHost, "';"
|
||||||
|
"insert into muc_registered(jid, host, nick) values ("
|
||||||
|
"'", SJID, "', '", SRoomHost, "', '", SNick, "');"];
|
||||||
|
false ->
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_irc_custom(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, irc_custom, Output,
|
||||||
|
fun(Host, #irc_custom{us_host = {{U, S}, IRCHost}, data = Data}) ->
|
||||||
|
case lists:suffix(Host, IRCHost) of
|
||||||
|
true ->
|
||||||
|
SJID = ejabberd_odbc:escape(
|
||||||
|
jlib:jid_to_string(
|
||||||
|
jlib:make_jid(U, S, ""))),
|
||||||
|
SIRCHost = ejabberd_odbc:escape(IRCHost),
|
||||||
|
SData = ejabberd_odbc:encode_term(Data),
|
||||||
|
["delete from irc_custom where jid='", SJID,
|
||||||
|
"' and host='", SIRCHost, "';"
|
||||||
|
"insert into irc_custom(jid, host, data) values ("
|
||||||
|
"'", SJID, "', '", SIRCHost, "', '", SData, "');"];
|
||||||
|
false ->
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_privacy(Server, Output) ->
|
||||||
|
case ejabberd_odbc:sql_query(
|
||||||
|
jlib:nameprep(Server),
|
||||||
|
["select id from privacy_list order by id desc limit 1;"]) of
|
||||||
|
{selected, ["id"], [{I}]} ->
|
||||||
|
put(id, list_to_integer(I));
|
||||||
|
_ ->
|
||||||
|
put(id, 0)
|
||||||
|
end,
|
||||||
|
export_common(
|
||||||
|
Server, privacy, Output,
|
||||||
|
fun(Host, #privacy{us = {LUser, LServer},
|
||||||
|
lists = Lists,
|
||||||
|
default = Default}) when LServer == Host ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
if Default /= none ->
|
||||||
|
SDefault = ejabberd_odbc:escape(Default),
|
||||||
|
["delete from privacy_default_list where ",
|
||||||
|
"username='", Username, "';",
|
||||||
|
"insert into privacy_default_list(username, name) ",
|
||||||
|
"values ('", Username, "', '", SDefault, "');"];
|
||||||
|
true ->
|
||||||
|
[]
|
||||||
|
end ++
|
||||||
|
lists:flatmap(
|
||||||
|
fun({Name, List}) ->
|
||||||
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
RItems = lists:map(
|
||||||
|
fun mod_privacy_odbc:item_to_raw/1,
|
||||||
|
List),
|
||||||
|
ID = integer_to_list(get_id()),
|
||||||
|
["delete from privacy_list "
|
||||||
|
"where username='", Username, "' and name='", SName, "';"
|
||||||
|
"insert into privacy_list(username, name, id) "
|
||||||
|
"values ('", Username, "', '", SName, "', '", ID, "');",
|
||||||
|
"delete from privacy_list_data where id='", ID, "';"
|
||||||
|
|[["insert into privacy_list_data("
|
||||||
|
"id, t, value, action, ord, match_all, match_iq, "
|
||||||
|
"match_message, match_presence_in, "
|
||||||
|
"match_presence_out) values ('", ID, "', '",
|
||||||
|
string:join(Items, "', '"), "');"] || Items <- RItems]]
|
||||||
|
end, Lists);
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_sr_group(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, sr_group, Output,
|
||||||
|
fun(Host, #sr_group{group_host = {Group, LServer}, opts = Opts})
|
||||||
|
when LServer == Host ->
|
||||||
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
|
["delete from sr_group where name='", Group, "';"
|
||||||
|
"insert into sr_group(name, opts) values ('",
|
||||||
|
SGroup, "', '", SOpts, "');"];
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_sr_user(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, sr_user, Output,
|
||||||
|
fun(Host, #sr_user{us = {U, S}, group_host = {Group, LServer}})
|
||||||
|
when LServer == Host ->
|
||||||
|
SGroup = ejabberd_odbc:escape(Group),
|
||||||
|
SJID = ejabberd_odbc:escape(
|
||||||
|
jlib:jid_to_string(
|
||||||
|
jlib:jid_tolower(
|
||||||
|
jlib:make_jid(U, S, "")))),
|
||||||
|
["delete from sr_user where jid='", SJID,
|
||||||
|
"'and grp='", Group, "';"
|
||||||
|
"insert into sr_user(jid, grp) values ('",
|
||||||
|
SJID, "', '", SGroup, "');"];
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_motd(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, motd, Output,
|
||||||
|
fun(Host, #motd{server = LServer, packet = El})
|
||||||
|
when LServer == Host ->
|
||||||
|
["delete from motd where username='';"
|
||||||
|
"insert into motd(username, xml) values ('', '",
|
||||||
|
ejabberd_odbc:escape(xml:element_to_binary(El)), "');"];
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
|
export_motd_users(Server, Output) ->
|
||||||
|
export_common(
|
||||||
|
Server, motd_users, Output,
|
||||||
|
fun(Host, #motd_users{us = {LUser, LServer}})
|
||||||
|
when LServer == Host, LUser /= "" ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
["delete from motd where username='", Username, "';"
|
||||||
|
"insert into motd(username, xml) values ('",
|
||||||
|
Username, "', '');"];
|
||||||
|
(_Host, _R) ->
|
||||||
|
[]
|
||||||
|
end).
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% Internal functions
|
%%% Internal functions
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
@ -363,3 +556,8 @@ groups_to_string(#roster{usj = {User, _Server, JID},
|
|||||||
"'", Username, "',"
|
"'", Username, "',"
|
||||||
"'", SJID, "',"
|
"'", SJID, "',"
|
||||||
"'", ejabberd_odbc:escape(Group), "')"] || Group <- Groups].
|
"'", ejabberd_odbc:escape(Group), "')"] || Group <- Groups].
|
||||||
|
|
||||||
|
get_id() ->
|
||||||
|
ID = get(id),
|
||||||
|
put(id, ID+1),
|
||||||
|
ID+1.
|
||||||
|
@ -439,6 +439,7 @@ init([]) ->
|
|||||||
end;
|
end;
|
||||||
init({Hosts, Port, Rootdn, Passwd, Opts}) ->
|
init({Hosts, Port, Rootdn, Passwd, Opts}) ->
|
||||||
catch ssl:start(),
|
catch ssl:start(),
|
||||||
|
%% ssl:seed was removed in OTP R14B04, newer Dialyzer will complain
|
||||||
catch ssl:seed(randoms:get_string()),
|
catch ssl:seed(randoms:get_string()),
|
||||||
Encrypt = case proplists:get_value(encrypt, Opts) of
|
Encrypt = case proplists:get_value(encrypt, Opts) of
|
||||||
tls -> tls;
|
tls -> tls;
|
||||||
|
885
src/mod_announce_odbc.erl
Normal file
885
src/mod_announce_odbc.erl
Normal file
@ -0,0 +1,885 @@
|
|||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
%%% File : mod_announce_odbc.erl
|
||||||
|
%%% Author : Alexey Shchepin <alexey@process-one.net>
|
||||||
|
%%% Purpose : Manage announce messages
|
||||||
|
%%% Created : 11 Aug 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
|
%%%
|
||||||
|
%%%
|
||||||
|
%%% ejabberd, Copyright (C) 2002-2012 ProcessOne
|
||||||
|
%%%
|
||||||
|
%%% This program is free software; you can redistribute it and/or
|
||||||
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
|
%%% published by the Free Software Foundation; either version 2 of the
|
||||||
|
%%% License, or (at your option) any later version.
|
||||||
|
%%%
|
||||||
|
%%% This program is distributed in the hope that it will be useful,
|
||||||
|
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
%%% General Public License for more details.
|
||||||
|
%%%
|
||||||
|
%%% You should have received a copy of the GNU General Public License
|
||||||
|
%%% along with this program; if not, write to the Free Software
|
||||||
|
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
%%% 02111-1307 USA
|
||||||
|
%%%
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
%%% Implements a small subset of XEP-0133: Service Administration
|
||||||
|
%%% Version 1.1 (2005-08-19)
|
||||||
|
|
||||||
|
-module(mod_announce_odbc).
|
||||||
|
-author('alexey@process-one.net').
|
||||||
|
|
||||||
|
-behaviour(gen_mod).
|
||||||
|
|
||||||
|
-export([start/2,
|
||||||
|
init/0,
|
||||||
|
stop/1,
|
||||||
|
announce/3,
|
||||||
|
send_motd/1,
|
||||||
|
disco_identity/5,
|
||||||
|
disco_features/5,
|
||||||
|
disco_items/5,
|
||||||
|
send_announcement_to_all/3,
|
||||||
|
announce_commands/4,
|
||||||
|
announce_items/4]).
|
||||||
|
|
||||||
|
-include("ejabberd.hrl").
|
||||||
|
-include("jlib.hrl").
|
||||||
|
-include("adhoc.hrl").
|
||||||
|
|
||||||
|
-define(PROCNAME, ejabberd_announce).
|
||||||
|
|
||||||
|
-define(NS_ADMINL(Sub), ["http:","jabber.org","protocol","admin", Sub]).
|
||||||
|
tokenize(Node) -> string:tokens(Node, "/#").
|
||||||
|
|
||||||
|
start(Host, _Opts) ->
|
||||||
|
ejabberd_hooks:add(local_send_to_resource_hook, Host,
|
||||||
|
?MODULE, announce, 50),
|
||||||
|
ejabberd_hooks:add(disco_local_identity, Host, ?MODULE, disco_identity, 50),
|
||||||
|
ejabberd_hooks:add(disco_local_features, Host, ?MODULE, disco_features, 50),
|
||||||
|
ejabberd_hooks:add(disco_local_items, Host, ?MODULE, disco_items, 50),
|
||||||
|
ejabberd_hooks:add(adhoc_local_items, Host, ?MODULE, announce_items, 50),
|
||||||
|
ejabberd_hooks:add(adhoc_local_commands, Host, ?MODULE, announce_commands, 50),
|
||||||
|
ejabberd_hooks:add(user_available_hook, Host,
|
||||||
|
?MODULE, send_motd, 50),
|
||||||
|
register(gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
proc_lib:spawn(?MODULE, init, [])).
|
||||||
|
|
||||||
|
init() ->
|
||||||
|
loop().
|
||||||
|
|
||||||
|
loop() ->
|
||||||
|
receive
|
||||||
|
{announce_all, From, To, Packet} ->
|
||||||
|
announce_all(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_all_hosts_all, From, To, Packet} ->
|
||||||
|
announce_all_hosts_all(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_online, From, To, Packet} ->
|
||||||
|
announce_online(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_all_hosts_online, From, To, Packet} ->
|
||||||
|
announce_all_hosts_online(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_motd, From, To, Packet} ->
|
||||||
|
announce_motd(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_all_hosts_motd, From, To, Packet} ->
|
||||||
|
announce_all_hosts_motd(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_motd_update, From, To, Packet} ->
|
||||||
|
announce_motd_update(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_all_hosts_motd_update, From, To, Packet} ->
|
||||||
|
announce_all_hosts_motd_update(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_motd_delete, From, To, Packet} ->
|
||||||
|
announce_motd_delete(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
{announce_all_hosts_motd_delete, From, To, Packet} ->
|
||||||
|
announce_all_hosts_motd_delete(From, To, Packet),
|
||||||
|
loop();
|
||||||
|
_ ->
|
||||||
|
loop()
|
||||||
|
end.
|
||||||
|
|
||||||
|
stop(Host) ->
|
||||||
|
ejabberd_hooks:delete(adhoc_local_commands, Host, ?MODULE, announce_commands, 50),
|
||||||
|
ejabberd_hooks:delete(adhoc_local_items, Host, ?MODULE, announce_items, 50),
|
||||||
|
ejabberd_hooks:delete(disco_local_identity, Host, ?MODULE, disco_identity, 50),
|
||||||
|
ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, disco_features, 50),
|
||||||
|
ejabberd_hooks:delete(disco_local_items, Host, ?MODULE, disco_items, 50),
|
||||||
|
ejabberd_hooks:delete(local_send_to_resource_hook, Host,
|
||||||
|
?MODULE, announce, 50),
|
||||||
|
ejabberd_hooks:delete(user_available_hook, Host,
|
||||||
|
?MODULE, send_motd, 50),
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
exit(whereis(Proc), stop),
|
||||||
|
{wait, Proc}.
|
||||||
|
|
||||||
|
%% Announcing via messages to a custom resource
|
||||||
|
announce(From, To, Packet) ->
|
||||||
|
case To of
|
||||||
|
#jid{luser = "", lresource = Res} ->
|
||||||
|
{xmlelement, Name, _Attrs, _Els} = Packet,
|
||||||
|
Proc = gen_mod:get_module_proc(To#jid.lserver, ?PROCNAME),
|
||||||
|
case {Res, Name} of
|
||||||
|
{"announce/all", "message"} ->
|
||||||
|
Proc ! {announce_all, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/all-hosts/all", "message"} ->
|
||||||
|
Proc ! {announce_all_hosts_all, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/online", "message"} ->
|
||||||
|
Proc ! {announce_online, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/all-hosts/online", "message"} ->
|
||||||
|
Proc ! {announce_all_hosts_online, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/motd", "message"} ->
|
||||||
|
Proc ! {announce_motd, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/all-hosts/motd", "message"} ->
|
||||||
|
Proc ! {announce_all_hosts_motd, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/motd/update", "message"} ->
|
||||||
|
Proc ! {announce_motd_update, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/all-hosts/motd/update", "message"} ->
|
||||||
|
Proc ! {announce_all_hosts_motd_update, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/motd/delete", "message"} ->
|
||||||
|
Proc ! {announce_motd_delete, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
{"announce/all-hosts/motd/delete", "message"} ->
|
||||||
|
Proc ! {announce_all_hosts_motd_delete, From, To, Packet},
|
||||||
|
stop;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
%% Announcing via ad-hoc commands
|
||||||
|
-define(INFO_COMMAND(Lang, Node),
|
||||||
|
[{xmlelement, "identity",
|
||||||
|
[{"category", "automation"},
|
||||||
|
{"type", "command-node"},
|
||||||
|
{"name", get_title(Lang, Node)}], []}]).
|
||||||
|
|
||||||
|
disco_identity(Acc, _From, _To, Node, Lang) ->
|
||||||
|
LNode = tokenize(Node),
|
||||||
|
case LNode of
|
||||||
|
?NS_ADMINL("announce") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("announce-allhosts") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("announce-all") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("announce-all-allhosts") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("set-motd") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("set-motd-allhosts") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("edit-motd") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("edit-motd-allhosts") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("delete-motd") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
?NS_ADMINL("delete-motd-allhosts") ->
|
||||||
|
?INFO_COMMAND(Lang, Node);
|
||||||
|
_ ->
|
||||||
|
Acc
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-define(INFO_RESULT(Allow, Feats),
|
||||||
|
case Allow of
|
||||||
|
deny ->
|
||||||
|
{error, ?ERR_FORBIDDEN};
|
||||||
|
allow ->
|
||||||
|
{result, Feats}
|
||||||
|
end).
|
||||||
|
|
||||||
|
disco_features(Acc, From, #jid{lserver = LServer} = _To,
|
||||||
|
"announce", _Lang) ->
|
||||||
|
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||||
|
false ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Access1 = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Access2 = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case {acl:match_rule(LServer, Access1, From),
|
||||||
|
acl:match_rule(global, Access2, From)} of
|
||||||
|
{deny, deny} ->
|
||||||
|
{error, ?ERR_FORBIDDEN};
|
||||||
|
_ ->
|
||||||
|
{result, []}
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
disco_features(Acc, From, #jid{lserver = LServer} = _To,
|
||||||
|
Node, _Lang) ->
|
||||||
|
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||||
|
false ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Access = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Allow = acl:match_rule(LServer, Access, From),
|
||||||
|
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
|
||||||
|
case Node of
|
||||||
|
?NS_ADMIN ++ "#announce" ->
|
||||||
|
?INFO_RESULT(Allow, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#announce-all" ->
|
||||||
|
?INFO_RESULT(Allow, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#set-motd" ->
|
||||||
|
?INFO_RESULT(Allow, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#edit-motd" ->
|
||||||
|
?INFO_RESULT(Allow, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#delete-motd" ->
|
||||||
|
?INFO_RESULT(Allow, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#announce-allhosts" ->
|
||||||
|
?INFO_RESULT(AllowGlobal, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#announce-all-allhosts" ->
|
||||||
|
?INFO_RESULT(AllowGlobal, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#set-motd-allhosts" ->
|
||||||
|
?INFO_RESULT(AllowGlobal, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#edit-motd-allhosts" ->
|
||||||
|
?INFO_RESULT(AllowGlobal, [?NS_COMMANDS]);
|
||||||
|
?NS_ADMIN ++ "#delete-motd-allhosts" ->
|
||||||
|
?INFO_RESULT(AllowGlobal, [?NS_COMMANDS]);
|
||||||
|
_ ->
|
||||||
|
Acc
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-define(NODE_TO_ITEM(Lang, Server, Node),
|
||||||
|
{xmlelement, "item",
|
||||||
|
[{"jid", Server},
|
||||||
|
{"node", Node},
|
||||||
|
{"name", get_title(Lang, Node)}],
|
||||||
|
[]}).
|
||||||
|
|
||||||
|
-define(ITEMS_RESULT(Allow, Items),
|
||||||
|
case Allow of
|
||||||
|
deny ->
|
||||||
|
{error, ?ERR_FORBIDDEN};
|
||||||
|
allow ->
|
||||||
|
{result, Items}
|
||||||
|
end).
|
||||||
|
|
||||||
|
disco_items(Acc, From, #jid{lserver = LServer, server = Server} = _To,
|
||||||
|
"", Lang) ->
|
||||||
|
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||||
|
false ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Access1 = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Access2 = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case {acl:match_rule(LServer, Access1, From),
|
||||||
|
acl:match_rule(global, Access2, From)} of
|
||||||
|
{deny, deny} ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Items = case Acc of
|
||||||
|
{result, I} -> I;
|
||||||
|
_ -> []
|
||||||
|
end,
|
||||||
|
Nodes = [?NODE_TO_ITEM(Lang, Server, "announce")],
|
||||||
|
{result, Items ++ Nodes}
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
disco_items(Acc, From, #jid{lserver = LServer} = To, "announce", Lang) ->
|
||||||
|
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||||
|
false ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
announce_items(Acc, From, To, Lang)
|
||||||
|
end;
|
||||||
|
|
||||||
|
disco_items(Acc, From, #jid{lserver = LServer} = _To, Node, _Lang) ->
|
||||||
|
case gen_mod:is_loaded(LServer, mod_adhoc) of
|
||||||
|
false ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Access = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Allow = acl:match_rule(LServer, Access, From),
|
||||||
|
AccessGlobal = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
AllowGlobal = acl:match_rule(global, AccessGlobal, From),
|
||||||
|
case Node of
|
||||||
|
?NS_ADMIN ++ "#announce" ->
|
||||||
|
?ITEMS_RESULT(Allow, []);
|
||||||
|
?NS_ADMIN ++ "#announce-all" ->
|
||||||
|
?ITEMS_RESULT(Allow, []);
|
||||||
|
?NS_ADMIN ++ "#set-motd" ->
|
||||||
|
?ITEMS_RESULT(Allow, []);
|
||||||
|
?NS_ADMIN ++ "#edit-motd" ->
|
||||||
|
?ITEMS_RESULT(Allow, []);
|
||||||
|
?NS_ADMIN ++ "#delete-motd" ->
|
||||||
|
?ITEMS_RESULT(Allow, []);
|
||||||
|
?NS_ADMIN ++ "#announce-allhosts" ->
|
||||||
|
?ITEMS_RESULT(AllowGlobal, []);
|
||||||
|
?NS_ADMIN ++ "#announce-all-allhosts" ->
|
||||||
|
?ITEMS_RESULT(AllowGlobal, []);
|
||||||
|
?NS_ADMIN ++ "#set-motd-allhosts" ->
|
||||||
|
?ITEMS_RESULT(AllowGlobal, []);
|
||||||
|
?NS_ADMIN ++ "#edit-motd-allhosts" ->
|
||||||
|
?ITEMS_RESULT(AllowGlobal, []);
|
||||||
|
?NS_ADMIN ++ "#delete-motd-allhosts" ->
|
||||||
|
?ITEMS_RESULT(AllowGlobal, []);
|
||||||
|
_ ->
|
||||||
|
Acc
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
announce_items(Acc, From, #jid{lserver = LServer, server = Server} = _To, Lang) ->
|
||||||
|
Access1 = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Nodes1 = case acl:match_rule(LServer, Access1, From) of
|
||||||
|
allow ->
|
||||||
|
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#announce"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#announce-all"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#set-motd"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#edit-motd"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#delete-motd")];
|
||||||
|
deny ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
Access2 = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
Nodes2 = case acl:match_rule(global, Access2, From) of
|
||||||
|
allow ->
|
||||||
|
[?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#announce-allhosts"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#announce-all-allhosts"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#set-motd-allhosts"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#edit-motd-allhosts"),
|
||||||
|
?NODE_TO_ITEM(Lang, Server, ?NS_ADMIN ++ "#delete-motd-allhosts")];
|
||||||
|
deny ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
case {Nodes1, Nodes2} of
|
||||||
|
{[], []} ->
|
||||||
|
Acc;
|
||||||
|
_ ->
|
||||||
|
Items = case Acc of
|
||||||
|
{result, I} -> I;
|
||||||
|
_ -> []
|
||||||
|
end,
|
||||||
|
{result, Items ++ Nodes1 ++ Nodes2}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
commands_result(Allow, From, To, Request) ->
|
||||||
|
case Allow of
|
||||||
|
deny ->
|
||||||
|
{error, ?ERR_FORBIDDEN};
|
||||||
|
allow ->
|
||||||
|
announce_commands(From, To, Request)
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
announce_commands(Acc, From, #jid{lserver = LServer} = To,
|
||||||
|
#adhoc_request{ node = Node} = Request) ->
|
||||||
|
LNode = tokenize(Node),
|
||||||
|
F = fun() ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
Allow = acl:match_rule(global, Access, From),
|
||||||
|
commands_result(Allow, From, To, Request)
|
||||||
|
end,
|
||||||
|
R = case LNode of
|
||||||
|
?NS_ADMINL("announce-allhosts") -> F();
|
||||||
|
?NS_ADMINL("announce-all-allhosts") -> F();
|
||||||
|
?NS_ADMINL("set-motd-allhosts") -> F();
|
||||||
|
?NS_ADMINL("edit-motd-allhosts") -> F();
|
||||||
|
?NS_ADMINL("delete-motd-allhosts") -> F();
|
||||||
|
_ ->
|
||||||
|
Access = gen_mod:get_module_opt(LServer, ?MODULE, access, none),
|
||||||
|
Allow = acl:match_rule(LServer, Access, From),
|
||||||
|
case LNode of
|
||||||
|
?NS_ADMINL("announce") ->
|
||||||
|
commands_result(Allow, From, To, Request);
|
||||||
|
?NS_ADMINL("announce-all") ->
|
||||||
|
commands_result(Allow, From, To, Request);
|
||||||
|
?NS_ADMINL("set-motd") ->
|
||||||
|
commands_result(Allow, From, To, Request);
|
||||||
|
?NS_ADMINL("edit-motd") ->
|
||||||
|
commands_result(Allow, From, To, Request);
|
||||||
|
?NS_ADMINL("delete-motd") ->
|
||||||
|
commands_result(Allow, From, To, Request);
|
||||||
|
_ ->
|
||||||
|
unknown
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
case R of
|
||||||
|
unknown -> Acc;
|
||||||
|
_ -> {stop, R}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
announce_commands(From, To,
|
||||||
|
#adhoc_request{lang = Lang,
|
||||||
|
node = Node,
|
||||||
|
action = Action,
|
||||||
|
xdata = XData} = Request) ->
|
||||||
|
%% If the "action" attribute is not present, it is
|
||||||
|
%% understood as "execute". If there was no <actions/>
|
||||||
|
%% element in the first response (which there isn't in our
|
||||||
|
%% case), "execute" and "complete" are equivalent.
|
||||||
|
ActionIsExecute = lists:member(Action,
|
||||||
|
["", "execute", "complete"]),
|
||||||
|
if Action == "cancel" ->
|
||||||
|
%% User cancels request
|
||||||
|
adhoc:produce_response(Request,
|
||||||
|
#adhoc_response{status = canceled});
|
||||||
|
XData == false, ActionIsExecute ->
|
||||||
|
%% User requests form
|
||||||
|
Elements = generate_adhoc_form(Lang, Node, To#jid.lserver),
|
||||||
|
adhoc:produce_response(
|
||||||
|
Request,
|
||||||
|
#adhoc_response{status = executing,
|
||||||
|
elements = [Elements]});
|
||||||
|
XData /= false, ActionIsExecute ->
|
||||||
|
%% User returns form.
|
||||||
|
case jlib:parse_xdata_submit(XData) of
|
||||||
|
invalid ->
|
||||||
|
{error, ?ERR_BAD_REQUEST};
|
||||||
|
Fields ->
|
||||||
|
handle_adhoc_form(From, To, Request, Fields)
|
||||||
|
end;
|
||||||
|
true ->
|
||||||
|
{error, ?ERR_BAD_REQUEST}
|
||||||
|
end.
|
||||||
|
|
||||||
|
-define(VVALUE(Val),
|
||||||
|
{xmlelement, "value", [], [{xmlcdata, Val}]}).
|
||||||
|
-define(TVFIELD(Type, Var, Val),
|
||||||
|
{xmlelement, "field", [{"type", Type},
|
||||||
|
{"var", Var}],
|
||||||
|
vvaluel(Val)}).
|
||||||
|
-define(HFIELD(), ?TVFIELD("hidden", "FORM_TYPE", ?NS_ADMIN)).
|
||||||
|
|
||||||
|
vvaluel(Val) ->
|
||||||
|
case Val of
|
||||||
|
"" -> [];
|
||||||
|
_ -> [?VVALUE(Val)]
|
||||||
|
end.
|
||||||
|
|
||||||
|
generate_adhoc_form(Lang, Node, ServerHost) ->
|
||||||
|
LNode = tokenize(Node),
|
||||||
|
{OldSubject, OldBody} = if (LNode == ?NS_ADMINL("edit-motd"))
|
||||||
|
or (LNode == ?NS_ADMINL("edit-motd-allhosts")) ->
|
||||||
|
get_stored_motd(ServerHost);
|
||||||
|
true ->
|
||||||
|
{[], []}
|
||||||
|
end,
|
||||||
|
{xmlelement, "x",
|
||||||
|
[{"xmlns", ?NS_XDATA},
|
||||||
|
{"type", "form"}],
|
||||||
|
[?HFIELD(),
|
||||||
|
{xmlelement, "title", [], [{xmlcdata, get_title(Lang, Node)}]}]
|
||||||
|
++
|
||||||
|
if (LNode == ?NS_ADMINL("delete-motd"))
|
||||||
|
or (LNode == ?NS_ADMINL("delete-motd-allhosts")) ->
|
||||||
|
[{xmlelement, "field",
|
||||||
|
[{"var", "confirm"},
|
||||||
|
{"type", "boolean"},
|
||||||
|
{"label", translate:translate(Lang, "Really delete message of the day?")}],
|
||||||
|
[{xmlelement, "value",
|
||||||
|
[],
|
||||||
|
[{xmlcdata, "true"}]}]}];
|
||||||
|
true ->
|
||||||
|
[{xmlelement, "field",
|
||||||
|
[{"var", "subject"},
|
||||||
|
{"type", "text-single"},
|
||||||
|
{"label", translate:translate(Lang, "Subject")}],
|
||||||
|
vvaluel(OldSubject)},
|
||||||
|
{xmlelement, "field",
|
||||||
|
[{"var", "body"},
|
||||||
|
{"type", "text-multi"},
|
||||||
|
{"label", translate:translate(Lang, "Message body")}],
|
||||||
|
vvaluel(OldBody)}]
|
||||||
|
end}.
|
||||||
|
|
||||||
|
join_lines([]) ->
|
||||||
|
[];
|
||||||
|
join_lines(Lines) ->
|
||||||
|
join_lines(Lines, []).
|
||||||
|
join_lines([Line|Lines], Acc) ->
|
||||||
|
join_lines(Lines, ["\n",Line|Acc]);
|
||||||
|
join_lines([], Acc) ->
|
||||||
|
%% Remove last newline
|
||||||
|
lists:flatten(lists:reverse(tl(Acc))).
|
||||||
|
|
||||||
|
handle_adhoc_form(From, #jid{lserver = LServer} = To,
|
||||||
|
#adhoc_request{lang = Lang,
|
||||||
|
node = Node,
|
||||||
|
sessionid = SessionID},
|
||||||
|
Fields) ->
|
||||||
|
Confirm = case lists:keysearch("confirm", 1, Fields) of
|
||||||
|
{value, {"confirm", ["true"]}} ->
|
||||||
|
true;
|
||||||
|
{value, {"confirm", ["1"]}} ->
|
||||||
|
true;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end,
|
||||||
|
Subject = case lists:keysearch("subject", 1, Fields) of
|
||||||
|
{value, {"subject", SubjectLines}} ->
|
||||||
|
%% There really shouldn't be more than one
|
||||||
|
%% subject line, but can we stop them?
|
||||||
|
join_lines(SubjectLines);
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
Body = case lists:keysearch("body", 1, Fields) of
|
||||||
|
{value, {"body", BodyLines}} ->
|
||||||
|
join_lines(BodyLines);
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
Response = #adhoc_response{lang = Lang,
|
||||||
|
node = Node,
|
||||||
|
sessionid = SessionID,
|
||||||
|
status = completed},
|
||||||
|
Packet = {xmlelement, "message", [{"type", "normal"}],
|
||||||
|
if Subject /= [] ->
|
||||||
|
[{xmlelement, "subject", [],
|
||||||
|
[{xmlcdata, Subject}]}];
|
||||||
|
true ->
|
||||||
|
[]
|
||||||
|
end ++
|
||||||
|
if Body /= [] ->
|
||||||
|
[{xmlelement, "body", [],
|
||||||
|
[{xmlcdata, Body}]}];
|
||||||
|
true ->
|
||||||
|
[]
|
||||||
|
end},
|
||||||
|
|
||||||
|
Proc = gen_mod:get_module_proc(LServer, ?PROCNAME),
|
||||||
|
case {Node, Body} of
|
||||||
|
{?NS_ADMIN ++ "#delete-motd", _} ->
|
||||||
|
if Confirm ->
|
||||||
|
Proc ! {announce_motd_delete, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
true ->
|
||||||
|
adhoc:produce_response(Response)
|
||||||
|
end;
|
||||||
|
{?NS_ADMIN ++ "#delete-motd-allhosts", _} ->
|
||||||
|
if Confirm ->
|
||||||
|
Proc ! {announce_all_hosts_motd_delete, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
true ->
|
||||||
|
adhoc:produce_response(Response)
|
||||||
|
end;
|
||||||
|
{_, []} ->
|
||||||
|
%% An announce message with no body is definitely an operator error.
|
||||||
|
%% Throw an error and give him/her a chance to send message again.
|
||||||
|
{error, ?ERRT_NOT_ACCEPTABLE(
|
||||||
|
Lang,
|
||||||
|
"No body provided for announce message")};
|
||||||
|
%% Now send the packet to ?PROCNAME.
|
||||||
|
%% We don't use direct announce_* functions because it
|
||||||
|
%% leads to large delay in response and <iq/> queries processing
|
||||||
|
{?NS_ADMIN ++ "#announce", _} ->
|
||||||
|
Proc ! {announce_online, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#announce-allhosts", _} ->
|
||||||
|
Proc ! {announce_all_hosts_online, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#announce-all", _} ->
|
||||||
|
Proc ! {announce_all, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#announce-all-allhosts", _} ->
|
||||||
|
Proc ! {announce_all_hosts_all, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#set-motd", _} ->
|
||||||
|
Proc ! {announce_motd, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#set-motd-allhosts", _} ->
|
||||||
|
Proc ! {announce_all_hosts_motd, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#edit-motd", _} ->
|
||||||
|
Proc ! {announce_motd_update, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
{?NS_ADMIN ++ "#edit-motd-allhosts", _} ->
|
||||||
|
Proc ! {announce_all_hosts_motd_update, From, To, Packet},
|
||||||
|
adhoc:produce_response(Response);
|
||||||
|
_ ->
|
||||||
|
%% This can't happen, as we haven't registered any other
|
||||||
|
%% command nodes.
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
||||||
|
|
||||||
|
get_title(Lang, "announce") ->
|
||||||
|
translate:translate(Lang, "Announcements");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#announce-all") ->
|
||||||
|
translate:translate(Lang, "Send announcement to all users");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#announce-all-allhosts") ->
|
||||||
|
translate:translate(Lang, "Send announcement to all users on all hosts");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#announce") ->
|
||||||
|
translate:translate(Lang, "Send announcement to all online users");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#announce-allhosts") ->
|
||||||
|
translate:translate(Lang, "Send announcement to all online users on all hosts");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#set-motd") ->
|
||||||
|
translate:translate(Lang, "Set message of the day and send to online users");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#set-motd-allhosts") ->
|
||||||
|
translate:translate(Lang, "Set message of the day on all hosts and send to online users");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#edit-motd") ->
|
||||||
|
translate:translate(Lang, "Update message of the day (don't send)");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#edit-motd-allhosts") ->
|
||||||
|
translate:translate(Lang, "Update message of the day on all hosts (don't send)");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#delete-motd") ->
|
||||||
|
translate:translate(Lang, "Delete message of the day");
|
||||||
|
get_title(Lang, ?NS_ADMIN ++ "#delete-motd-allhosts") ->
|
||||||
|
translate:translate(Lang, "Delete message of the day on all hosts").
|
||||||
|
|
||||||
|
%%-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
announce_all(From, To, Packet) ->
|
||||||
|
Host = To#jid.lserver,
|
||||||
|
Access = gen_mod:get_module_opt(Host, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(Host, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
Local = jlib:make_jid("", To#jid.server, ""),
|
||||||
|
lists:foreach(
|
||||||
|
fun({User, Server}) ->
|
||||||
|
Dest = jlib:make_jid(User, Server, ""),
|
||||||
|
ejabberd_router:route(Local, Dest, Packet)
|
||||||
|
end, ejabberd_auth:get_vh_registered_users(Host))
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_all_hosts_all(From, To, Packet) ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(global, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
Local = jlib:make_jid("", To#jid.server, ""),
|
||||||
|
lists:foreach(
|
||||||
|
fun({User, Server}) ->
|
||||||
|
Dest = jlib:make_jid(User, Server, ""),
|
||||||
|
ejabberd_router:route(Local, Dest, Packet)
|
||||||
|
end, ejabberd_auth:dirty_get_registered_users())
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_online(From, To, Packet) ->
|
||||||
|
Host = To#jid.lserver,
|
||||||
|
Access = gen_mod:get_module_opt(Host, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(Host, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
announce_online1(ejabberd_sm:get_vh_session_list(Host),
|
||||||
|
To#jid.server,
|
||||||
|
Packet)
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_all_hosts_online(From, To, Packet) ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(global, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
announce_online1(ejabberd_sm:dirty_get_sessions_list(),
|
||||||
|
To#jid.server,
|
||||||
|
Packet)
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_online1(Sessions, Server, Packet) ->
|
||||||
|
Local = jlib:make_jid("", Server, ""),
|
||||||
|
lists:foreach(
|
||||||
|
fun({U, S, R}) ->
|
||||||
|
Dest = jlib:make_jid(U, S, R),
|
||||||
|
ejabberd_router:route(Local, Dest, Packet)
|
||||||
|
end, Sessions).
|
||||||
|
|
||||||
|
announce_motd(From, To, Packet) ->
|
||||||
|
Host = To#jid.lserver,
|
||||||
|
Access = gen_mod:get_module_opt(Host, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(Host, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
announce_motd(Host, Packet)
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_all_hosts_motd(From, To, Packet) ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(global, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
Hosts = ?MYHOSTS,
|
||||||
|
[announce_motd(Host, Packet) || Host <- Hosts]
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_motd(Host, Packet) ->
|
||||||
|
announce_motd_update(Host, Packet),
|
||||||
|
Sessions = ejabberd_sm:get_vh_session_list(Host),
|
||||||
|
announce_online1(Sessions, Host, Packet),
|
||||||
|
F = fun() ->
|
||||||
|
lists:foreach(
|
||||||
|
fun({U, _S, _R}) ->
|
||||||
|
Username = ejabberd_odbc:escape(U),
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"motd",
|
||||||
|
["username", "xml"],
|
||||||
|
[Username, ""],
|
||||||
|
["username='", Username, "'"])
|
||||||
|
end, Sessions)
|
||||||
|
end,
|
||||||
|
LServer = jlib:nameprep(Host),
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
announce_motd_update(From, To, Packet) ->
|
||||||
|
Host = To#jid.lserver,
|
||||||
|
Access = gen_mod:get_module_opt(Host, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(Host, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
announce_motd_update(Host, Packet)
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_all_hosts_motd_update(From, To, Packet) ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(global, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
Hosts = ?MYHOSTS,
|
||||||
|
[announce_motd_update(Host, Packet) || Host <- Hosts]
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_motd_update(LServer, Packet) ->
|
||||||
|
announce_motd_delete(LServer),
|
||||||
|
XML = ejabberd_odbc:escape(xml:element_to_binary(Packet)),
|
||||||
|
F = fun() ->
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"motd",
|
||||||
|
["username", "xml"],
|
||||||
|
["", XML],
|
||||||
|
["username=''"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
announce_motd_delete(From, To, Packet) ->
|
||||||
|
Host = To#jid.lserver,
|
||||||
|
Access = gen_mod:get_module_opt(Host, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(Host, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
announce_motd_delete(Host)
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_all_hosts_motd_delete(From, To, Packet) ->
|
||||||
|
Access = gen_mod:get_module_opt(global, ?MODULE, access, none),
|
||||||
|
case acl:match_rule(global, Access, From) of
|
||||||
|
deny ->
|
||||||
|
Err = jlib:make_error_reply(Packet, ?ERR_FORBIDDEN),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
allow ->
|
||||||
|
Hosts = ?MYHOSTS,
|
||||||
|
[announce_motd_delete(Host) || Host <- Hosts]
|
||||||
|
end.
|
||||||
|
|
||||||
|
announce_motd_delete(LServer) ->
|
||||||
|
F = fun() ->
|
||||||
|
ejabberd_odbc:sql_query_t(["delete from motd;"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
send_motd(#jid{luser = LUser, lserver = LServer} = JID) when LUser /= "" ->
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select xml from motd where username='';"]) of
|
||||||
|
{selected, ["xml"], [{XML}]} ->
|
||||||
|
case xml_stream:parse_element(XML) of
|
||||||
|
{error, _} ->
|
||||||
|
ok;
|
||||||
|
Packet ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer,
|
||||||
|
["select username from motd "
|
||||||
|
"where username='", Username, "';"]) of
|
||||||
|
{selected, ["username"], []} ->
|
||||||
|
Local = jlib:make_jid("", LServer, ""),
|
||||||
|
ejabberd_router:route(Local, JID, Packet),
|
||||||
|
F = fun() ->
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"motd",
|
||||||
|
["username", "xml"],
|
||||||
|
[Username, ""],
|
||||||
|
["username='", Username, "'"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
send_motd(_) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
|
get_stored_motd(LServer) ->
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select xml from motd where username='';"]) of
|
||||||
|
{selected, ["xml"], [{XML}]} ->
|
||||||
|
case xml_stream:parse_element(XML) of
|
||||||
|
{error, _} ->
|
||||||
|
{"", ""};
|
||||||
|
Packet ->
|
||||||
|
{xml:get_subtag_cdata(Packet, "subject"),
|
||||||
|
xml:get_subtag_cdata(Packet, "body")}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
{"", ""}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%% This function is similar to others, but doesn't perform any ACL verification
|
||||||
|
send_announcement_to_all(Host, SubjectS, BodyS) ->
|
||||||
|
SubjectEls = if SubjectS /= [] ->
|
||||||
|
[{xmlelement, "subject", [], [{xmlcdata, SubjectS}]}];
|
||||||
|
true ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
BodyEls = if BodyS /= [] ->
|
||||||
|
[{xmlelement, "body", [], [{xmlcdata, BodyS}]}];
|
||||||
|
true ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
Packet = {xmlelement, "message", [{"type", "normal"}], SubjectEls ++ BodyEls},
|
||||||
|
Sessions = ejabberd_sm:dirty_get_sessions_list(),
|
||||||
|
Local = jlib:make_jid("", Host, ""),
|
||||||
|
lists:foreach(
|
||||||
|
fun({U, S, R}) ->
|
||||||
|
Dest = jlib:make_jid(U, S, R),
|
||||||
|
ejabberd_router:route(Local, Dest, Packet)
|
||||||
|
end, Sessions).
|
365
src/mod_blocking_odbc.erl
Normal file
365
src/mod_blocking_odbc.erl
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
%%% File : mod_blocking_odbc.erl
|
||||||
|
%%% Author : Stephan Maka
|
||||||
|
%%% Purpose : XEP-0191: Simple Communications Blocking
|
||||||
|
%%% Created : 24 Aug 2008 by Stephan Maka <stephan@spaceboyz.net>
|
||||||
|
%%%
|
||||||
|
%%%
|
||||||
|
%%% ejabberd, Copyright (C) 2002-2012 ProcessOne
|
||||||
|
%%%
|
||||||
|
%%% This program is free software; you can redistribute it and/or
|
||||||
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
|
%%% published by the Free Software Foundation; either version 2 of the
|
||||||
|
%%% License, or (at your option) any later version.
|
||||||
|
%%%
|
||||||
|
%%% This program is distributed in the hope that it will be useful,
|
||||||
|
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
%%% General Public License for more details.
|
||||||
|
%%%
|
||||||
|
%%% You should have received a copy of the GNU General Public License
|
||||||
|
%%% along with this program; if not, write to the Free Software
|
||||||
|
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
%%% 02111-1307 USA
|
||||||
|
%%%
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
-module(mod_blocking_odbc).
|
||||||
|
|
||||||
|
-behaviour(gen_mod).
|
||||||
|
|
||||||
|
-export([start/2, stop/1,
|
||||||
|
process_iq/3,
|
||||||
|
process_iq_set/4,
|
||||||
|
process_iq_get/5]).
|
||||||
|
|
||||||
|
-include("ejabberd.hrl").
|
||||||
|
-include("jlib.hrl").
|
||||||
|
-include("mod_privacy.hrl").
|
||||||
|
|
||||||
|
start(Host, Opts) ->
|
||||||
|
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
|
||||||
|
ejabberd_hooks:add(privacy_iq_get, Host,
|
||||||
|
?MODULE, process_iq_get, 40),
|
||||||
|
ejabberd_hooks:add(privacy_iq_set, Host,
|
||||||
|
?MODULE, process_iq_set, 40),
|
||||||
|
mod_disco:register_feature(Host, ?NS_BLOCKING),
|
||||||
|
gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_BLOCKING,
|
||||||
|
?MODULE, process_iq, IQDisc).
|
||||||
|
|
||||||
|
stop(Host) ->
|
||||||
|
ejabberd_hooks:delete(privacy_iq_get, Host,
|
||||||
|
?MODULE, process_iq_get, 40),
|
||||||
|
ejabberd_hooks:delete(privacy_iq_set, Host,
|
||||||
|
?MODULE, process_iq_set, 40),
|
||||||
|
mod_disco:unregister_feature(Host, ?NS_BLOCKING),
|
||||||
|
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_BLOCKING).
|
||||||
|
|
||||||
|
process_iq(_From, _To, IQ) ->
|
||||||
|
SubEl = IQ#iq.sub_el,
|
||||||
|
IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]}.
|
||||||
|
|
||||||
|
process_iq_get(_, From, _To,
|
||||||
|
#iq{xmlns = ?NS_BLOCKING,
|
||||||
|
sub_el = {xmlelement, "blocklist", _, _}},
|
||||||
|
_) ->
|
||||||
|
#jid{luser = LUser, lserver = LServer} = From,
|
||||||
|
{stop, process_blocklist_get(LUser, LServer)};
|
||||||
|
|
||||||
|
process_iq_get(Acc, _, _, _, _) ->
|
||||||
|
Acc.
|
||||||
|
|
||||||
|
process_iq_set(_, From, _To, #iq{xmlns = ?NS_BLOCKING,
|
||||||
|
sub_el = {xmlelement, SubElName, _, SubEls}}) ->
|
||||||
|
#jid{luser = LUser, lserver = LServer} = From,
|
||||||
|
Res =
|
||||||
|
case {SubElName, xml:remove_cdata(SubEls)} of
|
||||||
|
{"block", []} ->
|
||||||
|
{error, ?ERR_BAD_REQUEST};
|
||||||
|
{"block", Els} ->
|
||||||
|
JIDs = parse_blocklist_items(Els, []),
|
||||||
|
process_blocklist_block(LUser, LServer, JIDs);
|
||||||
|
{"unblock", []} ->
|
||||||
|
process_blocklist_unblock_all(LUser, LServer);
|
||||||
|
{"unblock", Els} ->
|
||||||
|
JIDs = parse_blocklist_items(Els, []),
|
||||||
|
process_blocklist_unblock(LUser, LServer, JIDs);
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_BAD_REQUEST}
|
||||||
|
end,
|
||||||
|
{stop, Res};
|
||||||
|
|
||||||
|
process_iq_set(Acc, _, _, _) ->
|
||||||
|
Acc.
|
||||||
|
|
||||||
|
is_list_needdb(Items) ->
|
||||||
|
lists:any(
|
||||||
|
fun(X) ->
|
||||||
|
case X#listitem.type of
|
||||||
|
subscription -> true;
|
||||||
|
group -> true;
|
||||||
|
_ -> false
|
||||||
|
end
|
||||||
|
end, Items).
|
||||||
|
|
||||||
|
list_to_blocklist_jids([], JIDs) ->
|
||||||
|
JIDs;
|
||||||
|
|
||||||
|
list_to_blocklist_jids([#listitem{type = jid,
|
||||||
|
action = deny,
|
||||||
|
value = JID} = Item | Items], JIDs) ->
|
||||||
|
case Item of
|
||||||
|
#listitem{match_all = true} ->
|
||||||
|
Match = true;
|
||||||
|
#listitem{match_iq = true,
|
||||||
|
match_message = true,
|
||||||
|
match_presence_in = true,
|
||||||
|
match_presence_out = true} ->
|
||||||
|
Match = true;
|
||||||
|
_ ->
|
||||||
|
Match = false
|
||||||
|
end,
|
||||||
|
if
|
||||||
|
Match ->
|
||||||
|
list_to_blocklist_jids(Items, [JID | JIDs]);
|
||||||
|
true ->
|
||||||
|
list_to_blocklist_jids(Items, JIDs)
|
||||||
|
end;
|
||||||
|
|
||||||
|
% Skip Privacy List items than cannot be mapped to Blocking items
|
||||||
|
list_to_blocklist_jids([_ | Items], JIDs) ->
|
||||||
|
list_to_blocklist_jids(Items, JIDs).
|
||||||
|
|
||||||
|
parse_blocklist_items([], JIDs) ->
|
||||||
|
JIDs;
|
||||||
|
|
||||||
|
parse_blocklist_items([{xmlelement, "item", Attrs, _} | Els], JIDs) ->
|
||||||
|
case xml:get_attr("jid", Attrs) of
|
||||||
|
{value, JID1} ->
|
||||||
|
JID = jlib:jid_tolower(jlib:string_to_jid(JID1)),
|
||||||
|
parse_blocklist_items(Els, [JID | JIDs]);
|
||||||
|
false ->
|
||||||
|
% Tolerate missing jid attribute
|
||||||
|
parse_blocklist_items(Els, JIDs)
|
||||||
|
end;
|
||||||
|
|
||||||
|
parse_blocklist_items([_ | Els], JIDs) ->
|
||||||
|
% Tolerate unknown elements
|
||||||
|
parse_blocklist_items(Els, JIDs).
|
||||||
|
|
||||||
|
process_blocklist_block(LUser, LServer, JIDs) ->
|
||||||
|
F = fun() ->
|
||||||
|
Default =
|
||||||
|
case mod_privacy_odbc:sql_get_default_privacy_list_t(LUser) of
|
||||||
|
{selected, ["name"], []} ->
|
||||||
|
Name = "Blocked contacts",
|
||||||
|
mod_privacy_odbc:sql_add_privacy_list(LUser, Name),
|
||||||
|
mod_privacy_odbc:sql_set_default_privacy_list(
|
||||||
|
LUser, Name),
|
||||||
|
Name;
|
||||||
|
{selected, ["name"], [{Name}]} ->
|
||||||
|
Name
|
||||||
|
end,
|
||||||
|
{selected, ["id"], [{ID}]} =
|
||||||
|
mod_privacy_odbc:sql_get_privacy_list_id_t(LUser, Default),
|
||||||
|
case mod_privacy_odbc:sql_get_privacy_list_data_by_id_t(ID) of
|
||||||
|
{selected,
|
||||||
|
["t", "value", "action", "ord",
|
||||||
|
"match_all", "match_iq", "match_message",
|
||||||
|
"match_presence_in",
|
||||||
|
"match_presence_out"],
|
||||||
|
RItems = [_|_]} ->
|
||||||
|
List = lists:map(
|
||||||
|
fun mod_privacy_odbc:raw_to_item/1,
|
||||||
|
RItems);
|
||||||
|
_ ->
|
||||||
|
List = []
|
||||||
|
end,
|
||||||
|
AlreadyBlocked = list_to_blocklist_jids(List, []),
|
||||||
|
NewList =
|
||||||
|
lists:foldr(
|
||||||
|
fun(JID, List1) ->
|
||||||
|
case lists:member(JID, AlreadyBlocked) of
|
||||||
|
true ->
|
||||||
|
List1;
|
||||||
|
false ->
|
||||||
|
[#listitem{type = jid,
|
||||||
|
value = JID,
|
||||||
|
action = deny,
|
||||||
|
order = 0,
|
||||||
|
match_all = true
|
||||||
|
} | List1]
|
||||||
|
end
|
||||||
|
end, List, JIDs),
|
||||||
|
NewRItems = lists:map(
|
||||||
|
fun mod_privacy_odbc:item_to_raw/1,
|
||||||
|
NewList),
|
||||||
|
mod_privacy_odbc:sql_set_privacy_list(
|
||||||
|
ID, NewRItems),
|
||||||
|
{ok, Default, NewList}
|
||||||
|
end,
|
||||||
|
case ejabberd_odbc:sql_transaction(LServer, F) of
|
||||||
|
{atomic, {error, _} = Error} ->
|
||||||
|
Error;
|
||||||
|
{atomic, {ok, Default, List}} ->
|
||||||
|
UserList = make_userlist(Default, List),
|
||||||
|
broadcast_list_update(LUser, LServer, Default, UserList),
|
||||||
|
broadcast_blocklist_event(LUser, LServer, {block, JIDs}),
|
||||||
|
{result, [], UserList};
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
||||||
|
|
||||||
|
process_blocklist_unblock_all(LUser, LServer) ->
|
||||||
|
F = fun() ->
|
||||||
|
case mod_privacy_odbc:sql_get_default_privacy_list_t(LUser) of
|
||||||
|
{selected, ["name"], []} ->
|
||||||
|
ok;
|
||||||
|
{selected, ["name"], [{Default}]} ->
|
||||||
|
{selected, ["id"], [{ID}]} =
|
||||||
|
mod_privacy_odbc:sql_get_privacy_list_id_t(
|
||||||
|
LUser, Default),
|
||||||
|
case mod_privacy_odbc:sql_get_privacy_list_data_by_id_t(ID) of
|
||||||
|
{selected,
|
||||||
|
["t", "value", "action", "ord",
|
||||||
|
"match_all", "match_iq", "match_message",
|
||||||
|
"match_presence_in",
|
||||||
|
"match_presence_out"],
|
||||||
|
RItems = [_|_]} ->
|
||||||
|
List = lists:map(
|
||||||
|
fun mod_privacy_odbc:raw_to_item/1,
|
||||||
|
RItems),
|
||||||
|
NewList =
|
||||||
|
lists:filter(
|
||||||
|
fun(#listitem{action = A}) ->
|
||||||
|
A =/= deny
|
||||||
|
end, List),
|
||||||
|
NewRItems = lists:map(
|
||||||
|
fun mod_privacy_odbc:item_to_raw/1,
|
||||||
|
NewList),
|
||||||
|
mod_privacy_odbc:sql_set_privacy_list(
|
||||||
|
ID, NewRItems),
|
||||||
|
{ok, Default, NewList};
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
case ejabberd_odbc:sql_transaction(LServer, F) of
|
||||||
|
{atomic, {error, _} = Error} ->
|
||||||
|
Error;
|
||||||
|
{atomic, ok} ->
|
||||||
|
{result, []};
|
||||||
|
{atomic, {ok, Default, List}} ->
|
||||||
|
UserList = make_userlist(Default, List),
|
||||||
|
broadcast_list_update(LUser, LServer, Default, UserList),
|
||||||
|
broadcast_blocklist_event(LUser, LServer, unblock_all),
|
||||||
|
{result, [], UserList};
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
||||||
|
|
||||||
|
process_blocklist_unblock(LUser, LServer, JIDs) ->
|
||||||
|
F = fun() ->
|
||||||
|
case mod_privacy_odbc:sql_get_default_privacy_list_t(LUser) of
|
||||||
|
{selected, ["name"], []} ->
|
||||||
|
ok;
|
||||||
|
{selected, ["name"], [{Default}]} ->
|
||||||
|
{selected, ["id"], [{ID}]} =
|
||||||
|
mod_privacy_odbc:sql_get_privacy_list_id_t(
|
||||||
|
LUser, Default),
|
||||||
|
case mod_privacy_odbc:sql_get_privacy_list_data_by_id_t(ID) of
|
||||||
|
{selected,
|
||||||
|
["t", "value", "action", "ord",
|
||||||
|
"match_all", "match_iq", "match_message",
|
||||||
|
"match_presence_in",
|
||||||
|
"match_presence_out"],
|
||||||
|
RItems = [_|_]} ->
|
||||||
|
List = lists:map(
|
||||||
|
fun mod_privacy_odbc:raw_to_item/1,
|
||||||
|
RItems),
|
||||||
|
NewList =
|
||||||
|
lists:filter(
|
||||||
|
fun(#listitem{action = deny,
|
||||||
|
type = jid,
|
||||||
|
value = JID}) ->
|
||||||
|
not(lists:member(JID, JIDs));
|
||||||
|
(_) ->
|
||||||
|
true
|
||||||
|
end, List),
|
||||||
|
NewRItems = lists:map(
|
||||||
|
fun mod_privacy_odbc:item_to_raw/1,
|
||||||
|
NewList),
|
||||||
|
mod_privacy_odbc:sql_set_privacy_list(
|
||||||
|
ID, NewRItems),
|
||||||
|
{ok, Default, NewList};
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
case ejabberd_odbc:sql_transaction(LServer, F) of
|
||||||
|
{atomic, {error, _} = Error} ->
|
||||||
|
Error;
|
||||||
|
{atomic, ok} ->
|
||||||
|
{result, []};
|
||||||
|
{atomic, {ok, Default, List}} ->
|
||||||
|
UserList = make_userlist(Default, List),
|
||||||
|
broadcast_list_update(LUser, LServer, Default, UserList),
|
||||||
|
broadcast_blocklist_event(LUser, LServer, {unblock, JIDs}),
|
||||||
|
{result, [], UserList};
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
||||||
|
|
||||||
|
make_userlist(Name, List) ->
|
||||||
|
NeedDb = is_list_needdb(List),
|
||||||
|
#userlist{name = Name, list = List, needdb = NeedDb}.
|
||||||
|
|
||||||
|
broadcast_list_update(LUser, LServer, Name, UserList) ->
|
||||||
|
ejabberd_router:route(
|
||||||
|
jlib:make_jid(LUser, LServer, ""),
|
||||||
|
jlib:make_jid(LUser, LServer, ""),
|
||||||
|
{xmlelement, "broadcast", [],
|
||||||
|
[{privacy_list, UserList, Name}]}).
|
||||||
|
|
||||||
|
broadcast_blocklist_event(LUser, LServer, Event) ->
|
||||||
|
JID = jlib:make_jid(LUser, LServer, ""),
|
||||||
|
ejabberd_router:route(
|
||||||
|
JID, JID,
|
||||||
|
{xmlelement, "broadcast", [],
|
||||||
|
[{blocking, Event}]}).
|
||||||
|
|
||||||
|
process_blocklist_get(LUser, LServer) ->
|
||||||
|
case catch mod_privacy_odbc:sql_get_default_privacy_list(LUser, LServer) of
|
||||||
|
{selected, ["name"], []} ->
|
||||||
|
{result, [{xmlelement, "blocklist",
|
||||||
|
[{"xmlns", ?NS_BLOCKING}], []}]};
|
||||||
|
{selected, ["name"], [{Default}]} ->
|
||||||
|
case catch mod_privacy_odbc:sql_get_privacy_list_data(
|
||||||
|
LUser, LServer, Default) of
|
||||||
|
{selected, ["t", "value", "action", "ord", "match_all",
|
||||||
|
"match_iq", "match_message",
|
||||||
|
"match_presence_in", "match_presence_out"],
|
||||||
|
RItems} ->
|
||||||
|
List = lists:map(fun mod_privacy_odbc:raw_to_item/1, RItems),
|
||||||
|
JIDs = list_to_blocklist_jids(List, []),
|
||||||
|
Items = lists:map(
|
||||||
|
fun(JID) ->
|
||||||
|
?DEBUG("JID: ~p",[JID]),
|
||||||
|
{xmlelement, "item",
|
||||||
|
[{"jid", jlib:jid_to_string(JID)}], []}
|
||||||
|
end, JIDs),
|
||||||
|
{result,
|
||||||
|
[{xmlelement, "blocklist", [{"xmlns", ?NS_BLOCKING}],
|
||||||
|
Items}]};
|
||||||
|
{'EXIT', _} ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end;
|
||||||
|
{'EXIT', _} ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
@ -381,6 +381,10 @@ feature_request(Host, From, Caps, [SubNode | Tail] = SubNodes) ->
|
|||||||
[{"xmlns", ?NS_DISCO_INFO},
|
[{"xmlns", ?NS_DISCO_INFO},
|
||||||
{"node", Node ++ "#" ++ SubNode}],
|
{"node", Node ++ "#" ++ SubNode}],
|
||||||
[]}]},
|
[]}]},
|
||||||
|
%% We cache current timestamp in order to avoid
|
||||||
|
%% caps requests flood
|
||||||
|
cache_tab:insert(caps_features, BinaryNode, now_ts(),
|
||||||
|
caps_write_fun(BinaryNode, now_ts())),
|
||||||
F = fun(IQReply) ->
|
F = fun(IQReply) ->
|
||||||
feature_response(
|
feature_response(
|
||||||
IQReply, Host, From, Caps, SubNodes)
|
IQReply, Host, From, Caps, SubNodes)
|
||||||
@ -411,19 +415,11 @@ feature_response(#iq{type = result,
|
|||||||
caps_features, BinaryNode, BinaryFeatures,
|
caps_features, BinaryNode, BinaryFeatures,
|
||||||
caps_write_fun(BinaryNode, BinaryFeatures));
|
caps_write_fun(BinaryNode, BinaryFeatures));
|
||||||
false ->
|
false ->
|
||||||
%% We cache current timestamp and will probe the client
|
ok
|
||||||
%% after BAD_HASH_LIFETIME seconds.
|
|
||||||
cache_tab:insert(caps_features, BinaryNode, now_ts(),
|
|
||||||
caps_write_fun(BinaryNode, now_ts()))
|
|
||||||
end,
|
end,
|
||||||
feature_request(Host, From, Caps, SubNodes);
|
feature_request(Host, From, Caps, SubNodes);
|
||||||
feature_response(_IQResult, Host, From, Caps, [SubNode | SubNodes]) ->
|
feature_response(_IQResult, Host, From, Caps, [_SubNode | SubNodes]) ->
|
||||||
%% We got type=error or invalid type=result stanza or timeout,
|
%% We got type=error or invalid type=result stanza or timeout.
|
||||||
%% so we cache current timestamp and will probe the client
|
|
||||||
%% after BAD_HASH_LIFETIME seconds.
|
|
||||||
BinaryNode = node_to_binary(Caps#caps.node, SubNode),
|
|
||||||
cache_tab:insert(caps_features, BinaryNode, now_ts(),
|
|
||||||
caps_write_fun(BinaryNode, now_ts())),
|
|
||||||
feature_request(Host, From, Caps, SubNodes).
|
feature_request(Host, From, Caps, SubNodes).
|
||||||
|
|
||||||
node_to_binary(Node, SubNode) ->
|
node_to_binary(Node, SubNode) ->
|
||||||
|
@ -4,7 +4,7 @@ include ..\Makefile.inc
|
|||||||
EFLAGS = -I .. -pz ..
|
EFLAGS = -I .. -pz ..
|
||||||
|
|
||||||
OUTDIR = ..
|
OUTDIR = ..
|
||||||
BEAMS = ..\iconv.beam ..\mod_irc.beam ..\mod_irc_connection.beam
|
BEAMS = ..\iconv.beam ..\mod_irc.beam ..\mod_irc_odbc.beam ..\mod_irc_connection.beam
|
||||||
|
|
||||||
SOURCE = iconv_erl.c
|
SOURCE = iconv_erl.c
|
||||||
OBJECT = iconv_erl.o
|
OBJECT = iconv_erl.o
|
||||||
@ -25,6 +25,9 @@ $(OUTDIR)\iconv.beam : iconv.erl
|
|||||||
$(OUTDIR)\mod_irc.beam : mod_irc.erl
|
$(OUTDIR)\mod_irc.beam : mod_irc.erl
|
||||||
erlc -W $(EFLAGS) -o $(OUTDIR) mod_irc.erl
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_irc.erl
|
||||||
|
|
||||||
|
$(OUTDIR)\mod_irc_odbc.beam : mod_irc_odbc.erl
|
||||||
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_irc_odbc.erl
|
||||||
|
|
||||||
$(OUTDIR)\mod_irc_connection.beam : mod_irc_connection.erl
|
$(OUTDIR)\mod_irc_connection.beam : mod_irc_connection.erl
|
||||||
erlc -W $(EFLAGS) -o $(OUTDIR) mod_irc_connection.erl
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_irc_connection.erl
|
||||||
|
|
||||||
@ -35,8 +38,8 @@ LD=link.exe
|
|||||||
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(ICONV_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(ICONV_LIB)" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
||||||
|
|
||||||
$(DLL) : $(OBJECT)
|
$(DLL) : $(OBJECT)
|
||||||
$(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT)
|
$(LD) $(LD_FLAGS) -out:$@ $<
|
||||||
|
|
||||||
$(OBJECT) : $(SOURCE)
|
$(OBJECT) : $(SOURCE)
|
||||||
$(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE)
|
$(CC) $(CC_FLAGS) -c -Fo$@ $<
|
||||||
|
|
||||||
|
@ -348,7 +348,8 @@ do_route1(Host, ServerHost, From, To, Packet) ->
|
|||||||
end,
|
end,
|
||||||
{ok, Pid} = mod_irc_connection:start(
|
{ok, Pid} = mod_irc_connection:start(
|
||||||
From, Host, ServerHost, Server,
|
From, Host, ServerHost, Server,
|
||||||
ConnectionUsername, Encoding, Port, Password),
|
ConnectionUsername, Encoding, Port,
|
||||||
|
Password, ?MODULE),
|
||||||
ets:insert(
|
ets:insert(
|
||||||
irc_connection,
|
irc_connection,
|
||||||
#irc_connection{jid_server_host = {From, Server, Host},
|
#irc_connection{jid_server_host = {From, Server, Host},
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
-behaviour(gen_fsm).
|
-behaviour(gen_fsm).
|
||||||
|
|
||||||
%% External exports
|
%% External exports
|
||||||
-export([start_link/7, start/8, route_chan/4, route_nick/3]).
|
-export([start_link/8, start/9, route_chan/4, route_nick/3]).
|
||||||
|
|
||||||
%% gen_fsm callbacks
|
%% gen_fsm callbacks
|
||||||
-export([init/1,
|
-export([init/1,
|
||||||
@ -51,7 +51,7 @@
|
|||||||
-record(state, {socket, encoding, port, password,
|
-record(state, {socket, encoding, port, password,
|
||||||
queue, user, host, server, nick,
|
queue, user, host, server, nick,
|
||||||
channels = dict:new(),
|
channels = dict:new(),
|
||||||
nickchannel,
|
nickchannel, mod,
|
||||||
inbuf = "", outbuf = ""}).
|
inbuf = "", outbuf = ""}).
|
||||||
|
|
||||||
%-define(DBGFSM, true).
|
%-define(DBGFSM, true).
|
||||||
@ -65,13 +65,13 @@
|
|||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% API
|
%%% API
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
start(From, Host, ServerHost, Server, Username, Encoding, Port, Password) ->
|
start(From, Host, ServerHost, Server, Username, Encoding, Port, Password, Mod) ->
|
||||||
Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_irc_sup),
|
Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_irc_sup),
|
||||||
supervisor:start_child(
|
supervisor:start_child(
|
||||||
Supervisor, [From, Host, Server, Username, Encoding, Port, Password]).
|
Supervisor, [From, Host, Server, Username, Encoding, Port, Password, Mod]).
|
||||||
|
|
||||||
start_link(From, Host, Server, Username, Encoding, Port, Password) ->
|
start_link(From, Host, Server, Username, Encoding, Port, Password, Mod) ->
|
||||||
gen_fsm:start_link(?MODULE, [From, Host, Server, Username, Encoding, Port, Password],
|
gen_fsm:start_link(?MODULE, [From, Host, Server, Username, Encoding, Port, Password, Mod],
|
||||||
?FSMOPTS).
|
?FSMOPTS).
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
@ -85,9 +85,10 @@ start_link(From, Host, Server, Username, Encoding, Port, Password) ->
|
|||||||
%% ignore |
|
%% ignore |
|
||||||
%% {stop, StopReason}
|
%% {stop, StopReason}
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
init([From, Host, Server, Username, Encoding, Port, Password]) ->
|
init([From, Host, Server, Username, Encoding, Port, Password, Mod]) ->
|
||||||
gen_fsm:send_event(self(), init),
|
gen_fsm:send_event(self(), init),
|
||||||
{ok, open_socket, #state{queue = queue:new(),
|
{ok, open_socket, #state{queue = queue:new(),
|
||||||
|
mod = Mod,
|
||||||
encoding = Encoding,
|
encoding = Encoding,
|
||||||
port = Port,
|
port = Port,
|
||||||
password = Password,
|
password = Password,
|
||||||
@ -205,6 +206,31 @@ code_change(_OldVsn, StateName, StateData, _Extra) ->
|
|||||||
StateData#state{outbuf = StateData#state.outbuf ++ S}
|
StateData#state{outbuf = StateData#state.outbuf ++ S}
|
||||||
end).
|
end).
|
||||||
|
|
||||||
|
get_password_from_presence({xmlelement, "presence", _Attrs, Els}) ->
|
||||||
|
case lists:filter(fun(El) ->
|
||||||
|
case El of
|
||||||
|
{xmlelement, "x", Attrs, _Els} ->
|
||||||
|
case xml:get_attr_s("xmlns", Attrs) of
|
||||||
|
?NS_MUC ->
|
||||||
|
true;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end, Els) of
|
||||||
|
[ElXMUC | _] ->
|
||||||
|
case xml:get_subtag(ElXMUC, "password") of
|
||||||
|
{xmlelement, "password", _, _} = PasswordTag ->
|
||||||
|
{true, xml:get_tag_cdata(PasswordTag)};
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end.
|
||||||
|
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
%% Func: handle_info/3
|
%% Func: handle_info/3
|
||||||
%% Returns: {next_state, NextStateName, NextStateData} |
|
%% Returns: {next_state, NextStateName, NextStateData} |
|
||||||
@ -212,7 +238,7 @@ code_change(_OldVsn, StateName, StateData, _Extra) ->
|
|||||||
%% {stop, Reason, NewStateData}
|
%% {stop, Reason, NewStateData}
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
handle_info({route_chan, Channel, Resource,
|
handle_info({route_chan, Channel, Resource,
|
||||||
{xmlelement, "presence", Attrs, _Els}},
|
{xmlelement, "presence", Attrs, _Els} = Presence},
|
||||||
StateName, StateData) ->
|
StateName, StateData) ->
|
||||||
NewStateData =
|
NewStateData =
|
||||||
case xml:get_attr_s("type", Attrs) of
|
case xml:get_attr_s("type", Attrs) of
|
||||||
@ -246,7 +272,12 @@ handle_info({route_chan, Channel, Resource,
|
|||||||
true ->
|
true ->
|
||||||
S1;
|
S1;
|
||||||
_ ->
|
_ ->
|
||||||
S2 = ?SEND(io_lib:format("JOIN #~s\r\n", [Channel])),
|
case get_password_from_presence(Presence) of
|
||||||
|
{true, Password} ->
|
||||||
|
S2 = ?SEND(io_lib:format("JOIN #~s ~s\r\n", [Channel, Password]));
|
||||||
|
_ ->
|
||||||
|
S2 = ?SEND(io_lib:format("JOIN #~s\r\n", [Channel]))
|
||||||
|
end,
|
||||||
S2#state{channels =
|
S2#state{channels =
|
||||||
dict:store(Channel, ?SETS:new(),
|
dict:store(Channel, ?SETS:new(),
|
||||||
S1#state.channels)}
|
S1#state.channels)}
|
||||||
@ -651,7 +682,7 @@ terminate(_Reason, _StateName, FullStateData) ->
|
|||||||
[{xmlcdata, "Server Connect Failed"}]},
|
[{xmlcdata, "Server Connect Failed"}]},
|
||||||
FullStateData}
|
FullStateData}
|
||||||
end,
|
end,
|
||||||
mod_irc:closed_connection(StateData#state.host,
|
(FullStateData#state.mod):closed_connection(StateData#state.host,
|
||||||
StateData#state.user,
|
StateData#state.user,
|
||||||
StateData#state.server),
|
StateData#state.server),
|
||||||
bounce_messages("Server Connect Failed"),
|
bounce_messages("Server Connect Failed"),
|
||||||
|
1033
src/mod_irc/mod_irc_odbc.erl
Normal file
1033
src/mod_irc/mod_irc_odbc.erl
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@ include ..\Makefile.inc
|
|||||||
EFLAGS = -I .. -pz ..
|
EFLAGS = -I .. -pz ..
|
||||||
|
|
||||||
OUTDIR = ..
|
OUTDIR = ..
|
||||||
BEAMS = ..\mod_muc.beam ..\mod_muc_log.beam ..\mod_muc_room.beam
|
BEAMS = ..\mod_muc.beam ..\mod_muc_odbc.beam ..\mod_muc_log.beam ..\mod_muc_room.beam
|
||||||
|
|
||||||
ALL : $(BEAMS)
|
ALL : $(BEAMS)
|
||||||
|
|
||||||
@ -14,6 +14,9 @@ CLEAN :
|
|||||||
$(OUTDIR)\mod_muc.beam : mod_muc.erl
|
$(OUTDIR)\mod_muc.beam : mod_muc.erl
|
||||||
erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc.erl
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc.erl
|
||||||
|
|
||||||
|
$(OUTDIR)\mod_muc_odbc.beam : mod_muc_odbc.erl
|
||||||
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc_odbc.erl
|
||||||
|
|
||||||
$(OUTDIR)\mod_muc_log.beam : mod_muc_log.erl
|
$(OUTDIR)\mod_muc_log.beam : mod_muc_log.erl
|
||||||
erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc_log.erl
|
erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc_log.erl
|
||||||
|
|
||||||
|
@ -35,9 +35,9 @@
|
|||||||
start/2,
|
start/2,
|
||||||
stop/1,
|
stop/1,
|
||||||
room_destroyed/4,
|
room_destroyed/4,
|
||||||
store_room/3,
|
store_room/4,
|
||||||
restore_room/2,
|
restore_room/3,
|
||||||
forget_room/2,
|
forget_room/3,
|
||||||
create_room/5,
|
create_room/5,
|
||||||
process_iq_disco_items/4,
|
process_iq_disco_items/4,
|
||||||
broadcast_service_message/2,
|
broadcast_service_message/2,
|
||||||
@ -47,9 +47,9 @@
|
|||||||
migrate/3,
|
migrate/3,
|
||||||
get_vh_rooms/1,
|
get_vh_rooms/1,
|
||||||
is_broadcasted/1,
|
is_broadcasted/1,
|
||||||
can_use_nick/3,
|
|
||||||
moderate_room_history/2,
|
moderate_room_history/2,
|
||||||
persist_recent_messages/1]).
|
persist_recent_messages/1,
|
||||||
|
can_use_nick/4]).
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
||||||
@ -160,14 +160,14 @@ create_room(Host, Name, From, Nick, Opts) ->
|
|||||||
Node = get_node({Name, RoomHost}),
|
Node = get_node({Name, RoomHost}),
|
||||||
gen_server:call({Proc, Node}, {create, Name, From, Nick, Opts}).
|
gen_server:call({Proc, Node}, {create, Name, From, Nick, Opts}).
|
||||||
|
|
||||||
store_room(Host, Name, Opts) ->
|
store_room(_ServerHost, Host, Name, Opts) ->
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
mnesia:write(#muc_room{name_host = {Name, Host},
|
mnesia:write(#muc_room{name_host = {Name, Host},
|
||||||
opts = Opts})
|
opts = Opts})
|
||||||
end,
|
end,
|
||||||
mnesia:transaction(F).
|
mnesia:transaction(F).
|
||||||
|
|
||||||
restore_room(Host, Name) ->
|
restore_room(_ServerHost, Host, Name) ->
|
||||||
case catch mnesia:dirty_read(muc_room, {Name, Host}) of
|
case catch mnesia:dirty_read(muc_room, {Name, Host}) of
|
||||||
[#muc_room{opts = Opts}] ->
|
[#muc_room{opts = Opts}] ->
|
||||||
Opts;
|
Opts;
|
||||||
@ -175,7 +175,7 @@ restore_room(Host, Name) ->
|
|||||||
error
|
error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
forget_room(Host, Name) ->
|
forget_room(_ServerHost, Host, Name) ->
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
mnesia:delete({muc_room, {Name, Host}})
|
mnesia:delete({muc_room, {Name, Host}})
|
||||||
end,
|
end,
|
||||||
@ -191,9 +191,9 @@ process_iq_disco_items(Host, From, To, #iq{lang = Lang} = IQ) ->
|
|||||||
From,
|
From,
|
||||||
jlib:iq_to_xml(Res)).
|
jlib:iq_to_xml(Res)).
|
||||||
|
|
||||||
can_use_nick(_Host, _JID, "") ->
|
can_use_nick(_ServerHost, _Host, _JID, "") ->
|
||||||
false;
|
false;
|
||||||
can_use_nick(Host, JID, Nick) ->
|
can_use_nick(_ServerHost, Host, JID, Nick) ->
|
||||||
{LUser, LServer, _} = jlib:jid_tolower(JID),
|
{LUser, LServer, _} = jlib:jid_tolower(JID),
|
||||||
LUS = {LUser, LServer},
|
LUS = {LUser, LServer},
|
||||||
case catch mnesia:dirty_select(
|
case catch mnesia:dirty_select(
|
||||||
@ -334,7 +334,7 @@ handle_call({create, Room, From, Nick, Opts},
|
|||||||
Host, ServerHost, Access,
|
Host, ServerHost, Access,
|
||||||
Room, HistorySize, PersistHistory,
|
Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, From,
|
RoomShaper, From,
|
||||||
Nick, NewOpts),
|
Nick, NewOpts, ?MODULE),
|
||||||
register_room(Host, Room, Pid),
|
register_room(Host, Room, Pid),
|
||||||
{reply, ok, State}.
|
{reply, ok, State}.
|
||||||
|
|
||||||
@ -631,7 +631,7 @@ do_route1(Host, ServerHost, Access, HistorySize, PersistHistory, RoomShaper,
|
|||||||
check_user_can_create_room(ServerHost, AccessCreate, From, RoomID) ->
|
check_user_can_create_room(ServerHost, AccessCreate, From, RoomID) ->
|
||||||
case acl:match_rule(ServerHost, AccessCreate, From) of
|
case acl:match_rule(ServerHost, AccessCreate, From) of
|
||||||
allow ->
|
allow ->
|
||||||
(length(RoomID) =< gen_mod:get_module_opt(ServerHost, mod_muc,
|
(length(RoomID) =< gen_mod:get_module_opt(ServerHost, ?MODULE,
|
||||||
max_room_id, infinite));
|
max_room_id, infinite));
|
||||||
_ ->
|
_ ->
|
||||||
false
|
false
|
||||||
@ -668,7 +668,8 @@ load_permanent_rooms(Host, ServerHost, Access, HistorySize, PersistHistory, Room
|
|||||||
HistorySize,
|
HistorySize,
|
||||||
PersistHistory,
|
PersistHistory,
|
||||||
RoomShaper,
|
RoomShaper,
|
||||||
R#muc_room.opts),
|
R#muc_room.opts,
|
||||||
|
?MODULE),
|
||||||
register_room(Host, Room, Pid)
|
register_room(Host, Room, Pid)
|
||||||
end;
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
@ -694,12 +695,12 @@ start_new_room(Host, ServerHost, Access, Room,
|
|||||||
mod_muc_room:start(Host, ServerHost, Access,
|
mod_muc_room:start(Host, ServerHost, Access,
|
||||||
Room, HistorySize, PersistHistory,
|
Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, From,
|
RoomShaper, From,
|
||||||
Nick, DefRoomOpts);
|
Nick, DefRoomOpts, ?MODULE);
|
||||||
[#muc_room{opts = Opts}|_] ->
|
[#muc_room{opts = Opts}|_] ->
|
||||||
?DEBUG("MUC: restore room '~s'~n", [Room]),
|
?DEBUG("MUC: restore room '~s'~n", [Room]),
|
||||||
mod_muc_room:start(Host, ServerHost, Access,
|
mod_muc_room:start(Host, ServerHost, Access,
|
||||||
Room, HistorySize, PersistHistory,
|
Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, Opts)
|
RoomShaper, Opts, ?MODULE)
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
875
src/mod_muc/mod_muc_odbc.erl
Normal file
875
src/mod_muc/mod_muc_odbc.erl
Normal file
@ -0,0 +1,875 @@
|
|||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
%%% File : mod_muc_odbc.erl
|
||||||
|
%%% Author : Alexey Shchepin <alexey@process-one.net>
|
||||||
|
%%% Purpose : MUC support (XEP-0045)
|
||||||
|
%%% Created : 19 Mar 2003 by Alexey Shchepin <alexey@process-one.net>
|
||||||
|
%%%
|
||||||
|
%%%
|
||||||
|
%%% ejabberd, Copyright (C) 2002-2012 ProcessOne
|
||||||
|
%%%
|
||||||
|
%%% This program is free software; you can redistribute it and/or
|
||||||
|
%%% modify it under the terms of the GNU General Public License as
|
||||||
|
%%% published by the Free Software Foundation; either version 2 of the
|
||||||
|
%%% License, or (at your option) any later version.
|
||||||
|
%%%
|
||||||
|
%%% This program is distributed in the hope that it will be useful,
|
||||||
|
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
%%% General Public License for more details.
|
||||||
|
%%%
|
||||||
|
%%% You should have received a copy of the GNU General Public License
|
||||||
|
%%% along with this program; if not, write to the Free Software
|
||||||
|
%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
%%% 02111-1307 USA
|
||||||
|
%%%
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
-module(mod_muc_odbc).
|
||||||
|
-author('alexey@process-one.net').
|
||||||
|
|
||||||
|
-behaviour(gen_server).
|
||||||
|
-behaviour(gen_mod).
|
||||||
|
|
||||||
|
%% API
|
||||||
|
-export([start_link/2,
|
||||||
|
start/2,
|
||||||
|
stop/1,
|
||||||
|
room_destroyed/4,
|
||||||
|
store_room/4,
|
||||||
|
restore_room/3,
|
||||||
|
forget_room/3,
|
||||||
|
create_room/5,
|
||||||
|
process_iq_disco_items/4,
|
||||||
|
broadcast_service_message/2,
|
||||||
|
can_use_nick/4]).
|
||||||
|
|
||||||
|
%% gen_server callbacks
|
||||||
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
||||||
|
terminate/2, code_change/3]).
|
||||||
|
|
||||||
|
-include("ejabberd.hrl").
|
||||||
|
-include("jlib.hrl").
|
||||||
|
|
||||||
|
|
||||||
|
-record(muc_online_room, {name_host, pid}).
|
||||||
|
|
||||||
|
-record(state, {host,
|
||||||
|
server_host,
|
||||||
|
access,
|
||||||
|
history_size,
|
||||||
|
default_room_opts,
|
||||||
|
room_shaper}).
|
||||||
|
|
||||||
|
-define(PROCNAME, ejabberd_mod_muc).
|
||||||
|
|
||||||
|
%%====================================================================
|
||||||
|
%% API
|
||||||
|
%%====================================================================
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
||||||
|
%% Description: Starts the server
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
start_link(Host, Opts) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
|
||||||
|
|
||||||
|
start(Host, Opts) ->
|
||||||
|
start_supervisor(Host),
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
ChildSpec =
|
||||||
|
{Proc,
|
||||||
|
{?MODULE, start_link, [Host, Opts]},
|
||||||
|
temporary,
|
||||||
|
1000,
|
||||||
|
worker,
|
||||||
|
[?MODULE]},
|
||||||
|
supervisor:start_child(ejabberd_sup, ChildSpec).
|
||||||
|
|
||||||
|
stop(Host) ->
|
||||||
|
stop_supervisor(Host),
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
gen_server:call(Proc, stop),
|
||||||
|
supervisor:delete_child(ejabberd_sup, Proc).
|
||||||
|
|
||||||
|
%% This function is called by a room in three situations:
|
||||||
|
%% A) The owner of the room destroyed it
|
||||||
|
%% B) The only participant of a temporary room leaves it
|
||||||
|
%% C) mod_muc_odbc:stop was called, and each room is being terminated
|
||||||
|
%% In this case, the mod_muc_odbc process died before the room processes
|
||||||
|
%% So the message sending must be catched
|
||||||
|
room_destroyed(Host, Room, Pid, ServerHost) ->
|
||||||
|
catch gen_mod:get_module_proc(ServerHost, ?PROCNAME) !
|
||||||
|
{room_destroyed, {Room, Host}, Pid},
|
||||||
|
ok.
|
||||||
|
|
||||||
|
%% @doc Create a room.
|
||||||
|
%% If Opts = default, the default room options are used.
|
||||||
|
%% Else use the passed options as defined in mod_muc_room.
|
||||||
|
create_room(Host, Name, From, Nick, Opts) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
|
||||||
|
gen_server:call(Proc, {create, Name, From, Nick, Opts}).
|
||||||
|
|
||||||
|
store_room(ServerHost, Host, Name, Opts) ->
|
||||||
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
SOpts = ejabberd_odbc:encode_term(Opts),
|
||||||
|
F = fun() ->
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"muc_room",
|
||||||
|
["name", "host", "opts"],
|
||||||
|
[SName, SHost, SOpts],
|
||||||
|
["name='", SName, "' and host='", SHost, "'"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
restore_room(ServerHost, Host, Name) ->
|
||||||
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select opts from muc_room where name='",
|
||||||
|
SName, "' and host='", SHost, "';"]) of
|
||||||
|
{selected, ["opts"], [{Opts}]} ->
|
||||||
|
ejabberd_odbc:decode_term(Opts);
|
||||||
|
_ ->
|
||||||
|
error
|
||||||
|
end.
|
||||||
|
|
||||||
|
forget_room(ServerHost, Host, Name) ->
|
||||||
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
F = fun() ->
|
||||||
|
ejabberd_odbc:sql_query_t(
|
||||||
|
["delete from muc_room where name='",
|
||||||
|
SName, "' and host='", SHost, "';"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
process_iq_disco_items(Host, From, To, #iq{lang = Lang} = IQ) ->
|
||||||
|
Rsm = jlib:rsm_decode(IQ),
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el = [{xmlelement, "query",
|
||||||
|
[{"xmlns", ?NS_DISCO_ITEMS}],
|
||||||
|
iq_disco_items(Host, From, Lang, Rsm)}]},
|
||||||
|
ejabberd_router:route(To,
|
||||||
|
From,
|
||||||
|
jlib:iq_to_xml(Res)).
|
||||||
|
|
||||||
|
can_use_nick(_ServerHost, _Host, _JID, "") ->
|
||||||
|
false;
|
||||||
|
can_use_nick(ServerHost, Host, JID, Nick) ->
|
||||||
|
SJID = jlib:jid_to_string(
|
||||||
|
jlib:jid_tolower(
|
||||||
|
jlib:jid_remove_resource(JID))),
|
||||||
|
SNick = ejabberd_odbc:escape(Nick),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select jid from muc_registered ",
|
||||||
|
"where nick='", SNick, "' and host='",
|
||||||
|
SHost, "';"]) of
|
||||||
|
{selected, ["jid"], [{SJID1}]} ->
|
||||||
|
SJID == SJID1;
|
||||||
|
_ ->
|
||||||
|
true
|
||||||
|
end.
|
||||||
|
|
||||||
|
%%====================================================================
|
||||||
|
%% gen_server callbacks
|
||||||
|
%%====================================================================
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: init(Args) -> {ok, State} |
|
||||||
|
%% {ok, State, Timeout} |
|
||||||
|
%% ignore |
|
||||||
|
%% {stop, Reason}
|
||||||
|
%% Description: Initiates the server
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
init([Host, Opts]) ->
|
||||||
|
mnesia:create_table(muc_online_room,
|
||||||
|
[{ram_copies, [node()]},
|
||||||
|
{attributes, record_info(fields, muc_online_room)}]),
|
||||||
|
mnesia:add_table_copy(muc_online_room, node(), ram_copies),
|
||||||
|
catch ets:new(muc_online_users, [bag, named_table, public, {keypos, 2}]),
|
||||||
|
MyHost = gen_mod:get_opt_host(Host, Opts, "conference.@HOST@"),
|
||||||
|
clean_table_from_bad_node(node(), MyHost),
|
||||||
|
mnesia:subscribe(system),
|
||||||
|
Access = gen_mod:get_opt(access, Opts, all),
|
||||||
|
AccessCreate = gen_mod:get_opt(access_create, Opts, all),
|
||||||
|
AccessAdmin = gen_mod:get_opt(access_admin, Opts, none),
|
||||||
|
AccessPersistent = gen_mod:get_opt(access_persistent, Opts, all),
|
||||||
|
HistorySize = gen_mod:get_opt(history_size, Opts, 20),
|
||||||
|
DefRoomOpts = gen_mod:get_opt(default_room_options, Opts, []),
|
||||||
|
RoomShaper = gen_mod:get_opt(room_shaper, Opts, none),
|
||||||
|
ejabberd_router:register_route(MyHost),
|
||||||
|
load_permanent_rooms(MyHost, Host,
|
||||||
|
{Access, AccessCreate, AccessAdmin, AccessPersistent},
|
||||||
|
HistorySize,
|
||||||
|
RoomShaper),
|
||||||
|
{ok, #state{host = MyHost,
|
||||||
|
server_host = Host,
|
||||||
|
access = {Access, AccessCreate, AccessAdmin, AccessPersistent},
|
||||||
|
default_room_opts = DefRoomOpts,
|
||||||
|
history_size = HistorySize,
|
||||||
|
room_shaper = RoomShaper}}.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
|
||||||
|
%% {reply, Reply, State, Timeout} |
|
||||||
|
%% {noreply, State} |
|
||||||
|
%% {noreply, State, Timeout} |
|
||||||
|
%% {stop, Reason, Reply, State} |
|
||||||
|
%% {stop, Reason, State}
|
||||||
|
%% Description: Handling call messages
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
handle_call(stop, _From, State) ->
|
||||||
|
{stop, normal, ok, State};
|
||||||
|
|
||||||
|
handle_call({create, Room, From, Nick, Opts},
|
||||||
|
_From,
|
||||||
|
#state{host = Host,
|
||||||
|
server_host = ServerHost,
|
||||||
|
access = Access,
|
||||||
|
default_room_opts = DefOpts,
|
||||||
|
history_size = HistorySize,
|
||||||
|
room_shaper = RoomShaper} = State) ->
|
||||||
|
?DEBUG("MUC: create new room '~s'~n", [Room]),
|
||||||
|
NewOpts = case Opts of
|
||||||
|
default -> DefOpts;
|
||||||
|
_ -> Opts
|
||||||
|
end,
|
||||||
|
{ok, Pid} = mod_muc_room:start(
|
||||||
|
Host, ServerHost, Access,
|
||||||
|
Room, HistorySize,
|
||||||
|
RoomShaper, From,
|
||||||
|
Nick, NewOpts, ?MODULE),
|
||||||
|
register_room(Host, Room, Pid),
|
||||||
|
{reply, ok, State}.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: handle_cast(Msg, State) -> {noreply, State} |
|
||||||
|
%% {noreply, State, Timeout} |
|
||||||
|
%% {stop, Reason, State}
|
||||||
|
%% Description: Handling cast messages
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
handle_cast(_Msg, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: handle_info(Info, State) -> {noreply, State} |
|
||||||
|
%% {noreply, State, Timeout} |
|
||||||
|
%% {stop, Reason, State}
|
||||||
|
%% Description: Handling all non call/cast messages
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
handle_info({route, From, To, Packet},
|
||||||
|
#state{host = Host,
|
||||||
|
server_host = ServerHost,
|
||||||
|
access = Access,
|
||||||
|
default_room_opts = DefRoomOpts,
|
||||||
|
history_size = HistorySize,
|
||||||
|
room_shaper = RoomShaper} = State) ->
|
||||||
|
case catch do_route(Host, ServerHost, Access, HistorySize, RoomShaper,
|
||||||
|
From, To, Packet, DefRoomOpts) of
|
||||||
|
{'EXIT', Reason} ->
|
||||||
|
?ERROR_MSG("~p", [Reason]);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
{noreply, State};
|
||||||
|
handle_info({room_destroyed, RoomHost, Pid}, State) ->
|
||||||
|
F = fun() ->
|
||||||
|
mnesia:delete_object(#muc_online_room{name_host = RoomHost,
|
||||||
|
pid = Pid})
|
||||||
|
end,
|
||||||
|
mnesia:transaction(F),
|
||||||
|
{noreply, State};
|
||||||
|
handle_info({mnesia_system_event, {mnesia_down, Node}}, State) ->
|
||||||
|
clean_table_from_bad_node(Node),
|
||||||
|
{noreply, State};
|
||||||
|
handle_info(_Info, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Function: terminate(Reason, State) -> void()
|
||||||
|
%% Description: This function is called by a gen_server when it is about to
|
||||||
|
%% terminate. It should be the opposite of Module:init/1 and do any necessary
|
||||||
|
%% cleaning up. When it returns, the gen_server terminates with Reason.
|
||||||
|
%% The return value is ignored.
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
terminate(_Reason, State) ->
|
||||||
|
ejabberd_router:unregister_route(State#state.host),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
||||||
|
%% Description: Convert process state when code is changed
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
code_change(_OldVsn, State, _Extra) ->
|
||||||
|
{ok, State}.
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%%% Internal functions
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
start_supervisor(Host) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ejabberd_mod_muc_sup),
|
||||||
|
ChildSpec =
|
||||||
|
{Proc,
|
||||||
|
{ejabberd_tmp_sup, start_link,
|
||||||
|
[Proc, mod_muc_room]},
|
||||||
|
permanent,
|
||||||
|
infinity,
|
||||||
|
supervisor,
|
||||||
|
[ejabberd_tmp_sup]},
|
||||||
|
supervisor:start_child(ejabberd_sup, ChildSpec).
|
||||||
|
|
||||||
|
stop_supervisor(Host) ->
|
||||||
|
Proc = gen_mod:get_module_proc(Host, ejabberd_mod_muc_sup),
|
||||||
|
supervisor:terminate_child(ejabberd_sup, Proc),
|
||||||
|
supervisor:delete_child(ejabberd_sup, Proc).
|
||||||
|
|
||||||
|
do_route(Host, ServerHost, Access, HistorySize, RoomShaper,
|
||||||
|
From, To, Packet, DefRoomOpts) ->
|
||||||
|
{AccessRoute, _AccessCreate, _AccessAdmin, _AccessPersistent} = Access,
|
||||||
|
case acl:match_rule(ServerHost, AccessRoute, From) of
|
||||||
|
allow ->
|
||||||
|
do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
|
||||||
|
From, To, Packet, DefRoomOpts);
|
||||||
|
_ ->
|
||||||
|
{xmlelement, _Name, Attrs, _Els} = Packet,
|
||||||
|
Lang = xml:get_attr_s("xml:lang", Attrs),
|
||||||
|
ErrText = "Access denied by service policy",
|
||||||
|
Err = jlib:make_error_reply(Packet,
|
||||||
|
?ERRT_FORBIDDEN(Lang, ErrText)),
|
||||||
|
ejabberd_router:route_error(To, From, Err, Packet)
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
do_route1(Host, ServerHost, Access, HistorySize, RoomShaper,
|
||||||
|
From, To, Packet, DefRoomOpts) ->
|
||||||
|
{_AccessRoute, AccessCreate, AccessAdmin, _AccessPersistent} = Access,
|
||||||
|
{Room, _, Nick} = jlib:jid_tolower(To),
|
||||||
|
{xmlelement, Name, Attrs, _Els} = Packet,
|
||||||
|
case Room of
|
||||||
|
"" ->
|
||||||
|
case Nick of
|
||||||
|
"" ->
|
||||||
|
case Name of
|
||||||
|
"iq" ->
|
||||||
|
case jlib:iq_query_info(Packet) of
|
||||||
|
#iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS,
|
||||||
|
sub_el = _SubEl, lang = Lang} = IQ ->
|
||||||
|
Info = ejabberd_hooks:run_fold(
|
||||||
|
disco_info, ServerHost, [],
|
||||||
|
[ServerHost, ?MODULE, "", ""]),
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el = [{xmlelement, "query",
|
||||||
|
[{"xmlns", XMLNS}],
|
||||||
|
iq_disco_info(Lang)
|
||||||
|
++Info}]},
|
||||||
|
ejabberd_router:route(To,
|
||||||
|
From,
|
||||||
|
jlib:iq_to_xml(Res));
|
||||||
|
#iq{type = get,
|
||||||
|
xmlns = ?NS_DISCO_ITEMS} = IQ ->
|
||||||
|
spawn(?MODULE,
|
||||||
|
process_iq_disco_items,
|
||||||
|
[Host, From, To, IQ]);
|
||||||
|
#iq{type = get,
|
||||||
|
xmlns = ?NS_REGISTER = XMLNS,
|
||||||
|
lang = Lang,
|
||||||
|
sub_el = _SubEl} = IQ ->
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el =
|
||||||
|
[{xmlelement, "query",
|
||||||
|
[{"xmlns", XMLNS}],
|
||||||
|
iq_get_register_info(
|
||||||
|
ServerHost, Host, From, Lang)}]},
|
||||||
|
ejabberd_router:route(To,
|
||||||
|
From,
|
||||||
|
jlib:iq_to_xml(Res));
|
||||||
|
#iq{type = set,
|
||||||
|
xmlns = ?NS_REGISTER = XMLNS,
|
||||||
|
lang = Lang,
|
||||||
|
sub_el = SubEl} = IQ ->
|
||||||
|
case process_iq_register_set(
|
||||||
|
ServerHost, Host, From, SubEl, Lang) of
|
||||||
|
{result, IQRes} ->
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el =
|
||||||
|
[{xmlelement, "query",
|
||||||
|
[{"xmlns", XMLNS}],
|
||||||
|
IQRes}]},
|
||||||
|
ejabberd_router:route(
|
||||||
|
To, From, jlib:iq_to_xml(Res));
|
||||||
|
{error, Error} ->
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet, Error),
|
||||||
|
ejabberd_router:route(
|
||||||
|
To, From, Err)
|
||||||
|
end;
|
||||||
|
#iq{type = get,
|
||||||
|
xmlns = ?NS_VCARD = XMLNS,
|
||||||
|
lang = Lang,
|
||||||
|
sub_el = _SubEl} = IQ ->
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el =
|
||||||
|
[{xmlelement, "vCard",
|
||||||
|
[{"xmlns", XMLNS}],
|
||||||
|
iq_get_vcard(Lang)}]},
|
||||||
|
ejabberd_router:route(To,
|
||||||
|
From,
|
||||||
|
jlib:iq_to_xml(Res));
|
||||||
|
#iq{type = get,
|
||||||
|
xmlns = ?NS_MUC_UNIQUE
|
||||||
|
} = IQ ->
|
||||||
|
Res = IQ#iq{type = result,
|
||||||
|
sub_el =
|
||||||
|
[{xmlelement, "unique",
|
||||||
|
[{"xmlns", ?NS_MUC_UNIQUE}],
|
||||||
|
[iq_get_unique(From)]}]},
|
||||||
|
ejabberd_router:route(To,
|
||||||
|
From,
|
||||||
|
jlib:iq_to_xml(Res));
|
||||||
|
#iq{} ->
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet,
|
||||||
|
?ERR_FEATURE_NOT_IMPLEMENTED),
|
||||||
|
ejabberd_router:route(To, From, Err);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
"message" ->
|
||||||
|
case xml:get_attr_s("type", Attrs) of
|
||||||
|
"error" ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
case acl:match_rule(ServerHost, AccessAdmin, From) of
|
||||||
|
allow ->
|
||||||
|
Msg = xml:get_path_s(
|
||||||
|
Packet,
|
||||||
|
[{elem, "body"}, cdata]),
|
||||||
|
broadcast_service_message(Host, Msg);
|
||||||
|
_ ->
|
||||||
|
Lang = xml:get_attr_s("xml:lang", Attrs),
|
||||||
|
ErrText = "Only service administrators "
|
||||||
|
"are allowed to send service messages",
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet,
|
||||||
|
?ERRT_FORBIDDEN(Lang, ErrText)),
|
||||||
|
ejabberd_router:route(
|
||||||
|
To, From, Err)
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
"presence" ->
|
||||||
|
ok
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
case xml:get_attr_s("type", Attrs) of
|
||||||
|
"error" ->
|
||||||
|
ok;
|
||||||
|
"result" ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet, ?ERR_ITEM_NOT_FOUND),
|
||||||
|
ejabberd_router:route(To, From, Err)
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
case mnesia:dirty_read(muc_online_room, {Room, Host}) of
|
||||||
|
[] ->
|
||||||
|
Type = xml:get_attr_s("type", Attrs),
|
||||||
|
case {Name, Type} of
|
||||||
|
{"presence", ""} ->
|
||||||
|
case check_user_can_create_room(ServerHost,
|
||||||
|
AccessCreate, From,
|
||||||
|
Room) of
|
||||||
|
true ->
|
||||||
|
{ok, Pid} = start_new_room(
|
||||||
|
Host, ServerHost, Access,
|
||||||
|
Room, HistorySize,
|
||||||
|
RoomShaper, From,
|
||||||
|
Nick, DefRoomOpts),
|
||||||
|
register_room(Host, Room, Pid),
|
||||||
|
mod_muc_room:route(Pid, From, Nick, Packet),
|
||||||
|
ok;
|
||||||
|
false ->
|
||||||
|
Lang = xml:get_attr_s("xml:lang", Attrs),
|
||||||
|
ErrText = "Room creation is denied by service policy",
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet, ?ERRT_FORBIDDEN(Lang, ErrText)),
|
||||||
|
ejabberd_router:route(To, From, Err)
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
Lang = xml:get_attr_s("xml:lang", Attrs),
|
||||||
|
ErrText = "Conference room does not exist",
|
||||||
|
Err = jlib:make_error_reply(
|
||||||
|
Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)),
|
||||||
|
ejabberd_router:route(To, From, Err)
|
||||||
|
end;
|
||||||
|
[R] ->
|
||||||
|
Pid = R#muc_online_room.pid,
|
||||||
|
?DEBUG("MUC: send to process ~p~n", [Pid]),
|
||||||
|
mod_muc_room:route(Pid, From, Nick, Packet),
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
|
check_user_can_create_room(ServerHost, AccessCreate, From, RoomID) ->
|
||||||
|
case acl:match_rule(ServerHost, AccessCreate, From) of
|
||||||
|
allow ->
|
||||||
|
(length(RoomID) =< gen_mod:get_module_opt(ServerHost, ?MODULE,
|
||||||
|
max_room_id, infinite));
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
load_permanent_rooms(Host, ServerHost, Access, HistorySize, RoomShaper) ->
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select name, opts from muc_room ",
|
||||||
|
"where host='", SHost, "';"]) of
|
||||||
|
{'EXIT', Reason} ->
|
||||||
|
?ERROR_MSG("~p", [Reason]),
|
||||||
|
ok;
|
||||||
|
{selected, ["name", "opts"], RoomOpts} ->
|
||||||
|
lists:foreach(
|
||||||
|
fun({Room, Opts}) ->
|
||||||
|
case mnesia:dirty_read(muc_online_room, {Room, Host}) of
|
||||||
|
[] ->
|
||||||
|
{ok, Pid} = mod_muc_room:start(
|
||||||
|
Host,
|
||||||
|
ServerHost,
|
||||||
|
Access,
|
||||||
|
Room,
|
||||||
|
HistorySize,
|
||||||
|
RoomShaper,
|
||||||
|
ejabberd_odbc:decode_term(Opts),
|
||||||
|
?MODULE),
|
||||||
|
register_room(Host, Room, Pid);
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end, RoomOpts)
|
||||||
|
end.
|
||||||
|
|
||||||
|
start_new_room(Host, ServerHost, Access, Room,
|
||||||
|
HistorySize, RoomShaper, From,
|
||||||
|
Nick, DefRoomOpts) ->
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
SRoom = ejabberd_odbc:escape(Room),
|
||||||
|
case ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select opts from muc_room where name='", SRoom,
|
||||||
|
"' and host='", SHost, "';"]) of
|
||||||
|
{selected, ["opts"], []} ->
|
||||||
|
?DEBUG("MUC: open new room '~s'~n", [Room]),
|
||||||
|
mod_muc_room:start(Host, ServerHost, Access,
|
||||||
|
Room, HistorySize,
|
||||||
|
RoomShaper, From,
|
||||||
|
Nick, DefRoomOpts, ?MODULE);
|
||||||
|
{selected, ["opts"], [{Opts}|_]} ->
|
||||||
|
?DEBUG("MUC: restore room '~s'~n", [Room]),
|
||||||
|
mod_muc_room:start(Host, ServerHost, Access,
|
||||||
|
Room, HistorySize,
|
||||||
|
RoomShaper, ejabberd_odbc:decode_term(Opts),
|
||||||
|
?MODULE)
|
||||||
|
end.
|
||||||
|
|
||||||
|
register_room(Host, Room, Pid) ->
|
||||||
|
F = fun() ->
|
||||||
|
mnesia:write(#muc_online_room{name_host = {Room, Host},
|
||||||
|
pid = Pid})
|
||||||
|
end,
|
||||||
|
mnesia:transaction(F).
|
||||||
|
|
||||||
|
|
||||||
|
iq_disco_info(Lang) ->
|
||||||
|
[{xmlelement, "identity",
|
||||||
|
[{"category", "conference"},
|
||||||
|
{"type", "text"},
|
||||||
|
{"name", translate:translate(Lang, "Chatrooms")}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_DISCO_INFO}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_DISCO_ITEMS}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_MUC}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_MUC_UNIQUE}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_REGISTER}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_RSM}], []},
|
||||||
|
{xmlelement, "feature", [{"var", ?NS_VCARD}], []}].
|
||||||
|
|
||||||
|
|
||||||
|
iq_disco_items(Host, From, Lang, none) ->
|
||||||
|
lists:zf(fun(#muc_online_room{name_host = {Name, _Host}, pid = Pid}) ->
|
||||||
|
case catch gen_fsm:sync_send_all_state_event(
|
||||||
|
Pid, {get_disco_item, From, Lang}, 100) of
|
||||||
|
{item, Desc} ->
|
||||||
|
flush(),
|
||||||
|
{true,
|
||||||
|
{xmlelement, "item",
|
||||||
|
[{"jid", jlib:jid_to_string({Name, Host, ""})},
|
||||||
|
{"name", Desc}], []}};
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end, get_vh_rooms(Host));
|
||||||
|
|
||||||
|
iq_disco_items(Host, From, Lang, Rsm) ->
|
||||||
|
{Rooms, RsmO} = get_vh_rooms(Host, Rsm),
|
||||||
|
RsmOut = jlib:rsm_encode(RsmO),
|
||||||
|
lists:zf(fun(#muc_online_room{name_host = {Name, _Host}, pid = Pid}) ->
|
||||||
|
case catch gen_fsm:sync_send_all_state_event(
|
||||||
|
Pid, {get_disco_item, From, Lang}, 100) of
|
||||||
|
{item, Desc} ->
|
||||||
|
flush(),
|
||||||
|
{true,
|
||||||
|
{xmlelement, "item",
|
||||||
|
[{"jid", jlib:jid_to_string({Name, Host, ""})},
|
||||||
|
{"name", Desc}], []}};
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end, Rooms) ++ RsmOut.
|
||||||
|
|
||||||
|
get_vh_rooms(Host, #rsm_in{max=M, direction=Direction, id=I, index=Index})->
|
||||||
|
AllRooms = lists:sort(get_vh_rooms(Host)),
|
||||||
|
Count = erlang:length(AllRooms),
|
||||||
|
Guard = case Direction of
|
||||||
|
_ when Index =/= undefined -> [{'==', {element, 2, '$1'}, Host}];
|
||||||
|
aft -> [{'==', {element, 2, '$1'}, Host}, {'>=',{element, 1, '$1'} ,I}];
|
||||||
|
before when I =/= []-> [{'==', {element, 2, '$1'}, Host}, {'=<',{element, 1, '$1'} ,I}];
|
||||||
|
_ -> [{'==', {element, 2, '$1'}, Host}]
|
||||||
|
end,
|
||||||
|
L = lists:sort(
|
||||||
|
mnesia:dirty_select(muc_online_room,
|
||||||
|
[{#muc_online_room{name_host = '$1', _ = '_'},
|
||||||
|
Guard,
|
||||||
|
['$_']}])),
|
||||||
|
L2 = if
|
||||||
|
Index == undefined andalso Direction == before ->
|
||||||
|
lists:reverse(lists:sublist(lists:reverse(L), 1, M));
|
||||||
|
Index == undefined ->
|
||||||
|
lists:sublist(L, 1, M);
|
||||||
|
Index > Count orelse Index < 0 ->
|
||||||
|
[];
|
||||||
|
true ->
|
||||||
|
lists:sublist(L, Index+1, M)
|
||||||
|
end,
|
||||||
|
if
|
||||||
|
L2 == [] ->
|
||||||
|
{L2, #rsm_out{count=Count}};
|
||||||
|
true ->
|
||||||
|
H = hd(L2),
|
||||||
|
NewIndex = get_room_pos(H, AllRooms),
|
||||||
|
T=lists:last(L2),
|
||||||
|
{F, _}=H#muc_online_room.name_host,
|
||||||
|
{Last, _}=T#muc_online_room.name_host,
|
||||||
|
{L2, #rsm_out{first=F, last=Last, count=Count, index=NewIndex}}
|
||||||
|
end.
|
||||||
|
|
||||||
|
%% @doc Return the position of desired room in the list of rooms.
|
||||||
|
%% The room must exist in the list. The count starts in 0.
|
||||||
|
%% @spec (Desired::muc_online_room(), Rooms::[muc_online_room()]) -> integer()
|
||||||
|
get_room_pos(Desired, Rooms) ->
|
||||||
|
get_room_pos(Desired, Rooms, 0).
|
||||||
|
get_room_pos(Desired, [HeadRoom | _], HeadPosition)
|
||||||
|
when (Desired#muc_online_room.name_host ==
|
||||||
|
HeadRoom#muc_online_room.name_host) ->
|
||||||
|
HeadPosition;
|
||||||
|
get_room_pos(Desired, [_ | Rooms], HeadPosition) ->
|
||||||
|
get_room_pos(Desired, Rooms, HeadPosition + 1).
|
||||||
|
|
||||||
|
flush() ->
|
||||||
|
receive
|
||||||
|
_ ->
|
||||||
|
flush()
|
||||||
|
after 0 ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
|
-define(XFIELD(Type, Label, Var, Val),
|
||||||
|
{xmlelement, "field", [{"type", Type},
|
||||||
|
{"label", translate:translate(Lang, Label)},
|
||||||
|
{"var", Var}],
|
||||||
|
[{xmlelement, "value", [], [{xmlcdata, Val}]}]}).
|
||||||
|
|
||||||
|
%% @doc Get a pseudo unique Room Name. The Room Name is generated as a hash of
|
||||||
|
%% the requester JID, the local time and a random salt.
|
||||||
|
%%
|
||||||
|
%% "pseudo" because we don't verify that there is not a room
|
||||||
|
%% with the returned Name already created, nor mark the generated Name
|
||||||
|
%% as "already used". But in practice, it is unique enough. See
|
||||||
|
%% http://xmpp.org/extensions/xep-0045.html#createroom-unique
|
||||||
|
iq_get_unique(From) ->
|
||||||
|
{xmlcdata, sha:sha(term_to_binary([From, now(), randoms:get_string()]))}.
|
||||||
|
|
||||||
|
iq_get_register_info(ServerHost, Host, From, Lang) ->
|
||||||
|
SJID = ejabberd_odbc:escape(
|
||||||
|
jlib:jid_to_string(
|
||||||
|
jlib:jid_tolower(
|
||||||
|
jlib:jid_remove_resource(From)))),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
{Nick, Registered} =
|
||||||
|
case catch ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select nick from muc_registered where "
|
||||||
|
"jid='", SJID, "' and host='", SHost, "';"]) of
|
||||||
|
{selected, ["nick"], [{N}]} ->
|
||||||
|
{N, [{xmlelement, "registered", [], []}]};
|
||||||
|
_ ->
|
||||||
|
{"", []}
|
||||||
|
end,
|
||||||
|
Registered ++
|
||||||
|
[{xmlelement, "instructions", [],
|
||||||
|
[{xmlcdata,
|
||||||
|
translate:translate(
|
||||||
|
Lang, "You need a client that supports x:data to register the nickname")}]},
|
||||||
|
{xmlelement, "x",
|
||||||
|
[{"xmlns", ?NS_XDATA}],
|
||||||
|
[{xmlelement, "title", [],
|
||||||
|
[{xmlcdata,
|
||||||
|
translate:translate(
|
||||||
|
Lang, "Nickname Registration at ") ++ Host}]},
|
||||||
|
{xmlelement, "instructions", [],
|
||||||
|
[{xmlcdata,
|
||||||
|
translate:translate(
|
||||||
|
Lang, "Enter nickname you want to register")}]},
|
||||||
|
?XFIELD("text-single", "Nickname", "nick", Nick)]}].
|
||||||
|
|
||||||
|
iq_set_register_info(ServerHost, Host, From, Nick, Lang) ->
|
||||||
|
JID = jlib:jid_to_string(
|
||||||
|
jlib:jid_tolower(
|
||||||
|
jlib:jid_remove_resource(From))),
|
||||||
|
SJID = ejabberd_odbc:escape(JID),
|
||||||
|
SNick = ejabberd_odbc:escape(Nick),
|
||||||
|
SHost = ejabberd_odbc:escape(Host),
|
||||||
|
LServer = jlib:nameprep(ServerHost),
|
||||||
|
F = fun() ->
|
||||||
|
case Nick of
|
||||||
|
"" ->
|
||||||
|
ejabberd_odbc:sql_query_t(
|
||||||
|
["delete from muc_registered where ",
|
||||||
|
"jid='", SJID, "' and host='", Host, "';"]),
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
Allow =
|
||||||
|
case ejabberd_odbc:sql_query_t(
|
||||||
|
["select jid from muc_registered ",
|
||||||
|
"where nick='", SNick, "' and host='",
|
||||||
|
SHost, "';"]) of
|
||||||
|
{selected, ["jid"], [{J}]} ->
|
||||||
|
J == JID;
|
||||||
|
_ ->
|
||||||
|
true
|
||||||
|
end,
|
||||||
|
if Allow ->
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"muc_registered",
|
||||||
|
["jid", "host", "nick"],
|
||||||
|
[SJID, SHost, SNick],
|
||||||
|
["jid='", SJID, "' and host='", SHost, "'"]),
|
||||||
|
ok;
|
||||||
|
true ->
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
case catch ejabberd_odbc:sql_transaction(LServer, F) of
|
||||||
|
{atomic, ok} ->
|
||||||
|
{result, []};
|
||||||
|
{atomic, false} ->
|
||||||
|
ErrText = "That nickname is registered by another person",
|
||||||
|
{error, ?ERRT_CONFLICT(Lang, ErrText)};
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
|
end.
|
||||||
|
|
||||||
|
process_iq_register_set(ServerHost, Host, From, SubEl, Lang) ->
|
||||||
|
{xmlelement, _Name, _Attrs, Els} = SubEl,
|
||||||
|
case xml:get_subtag(SubEl, "remove") of
|
||||||
|
false ->
|
||||||
|
case xml:remove_cdata(Els) of
|
||||||
|
[{xmlelement, "x", _Attrs1, _Els1} = XEl] ->
|
||||||
|
case {xml:get_tag_attr_s("xmlns", XEl),
|
||||||
|
xml:get_tag_attr_s("type", XEl)} of
|
||||||
|
{?NS_XDATA, "cancel"} ->
|
||||||
|
{result, []};
|
||||||
|
{?NS_XDATA, "submit"} ->
|
||||||
|
XData = jlib:parse_xdata_submit(XEl),
|
||||||
|
case XData of
|
||||||
|
invalid ->
|
||||||
|
{error, ?ERR_BAD_REQUEST};
|
||||||
|
_ ->
|
||||||
|
case lists:keysearch("nick", 1, XData) of
|
||||||
|
{value, {_, [Nick]}} when Nick /= "" ->
|
||||||
|
iq_set_register_info(ServerHost, Host,
|
||||||
|
From, Nick, Lang);
|
||||||
|
_ ->
|
||||||
|
ErrText = "You must fill in field \"Nickname\" in the form",
|
||||||
|
{error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_BAD_REQUEST}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
{error, ?ERR_BAD_REQUEST}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
iq_set_register_info(ServerHost, Host, From, "", Lang)
|
||||||
|
end.
|
||||||
|
|
||||||
|
iq_get_vcard(Lang) ->
|
||||||
|
[{xmlelement, "FN", [],
|
||||||
|
[{xmlcdata, "ejabberd/mod_muc"}]},
|
||||||
|
{xmlelement, "URL", [],
|
||||||
|
[{xmlcdata, ?EJABBERD_URI}]},
|
||||||
|
{xmlelement, "DESC", [],
|
||||||
|
[{xmlcdata, translate:translate(Lang, "ejabberd MUC module") ++
|
||||||
|
"\nCopyright (c) 2003-2012 ProcessOne"}]}].
|
||||||
|
|
||||||
|
|
||||||
|
broadcast_service_message(Host, Msg) ->
|
||||||
|
lists:foreach(
|
||||||
|
fun(#muc_online_room{pid = Pid}) ->
|
||||||
|
gen_fsm:send_all_state_event(
|
||||||
|
Pid, {service_message, Msg})
|
||||||
|
end, get_vh_rooms(Host)).
|
||||||
|
|
||||||
|
get_vh_rooms(Host) ->
|
||||||
|
mnesia:dirty_select(muc_online_room,
|
||||||
|
[{#muc_online_room{name_host = '$1', _ = '_'},
|
||||||
|
[{'==', {element, 2, '$1'}, Host}],
|
||||||
|
['$_']}]).
|
||||||
|
|
||||||
|
|
||||||
|
clean_table_from_bad_node(Node) ->
|
||||||
|
F = fun() ->
|
||||||
|
Es = mnesia:select(
|
||||||
|
muc_online_room,
|
||||||
|
[{#muc_online_room{pid = '$1', _ = '_'},
|
||||||
|
[{'==', {node, '$1'}, Node}],
|
||||||
|
['$_']}]),
|
||||||
|
lists:foreach(fun(E) ->
|
||||||
|
mnesia:delete_object(E)
|
||||||
|
end, Es)
|
||||||
|
end,
|
||||||
|
mnesia:async_dirty(F).
|
||||||
|
|
||||||
|
clean_table_from_bad_node(Node, Host) ->
|
||||||
|
F = fun() ->
|
||||||
|
Es = mnesia:select(
|
||||||
|
muc_online_room,
|
||||||
|
[{#muc_online_room{pid = '$1',
|
||||||
|
name_host = {'_', Host},
|
||||||
|
_ = '_'},
|
||||||
|
[{'==', {node, '$1'}, Node}],
|
||||||
|
['$_']}]),
|
||||||
|
lists:foreach(fun(E) ->
|
||||||
|
mnesia:delete_object(E)
|
||||||
|
end, Es)
|
||||||
|
end,
|
||||||
|
mnesia:async_dirty(F).
|
@ -33,11 +33,11 @@
|
|||||||
|
|
||||||
|
|
||||||
%% External exports
|
%% External exports
|
||||||
-export([start_link/10,
|
-export([start_link/11,
|
||||||
start_link/8,
|
start_link/9,
|
||||||
start_link/2,
|
start_link/2,
|
||||||
start/10,
|
start/11,
|
||||||
start/8,
|
start/9,
|
||||||
start/2,
|
start/2,
|
||||||
migrate/3,
|
migrate/3,
|
||||||
route/4,
|
route/4,
|
||||||
@ -83,29 +83,29 @@
|
|||||||
%%% API
|
%%% API
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
||||||
Creator, Nick, DefRoomOpts) ->
|
Creator, Nick, DefRoomOpts, Mod) ->
|
||||||
?SUPERVISOR_START([Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
?SUPERVISOR_START([Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, Creator, Nick, DefRoomOpts]).
|
RoomShaper, Creator, Nick, DefRoomOpts, Mod]).
|
||||||
|
|
||||||
start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts) ->
|
start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod) ->
|
||||||
Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
|
Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
|
||||||
supervisor:start_child(
|
supervisor:start_child(
|
||||||
Supervisor, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
Supervisor, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
||||||
Opts]).
|
Opts, Mod]).
|
||||||
|
|
||||||
start(StateName, StateData) ->
|
start(StateName, StateData) ->
|
||||||
ServerHost = StateData#state.server_host,
|
ServerHost = StateData#state.server_host,
|
||||||
?SUPERVISOR_START([StateName, StateData]).
|
?SUPERVISOR_START([StateName, StateData]).
|
||||||
|
|
||||||
start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper,
|
||||||
Creator, Nick, DefRoomOpts) ->
|
Creator, Nick, DefRoomOpts, Mod) ->
|
||||||
?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, Creator, Nick, DefRoomOpts],
|
RoomShaper, Creator, Nick, DefRoomOpts, Mod],
|
||||||
?FSMOPTS).
|
?FSMOPTS).
|
||||||
|
|
||||||
start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts) ->
|
start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod) ->
|
||||||
?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory,
|
||||||
RoomShaper, Opts],
|
RoomShaper, Opts, Mod],
|
||||||
?FSMOPTS).
|
?FSMOPTS).
|
||||||
|
|
||||||
start_link(StateName, StateData) ->
|
start_link(StateName, StateData) ->
|
||||||
@ -130,12 +130,13 @@ persist_recent_messages(FsmRef) ->
|
|||||||
%% ignore |
|
%% ignore |
|
||||||
%% {stop, StopReason}
|
%% {stop, StopReason}
|
||||||
%%----------------------------------------------------------------------
|
%%----------------------------------------------------------------------
|
||||||
init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Creator, _Nick, DefRoomOpts]) ->
|
init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Creator, _Nick, DefRoomOpts, Mod]) ->
|
||||||
process_flag(trap_exit, true),
|
process_flag(trap_exit, true),
|
||||||
Shaper = shaper:new(RoomShaper),
|
Shaper = shaper:new(RoomShaper),
|
||||||
State = set_affiliation(Creator, owner,
|
State = set_affiliation(Creator, owner,
|
||||||
#state{host = Host,
|
#state{host = Host,
|
||||||
server_host = ServerHost,
|
server_host = ServerHost,
|
||||||
|
mod = Mod,
|
||||||
access = Access,
|
access = Access,
|
||||||
room = Room,
|
room = Room,
|
||||||
history = lqueue_new(HistorySize),
|
history = lqueue_new(HistorySize),
|
||||||
@ -159,11 +160,12 @@ init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, C
|
|||||||
add_to_log(room_existence, created, State1),
|
add_to_log(room_existence, created, State1),
|
||||||
add_to_log(room_existence, started, State1),
|
add_to_log(room_existence, started, State1),
|
||||||
{ok, normal_state, State1};
|
{ok, normal_state, State1};
|
||||||
init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts]) ->
|
init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod]) ->
|
||||||
process_flag(trap_exit, true),
|
process_flag(trap_exit, true),
|
||||||
Shaper = shaper:new(RoomShaper),
|
Shaper = shaper:new(RoomShaper),
|
||||||
State = set_opts(Opts, #state{host = Host,
|
State = set_opts(Opts, #state{host = Host,
|
||||||
server_host = ServerHost,
|
server_host = ServerHost,
|
||||||
|
mod = Mod,
|
||||||
access = Access,
|
access = Access,
|
||||||
room = Room,
|
room = Room,
|
||||||
history = load_history(ServerHost, Room, PersistHistory, lqueue_new(HistorySize)),
|
history = load_history(ServerHost, Room, PersistHistory, lqueue_new(HistorySize)),
|
||||||
@ -197,7 +199,8 @@ normal_state({route, From, "",
|
|||||||
MinMessageInterval =
|
MinMessageInterval =
|
||||||
trunc(gen_mod:get_module_opt(
|
trunc(gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, min_message_interval, 0) * 1000000),
|
StateData#state.mod,
|
||||||
|
min_message_interval, 0) * 1000000),
|
||||||
Size = element_size(Packet),
|
Size = element_size(Packet),
|
||||||
{MessageShaper, MessageShaperInterval} =
|
{MessageShaper, MessageShaperInterval} =
|
||||||
shaper:update(Activity#activity.message_shaper, Size),
|
shaper:update(Activity#activity.message_shaper, Size),
|
||||||
@ -318,7 +321,8 @@ normal_state({route, From, "",
|
|||||||
StateData),
|
StateData),
|
||||||
case (NSD#state.config)#config.persistent of
|
case (NSD#state.config)#config.persistent of
|
||||||
true ->
|
true ->
|
||||||
mod_muc:store_room(
|
(NSD#state.mod):store_room(
|
||||||
|
NSD#state.server_host,
|
||||||
NSD#state.host,
|
NSD#state.host,
|
||||||
NSD#state.room,
|
NSD#state.room,
|
||||||
make_opts(NSD));
|
make_opts(NSD));
|
||||||
@ -394,7 +398,7 @@ normal_state({route, From, "",
|
|||||||
error ->
|
error ->
|
||||||
ErrText = "Failed to extract "
|
ErrText = "Failed to extract "
|
||||||
"JID from your voice "
|
"JID from your voice "
|
||||||
"request approvement",
|
"request approval",
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
Packet,
|
Packet,
|
||||||
?ERRT_BAD_REQUEST(
|
?ERRT_BAD_REQUEST(
|
||||||
@ -516,7 +520,7 @@ normal_state({route, From, Nick,
|
|||||||
MinPresenceInterval =
|
MinPresenceInterval =
|
||||||
trunc(gen_mod:get_module_opt(
|
trunc(gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, min_presence_interval, 0) * 1000000),
|
StateData#state.mod, min_presence_interval, 0) * 1000000),
|
||||||
if
|
if
|
||||||
(Now >= Activity#activity.presence_time + MinPresenceInterval) and
|
(Now >= Activity#activity.presence_time + MinPresenceInterval) and
|
||||||
(Activity#activity.presence == undefined) ->
|
(Activity#activity.presence == undefined) ->
|
||||||
@ -921,8 +925,8 @@ terminate(Reason, _StateName, StateData) ->
|
|||||||
true ->
|
true ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
|
(StateData#state.mod):room_destroyed(
|
||||||
mod_muc:room_destroyed(StateData#state.host, StateData#state.room, self(),
|
StateData#state.host, StateData#state.room, self(),
|
||||||
StateData#state.server_host),
|
StateData#state.server_host),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
@ -998,7 +1002,8 @@ process_groupchat_message(From, {xmlelement, "message", Attrs, _Els} = Packet,
|
|||||||
FromNick},
|
FromNick},
|
||||||
case (NSD#state.config)#config.persistent of
|
case (NSD#state.config)#config.persistent of
|
||||||
true ->
|
true ->
|
||||||
mod_muc:store_room(
|
(NSD#state.mod):store_room(
|
||||||
|
NSD#state.server_host,
|
||||||
NSD#state.host,
|
NSD#state.host,
|
||||||
NSD#state.room,
|
NSD#state.room,
|
||||||
make_opts(NSD));
|
make_opts(NSD));
|
||||||
@ -1136,7 +1141,8 @@ process_presence(From, Nick, {xmlelement, "presence", Attrs, _Els} = Packet,
|
|||||||
case is_nick_change(From, Nick, StateData) of
|
case is_nick_change(From, Nick, StateData) of
|
||||||
true ->
|
true ->
|
||||||
case {nick_collision(From, Nick, StateData),
|
case {nick_collision(From, Nick, StateData),
|
||||||
mod_muc:can_use_nick(
|
(StateData#state.mod):can_use_nick(
|
||||||
|
StateData#state.server_host,
|
||||||
StateData#state.host, From, Nick),
|
StateData#state.host, From, Nick),
|
||||||
{(StateData#state.config)#config.allow_visitor_nickchange,
|
{(StateData#state.config)#config.allow_visitor_nickchange,
|
||||||
is_visitor(From, StateData)}} of
|
is_visitor(From, StateData)}} of
|
||||||
@ -1532,11 +1538,11 @@ get_max_users(StateData) ->
|
|||||||
|
|
||||||
get_service_max_users(StateData) ->
|
get_service_max_users(StateData) ->
|
||||||
gen_mod:get_module_opt(StateData#state.server_host,
|
gen_mod:get_module_opt(StateData#state.server_host,
|
||||||
mod_muc, max_users, ?MAX_USERS_DEFAULT).
|
StateData#state.mod, max_users, ?MAX_USERS_DEFAULT).
|
||||||
|
|
||||||
get_max_users_admin_threshold(StateData) ->
|
get_max_users_admin_threshold(StateData) ->
|
||||||
gen_mod:get_module_opt(StateData#state.server_host,
|
gen_mod:get_module_opt(StateData#state.server_host,
|
||||||
mod_muc, max_users_admin_threshold, 5).
|
StateData#state.mod, max_users_admin_threshold, 5).
|
||||||
|
|
||||||
get_user_activity(JID, StateData) ->
|
get_user_activity(JID, StateData) ->
|
||||||
case treap:lookup(jlib:jid_tolower(JID),
|
case treap:lookup(jlib:jid_tolower(JID),
|
||||||
@ -1546,11 +1552,11 @@ get_user_activity(JID, StateData) ->
|
|||||||
MessageShaper =
|
MessageShaper =
|
||||||
shaper:new(gen_mod:get_module_opt(
|
shaper:new(gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, user_message_shaper, none)),
|
StateData#state.mod, user_message_shaper, none)),
|
||||||
PresenceShaper =
|
PresenceShaper =
|
||||||
shaper:new(gen_mod:get_module_opt(
|
shaper:new(gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, user_presence_shaper, none)),
|
StateData#state.mod, user_presence_shaper, none)),
|
||||||
#activity{message_shaper = MessageShaper,
|
#activity{message_shaper = MessageShaper,
|
||||||
presence_shaper = PresenceShaper}
|
presence_shaper = PresenceShaper}
|
||||||
end.
|
end.
|
||||||
@ -1559,11 +1565,11 @@ store_user_activity(JID, UserActivity, StateData) ->
|
|||||||
MinMessageInterval =
|
MinMessageInterval =
|
||||||
gen_mod:get_module_opt(
|
gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, min_message_interval, 0),
|
StateData#state.mod, min_message_interval, 0),
|
||||||
MinPresenceInterval =
|
MinPresenceInterval =
|
||||||
gen_mod:get_module_opt(
|
gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, min_presence_interval, 0),
|
StateData#state.mod, min_presence_interval, 0),
|
||||||
Key = jlib:jid_tolower(JID),
|
Key = jlib:jid_tolower(JID),
|
||||||
Now = now_to_usec(now()),
|
Now = now_to_usec(now()),
|
||||||
Activity1 = clean_treap(StateData#state.activity, {1, -Now}),
|
Activity1 = clean_treap(StateData#state.activity, {1, -Now}),
|
||||||
@ -1844,7 +1850,7 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
|
|||||||
NConferences = tab_count_user(From),
|
NConferences = tab_count_user(From),
|
||||||
MaxConferences = gen_mod:get_module_opt(
|
MaxConferences = gen_mod:get_module_opt(
|
||||||
StateData#state.server_host,
|
StateData#state.server_host,
|
||||||
mod_muc, max_user_conferences, 10),
|
StateData#state.mod, max_user_conferences, 10),
|
||||||
Collision = nick_collision(From, Nick, StateData),
|
Collision = nick_collision(From, Nick, StateData),
|
||||||
case {(ServiceAffiliation == owner orelse
|
case {(ServiceAffiliation == owner orelse
|
||||||
((Affiliation == admin orelse Affiliation == owner) andalso
|
((Affiliation == admin orelse Affiliation == owner) andalso
|
||||||
@ -1852,7 +1858,8 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
|
|||||||
NUsers < MaxUsers) andalso
|
NUsers < MaxUsers) andalso
|
||||||
NConferences < MaxConferences,
|
NConferences < MaxConferences,
|
||||||
Collision,
|
Collision,
|
||||||
mod_muc:can_use_nick(StateData#state.host, From, Nick),
|
(StateData#state.mod):can_use_nick(StateData#state.server_host,
|
||||||
|
StateData#state.host, From, Nick),
|
||||||
get_default_role(Affiliation, StateData)} of
|
get_default_role(Affiliation, StateData)} of
|
||||||
{false, _, _, _} ->
|
{false, _, _, _} ->
|
||||||
% max user reached and user is not admin or owner
|
% max user reached and user is not admin or owner
|
||||||
@ -1964,7 +1971,7 @@ add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) ->
|
|||||||
From, Err),
|
From, Err),
|
||||||
StateData;
|
StateData;
|
||||||
_ ->
|
_ ->
|
||||||
ErrText = "Unable to generate a captcha",
|
ErrText = "Unable to generate a CAPTCHA",
|
||||||
Err = jlib:make_error_reply(
|
Err = jlib:make_error_reply(
|
||||||
Packet, ?ERRT_INTERNAL_SERVER_ERROR(Lang, ErrText)),
|
Packet, ?ERRT_INTERNAL_SERVER_ERROR(Lang, ErrText)),
|
||||||
route_stanza( % TODO: s/Nick/""/
|
route_stanza( % TODO: s/Nick/""/
|
||||||
@ -2695,7 +2702,8 @@ process_admin_items_set(UJID, Items, Lang, StateData) ->
|
|||||||
end, StateData, lists:flatten(Res)),
|
end, StateData, lists:flatten(Res)),
|
||||||
case (NSD#state.config)#config.persistent of
|
case (NSD#state.config)#config.persistent of
|
||||||
true ->
|
true ->
|
||||||
mod_muc:store_room(NSD#state.host, NSD#state.room,
|
(NSD#state.mod):store_room(NSD#state.server_host,
|
||||||
|
NSD#state.host, NSD#state.room,
|
||||||
make_opts(NSD));
|
make_opts(NSD));
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
@ -3196,8 +3204,8 @@ is_allowed_room_name_desc_limits(XEl, StateData) ->
|
|||||||
jlib:parse_xdata_submit(XEl)) of
|
jlib:parse_xdata_submit(XEl)) of
|
||||||
{value, {_, [N]}} ->
|
{value, {_, [N]}} ->
|
||||||
length(N) =< gen_mod:get_module_opt(StateData#state.server_host,
|
length(N) =< gen_mod:get_module_opt(StateData#state.server_host,
|
||||||
mod_muc, max_room_name,
|
StateData#state.mod,
|
||||||
infinite);
|
max_room_name, infinite);
|
||||||
_ ->
|
_ ->
|
||||||
true
|
true
|
||||||
end,
|
end,
|
||||||
@ -3206,8 +3214,8 @@ is_allowed_room_name_desc_limits(XEl, StateData) ->
|
|||||||
jlib:parse_xdata_submit(XEl)) of
|
jlib:parse_xdata_submit(XEl)) of
|
||||||
{value, {_, [D]}} ->
|
{value, {_, [D]}} ->
|
||||||
length(D) =< gen_mod:get_module_opt(StateData#state.server_host,
|
length(D) =< gen_mod:get_module_opt(StateData#state.server_host,
|
||||||
mod_muc, max_room_desc,
|
StateData#state.mod,
|
||||||
infinite);
|
max_room_desc, infinite);
|
||||||
_ ->
|
_ ->
|
||||||
true
|
true
|
||||||
end,
|
end,
|
||||||
@ -3278,7 +3286,9 @@ is_password_settings_correct(XEl, StateData) ->
|
|||||||
|| JID <- JIDList]}).
|
|| JID <- JIDList]}).
|
||||||
|
|
||||||
get_default_room_maxusers(RoomState) ->
|
get_default_room_maxusers(RoomState) ->
|
||||||
DefRoomOpts = gen_mod:get_module_opt(RoomState#state.server_host, mod_muc, default_room_options, []),
|
DefRoomOpts = gen_mod:get_module_opt(
|
||||||
|
RoomState#state.server_host,
|
||||||
|
RoomState#state.mod, default_room_options, []),
|
||||||
RoomState2 = set_opts(DefRoomOpts, RoomState),
|
RoomState2 = set_opts(DefRoomOpts, RoomState),
|
||||||
(RoomState2#state.config)#config.max_users.
|
(RoomState2#state.config)#config.max_users.
|
||||||
|
|
||||||
@ -3417,7 +3427,7 @@ get_config(Lang, StateData, From) ->
|
|||||||
] ++
|
] ++
|
||||||
case ejabberd_captcha:is_feature_available() of
|
case ejabberd_captcha:is_feature_available() of
|
||||||
true ->
|
true ->
|
||||||
[?BOOLXFIELD("Make room captcha protected",
|
[?BOOLXFIELD("Make room CAPTCHA protected",
|
||||||
"captcha_protected",
|
"captcha_protected",
|
||||||
Config#config.captcha_protected)];
|
Config#config.captcha_protected)];
|
||||||
false -> []
|
false -> []
|
||||||
@ -3590,12 +3600,14 @@ set_xoption([_ | _Opts], _Config) ->
|
|||||||
|
|
||||||
change_config(Config, StateData) ->
|
change_config(Config, StateData) ->
|
||||||
NSD = StateData#state{config = Config},
|
NSD = StateData#state{config = Config},
|
||||||
|
Mod = StateData#state.mod,
|
||||||
case {(StateData#state.config)#config.persistent,
|
case {(StateData#state.config)#config.persistent,
|
||||||
Config#config.persistent} of
|
Config#config.persistent} of
|
||||||
{_, true} ->
|
{_, true} ->
|
||||||
mod_muc:store_room(NSD#state.host, NSD#state.room, make_opts(NSD));
|
Mod:store_room(NSD#state.server_host, NSD#state.host,
|
||||||
|
NSD#state.room, make_opts(NSD));
|
||||||
{true, false} ->
|
{true, false} ->
|
||||||
mod_muc:forget_room(NSD#state.host, NSD#state.room);
|
Mod:forget_room(NSD#state.server_host, NSD#state.host, NSD#state.room);
|
||||||
{false, false} ->
|
{false, false} ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
@ -3726,7 +3738,9 @@ destroy_room(DEl, StateData) ->
|
|||||||
end, ?DICT:to_list(StateData#state.users)),
|
end, ?DICT:to_list(StateData#state.users)),
|
||||||
case (StateData#state.config)#config.persistent of
|
case (StateData#state.config)#config.persistent of
|
||||||
true ->
|
true ->
|
||||||
mod_muc:forget_room(StateData#state.host, StateData#state.room);
|
(StateData#state.mod):forget_room(
|
||||||
|
StateData#state.server_host,
|
||||||
|
StateData#state.host, StateData#state.room);
|
||||||
false ->
|
false ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
-record(state, {room,
|
-record(state, {room,
|
||||||
host,
|
host,
|
||||||
server_host,
|
server_host,
|
||||||
|
mod,
|
||||||
access,
|
access,
|
||||||
jid,
|
jid,
|
||||||
config = #config{},
|
config = #config{},
|
||||||
|
@ -36,8 +36,20 @@
|
|||||||
get_user_list/3,
|
get_user_list/3,
|
||||||
check_packet/6,
|
check_packet/6,
|
||||||
remove_user/2,
|
remove_user/2,
|
||||||
|
item_to_raw/1,
|
||||||
|
raw_to_item/1,
|
||||||
updated_list/3]).
|
updated_list/3]).
|
||||||
|
|
||||||
|
%% For mod_blocking_odbc
|
||||||
|
-export([sql_add_privacy_list/2,
|
||||||
|
sql_get_default_privacy_list/2,
|
||||||
|
sql_get_default_privacy_list_t/1,
|
||||||
|
sql_get_privacy_list_data/3,
|
||||||
|
sql_get_privacy_list_data_by_id_t/1,
|
||||||
|
sql_get_privacy_list_id_t/2,
|
||||||
|
sql_set_default_privacy_list/2,
|
||||||
|
sql_set_privacy_list/2]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
-include("jlib.hrl").
|
-include("jlib.hrl").
|
||||||
-include("mod_privacy.hrl").
|
-include("mod_privacy.hrl").
|
||||||
@ -835,6 +847,9 @@ sql_get_privacy_list_data(LUser, LServer, Name) ->
|
|||||||
sql_get_privacy_list_data_by_id(ID, LServer) ->
|
sql_get_privacy_list_data_by_id(ID, LServer) ->
|
||||||
odbc_queries:get_privacy_list_data_by_id(LServer, ID).
|
odbc_queries:get_privacy_list_data_by_id(LServer, ID).
|
||||||
|
|
||||||
|
sql_get_privacy_list_data_by_id_t(ID) ->
|
||||||
|
odbc_queries:get_privacy_list_data_by_id_t(ID).
|
||||||
|
|
||||||
sql_set_default_privacy_list(LUser, Name) ->
|
sql_set_default_privacy_list(LUser, Name) ->
|
||||||
Username = ejabberd_odbc:escape(LUser),
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
SName = ejabberd_odbc:escape(Name),
|
SName = ejabberd_odbc:escape(Name),
|
||||||
|
@ -1349,7 +1349,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
|
|||||||
{get, "subscriptions"} ->
|
{get, "subscriptions"} ->
|
||||||
get_subscriptions(Host, Node, From, Plugins);
|
get_subscriptions(Host, Node, From, Plugins);
|
||||||
{get, "affiliations"} ->
|
{get, "affiliations"} ->
|
||||||
get_affiliations(Host, From, Plugins);
|
get_affiliations(Host, Node, From, Plugins);
|
||||||
{get, "options"} ->
|
{get, "options"} ->
|
||||||
SubID = xml:get_attr_s("subid", Attrs),
|
SubID = xml:get_attr_s("subid", Attrs),
|
||||||
JID = xml:get_attr_s("jid", Attrs),
|
JID = xml:get_attr_s("jid", Attrs),
|
||||||
@ -2453,7 +2453,7 @@ send_items(Host, Node, NodeId, Type, {U,S,R} = LJID, Number) ->
|
|||||||
%% Reason = stanzaError()
|
%% Reason = stanzaError()
|
||||||
%% Response = [pubsubIQResponse()]
|
%% Response = [pubsubIQResponse()]
|
||||||
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
|
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
|
||||||
get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
|
get_affiliations(Host, <<>>, JID, Plugins) when is_list(Plugins) ->
|
||||||
Result = lists:foldl(
|
Result = lists:foldl(
|
||||||
fun(Type, {Status, Acc}) ->
|
fun(Type, {Status, Acc}) ->
|
||||||
Features = features(Type),
|
Features = features(Type),
|
||||||
@ -2482,6 +2482,40 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
|
|||||||
{Error, _} ->
|
{Error, _} ->
|
||||||
Error
|
Error
|
||||||
end;
|
end;
|
||||||
|
get_affiliations(Host, NodeId, JID, Plugins) when is_list(Plugins) ->
|
||||||
|
Result = lists:foldl(
|
||||||
|
fun(Type, {Status, Acc}) ->
|
||||||
|
Features = features(Type),
|
||||||
|
RetrieveFeature = lists:member("retrieve-affiliations", Features),
|
||||||
|
if
|
||||||
|
not RetrieveFeature ->
|
||||||
|
%% Service does not support retreive affiliatons
|
||||||
|
{{error, extended_error(?ERR_FEATURE_NOT_IMPLEMENTED, unsupported, "retrieve-affiliations")}, Acc};
|
||||||
|
true ->
|
||||||
|
{result, Affiliations} = node_action(Host, Type, get_entity_affiliations, [Host, JID]),
|
||||||
|
{Status, [Affiliations|Acc]}
|
||||||
|
end
|
||||||
|
end, {ok, []}, Plugins),
|
||||||
|
case Result of
|
||||||
|
{ok, Affiliations} ->
|
||||||
|
Entities = lists:flatmap(
|
||||||
|
fun({_, none}) -> [];
|
||||||
|
({#pubsub_node{nodeid = {_, Node}}, Affiliation})
|
||||||
|
when NodeId == Node ->
|
||||||
|
[{xmlelement, "affiliation",
|
||||||
|
[{"affiliation", affiliation_to_string(Affiliation)}|nodeAttr(Node)],
|
||||||
|
[]}];
|
||||||
|
(_) ->
|
||||||
|
[]
|
||||||
|
end, lists:usort(lists:flatten(Affiliations))),
|
||||||
|
{result, [{xmlelement, "pubsub", [{"xmlns", ?NS_PUBSUB}],
|
||||||
|
[{xmlelement, "affiliations", [],
|
||||||
|
Entities}]}]};
|
||||||
|
{Error, _} ->
|
||||||
|
Error
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
get_affiliations(Host, Node, JID) ->
|
get_affiliations(Host, Node, JID) ->
|
||||||
Action = fun(#pubsub_node{type = Type, id = NodeId}) ->
|
Action = fun(#pubsub_node{type = Type, id = NodeId}) ->
|
||||||
Features = features(Type),
|
Features = features(Type),
|
||||||
|
@ -1112,7 +1112,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
|
|||||||
{get, "subscriptions"} ->
|
{get, "subscriptions"} ->
|
||||||
get_subscriptions(Host, Node, From, Plugins);
|
get_subscriptions(Host, Node, From, Plugins);
|
||||||
{get, "affiliations"} ->
|
{get, "affiliations"} ->
|
||||||
get_affiliations(Host, From, Plugins);
|
get_affiliations(Host, Node, From, Plugins);
|
||||||
{get, "options"} ->
|
{get, "options"} ->
|
||||||
SubID = xml:get_attr_s("subid", Attrs),
|
SubID = xml:get_attr_s("subid", Attrs),
|
||||||
JID = xml:get_attr_s("jid", Attrs),
|
JID = xml:get_attr_s("jid", Attrs),
|
||||||
@ -2238,7 +2238,7 @@ send_items(Host, Node, NodeId, Type, {U,S,R} = LJID, Number) ->
|
|||||||
%% Reason = stanzaError()
|
%% Reason = stanzaError()
|
||||||
%% Response = [pubsubIQResponse()]
|
%% Response = [pubsubIQResponse()]
|
||||||
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
|
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
|
||||||
get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
|
get_affiliations(Host, <<>>, JID, Plugins) when is_list(Plugins) ->
|
||||||
Result = lists:foldl(
|
Result = lists:foldl(
|
||||||
fun(Type, {Status, Acc}) ->
|
fun(Type, {Status, Acc}) ->
|
||||||
Features = features(Type),
|
Features = features(Type),
|
||||||
@ -2267,6 +2267,40 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) ->
|
|||||||
{Error, _} ->
|
{Error, _} ->
|
||||||
Error
|
Error
|
||||||
end;
|
end;
|
||||||
|
get_affiliations(Host, NodeId, JID, Plugins) when is_list(Plugins) ->
|
||||||
|
Result = lists:foldl(
|
||||||
|
fun(Type, {Status, Acc}) ->
|
||||||
|
Features = features(Type),
|
||||||
|
RetrieveFeature = lists:member("retrieve-affiliations", Features),
|
||||||
|
if
|
||||||
|
not RetrieveFeature ->
|
||||||
|
%% Service does not support retreive affiliatons
|
||||||
|
{{error, extended_error(?ERR_FEATURE_NOT_IMPLEMENTED, unsupported, "retrieve-affiliations")}, Acc};
|
||||||
|
true ->
|
||||||
|
{result, Affiliations} = node_action(Host, Type, get_entity_affiliations, [Host, JID]),
|
||||||
|
{Status, [Affiliations|Acc]}
|
||||||
|
end
|
||||||
|
end, {ok, []}, Plugins),
|
||||||
|
case Result of
|
||||||
|
{ok, Affiliations} ->
|
||||||
|
Entities = lists:flatmap(
|
||||||
|
fun({_, none}) -> [];
|
||||||
|
({#pubsub_node{nodeid = {_, Node}}, Affiliation})
|
||||||
|
when NodeId == Node ->
|
||||||
|
[{xmlelement, "affiliation",
|
||||||
|
[{"affiliation", affiliation_to_string(Affiliation)}|nodeAttr(Node)],
|
||||||
|
[]}];
|
||||||
|
(_) ->
|
||||||
|
[]
|
||||||
|
end, lists:usort(lists:flatten(Affiliations))),
|
||||||
|
{result, [{xmlelement, "pubsub", [{"xmlns", ?NS_PUBSUB}],
|
||||||
|
[{xmlelement, "affiliations", [],
|
||||||
|
Entities}]}]};
|
||||||
|
{Error, _} ->
|
||||||
|
Error
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
get_affiliations(Host, Node, JID) ->
|
get_affiliations(Host, Node, JID) ->
|
||||||
Action = fun(#pubsub_node{type = Type, id = NodeId}) ->
|
Action = fun(#pubsub_node{type = Type, id = NodeId}) ->
|
||||||
Features = features(Type),
|
Features = features(Type),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- mod_pubsub.erl 2012-01-03 15:02:46.000000000 +0100
|
--- mod_pubsub.erl 2012-04-26 16:29:53.653392761 +0200
|
||||||
+++ mod_pubsub_odbc.erl 2012-02-08 21:11:14.874000001 +0100
|
+++ mod_pubsub_odbc.erl 2012-04-26 16:29:53.616726238 +0200
|
||||||
@@ -42,7 +42,7 @@
|
@@ -42,7 +42,7 @@
|
||||||
%%% 6.2.3.1, 6.2.3.5, and 6.3. For information on subscription leases see
|
%%% 6.2.3.1, 6.2.3.5, and 6.3. For information on subscription leases see
|
||||||
%%% XEP-0060 section 12.18.
|
%%% XEP-0060 section 12.18.
|
||||||
@ -710,7 +710,7 @@
|
|||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
send_items(Host, Node, NodeId, Type, {U,S,R} = LJID, Number) ->
|
send_items(Host, Node, NodeId, Type, {U,S,R} = LJID, Number) ->
|
||||||
@@ -2546,7 +2331,8 @@
|
@@ -2580,7 +2365,8 @@
|
||||||
error ->
|
error ->
|
||||||
{error, ?ERR_BAD_REQUEST};
|
{error, ?ERR_BAD_REQUEST};
|
||||||
_ ->
|
_ ->
|
||||||
@ -720,7 +720,7 @@
|
|||||||
case lists:member(Owner, Owners) of
|
case lists:member(Owner, Owners) of
|
||||||
true ->
|
true ->
|
||||||
OwnerJID = jlib:make_jid(Owner),
|
OwnerJID = jlib:make_jid(Owner),
|
||||||
@@ -2556,24 +2342,7 @@
|
@@ -2590,24 +2376,7 @@
|
||||||
end,
|
end,
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun({JID, Affiliation}) ->
|
fun({JID, Affiliation}) ->
|
||||||
@ -746,7 +746,7 @@
|
|||||||
end, FilteredEntities),
|
end, FilteredEntities),
|
||||||
{result, []};
|
{result, []};
|
||||||
_ ->
|
_ ->
|
||||||
@@ -2626,9 +2395,9 @@
|
@@ -2660,9 +2429,9 @@
|
||||||
end.
|
end.
|
||||||
|
|
||||||
read_sub(Subscriber, Node, NodeID, SubID, Lang) ->
|
read_sub(Subscriber, Node, NodeID, SubID, Lang) ->
|
||||||
@ -758,7 +758,7 @@
|
|||||||
OptionsEl = {xmlelement, "options", [{"jid", jlib:jid_to_string(Subscriber)},
|
OptionsEl = {xmlelement, "options", [{"jid", jlib:jid_to_string(Subscriber)},
|
||||||
{"subid", SubID}|nodeAttr(Node)],
|
{"subid", SubID}|nodeAttr(Node)],
|
||||||
[XdataEl]},
|
[XdataEl]},
|
||||||
@@ -2660,7 +2429,7 @@
|
@@ -2694,7 +2463,7 @@
|
||||||
end.
|
end.
|
||||||
|
|
||||||
set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
|
set_options_helper(Configuration, JID, NodeID, SubID, Type) ->
|
||||||
@ -767,7 +767,7 @@
|
|||||||
{result, GoodSubOpts} -> GoodSubOpts;
|
{result, GoodSubOpts} -> GoodSubOpts;
|
||||||
_ -> invalid
|
_ -> invalid
|
||||||
end,
|
end,
|
||||||
@@ -2859,8 +2628,8 @@
|
@@ -2893,8 +2662,8 @@
|
||||||
{"subscription", subscription_to_string(Sub)} | nodeAttr(Node)], []}]}]},
|
{"subscription", subscription_to_string(Sub)} | nodeAttr(Node)], []}]}]},
|
||||||
ejabberd_router:route(service_jid(Host), jlib:make_jid(JID), Stanza)
|
ejabberd_router:route(service_jid(Host), jlib:make_jid(JID), Stanza)
|
||||||
end,
|
end,
|
||||||
@ -778,7 +778,7 @@
|
|||||||
true ->
|
true ->
|
||||||
Result = lists:foldl(fun({JID, Subscription, SubId}, Acc) ->
|
Result = lists:foldl(fun({JID, Subscription, SubId}, Acc) ->
|
||||||
|
|
||||||
@@ -3223,7 +2992,7 @@
|
@@ -3257,7 +3026,7 @@
|
||||||
Collection = tree_call(Host, get_parentnodes_tree, [Host, Node, service_jid(Host)]),
|
Collection = tree_call(Host, get_parentnodes_tree, [Host, Node, service_jid(Host)]),
|
||||||
{result, [{Depth, [{N, sub_with_options(N)} || N <- Nodes]} || {Depth, Nodes} <- Collection]}
|
{result, [{Depth, [{N, sub_with_options(N)} || N <- Nodes]} || {Depth, Nodes} <- Collection]}
|
||||||
end,
|
end,
|
||||||
@ -787,7 +787,7 @@
|
|||||||
{result, CollSubs} -> subscribed_nodes_by_jid(NotifyType, CollSubs);
|
{result, CollSubs} -> subscribed_nodes_by_jid(NotifyType, CollSubs);
|
||||||
_ -> []
|
_ -> []
|
||||||
end.
|
end.
|
||||||
@@ -3292,8 +3061,8 @@
|
@@ -3326,8 +3095,8 @@
|
||||||
[]
|
[]
|
||||||
end.
|
end.
|
||||||
sub_with_options(JID, NodeId, SubId) ->
|
sub_with_options(JID, NodeId, SubId) ->
|
||||||
@ -798,7 +798,7 @@
|
|||||||
_ -> {JID, SubId, []}
|
_ -> {JID, SubId, []}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
@@ -3369,6 +3138,30 @@
|
@@ -3403,6 +3172,30 @@
|
||||||
Result
|
Result
|
||||||
end.
|
end.
|
||||||
|
|
||||||
@ -829,7 +829,7 @@
|
|||||||
%% @spec (Host, Options) -> MaxItems
|
%% @spec (Host, Options) -> MaxItems
|
||||||
%% Host = host()
|
%% Host = host()
|
||||||
%% Options = [Option]
|
%% Options = [Option]
|
||||||
@@ -3765,7 +3558,13 @@
|
@@ -3799,7 +3592,13 @@
|
||||||
tree_action(Host, Function, Args) ->
|
tree_action(Host, Function, Args) ->
|
||||||
?DEBUG("tree_action ~p ~p ~p",[Host,Function,Args]),
|
?DEBUG("tree_action ~p ~p ~p",[Host,Function,Args]),
|
||||||
Fun = fun() -> tree_call(Host, Function, Args) end,
|
Fun = fun() -> tree_call(Host, Function, Args) end,
|
||||||
@ -844,7 +844,7 @@
|
|||||||
|
|
||||||
%% @doc <p>node plugin call.</p>
|
%% @doc <p>node plugin call.</p>
|
||||||
node_call(Type, Function, Args) ->
|
node_call(Type, Function, Args) ->
|
||||||
@@ -3785,13 +3584,13 @@
|
@@ -3819,13 +3618,13 @@
|
||||||
|
|
||||||
node_action(Host, Type, Function, Args) ->
|
node_action(Host, Type, Function, Args) ->
|
||||||
?DEBUG("node_action ~p ~p ~p ~p",[Host,Type,Function,Args]),
|
?DEBUG("node_action ~p ~p ~p ~p",[Host,Type,Function,Args]),
|
||||||
@ -860,7 +860,7 @@
|
|||||||
case tree_call(Host, get_node, [Host, Node]) of
|
case tree_call(Host, get_node, [Host, Node]) of
|
||||||
N when is_record(N, pubsub_node) ->
|
N when is_record(N, pubsub_node) ->
|
||||||
case Action(N) of
|
case Action(N) of
|
||||||
@@ -3803,13 +3602,19 @@
|
@@ -3837,13 +3636,19 @@
|
||||||
Error
|
Error
|
||||||
end
|
end
|
||||||
end, Trans).
|
end, Trans).
|
||||||
@ -884,7 +884,7 @@
|
|||||||
{result, Result} -> {result, Result};
|
{result, Result} -> {result, Result};
|
||||||
{error, Error} -> {error, Error};
|
{error, Error} -> {error, Error};
|
||||||
{atomic, {result, Result}} -> {result, Result};
|
{atomic, {result, Result}} -> {result, Result};
|
||||||
@@ -3817,6 +3622,15 @@
|
@@ -3851,6 +3656,15 @@
|
||||||
{aborted, Reason} ->
|
{aborted, Reason} ->
|
||||||
?ERROR_MSG("transaction return internal error: ~p~n", [{aborted, Reason}]),
|
?ERROR_MSG("transaction return internal error: ~p~n", [{aborted, Reason}]),
|
||||||
{error, ?ERR_INTERNAL_SERVER_ERROR};
|
{error, ?ERR_INTERNAL_SERVER_ERROR};
|
||||||
@ -900,7 +900,7 @@
|
|||||||
{'EXIT', Reason} ->
|
{'EXIT', Reason} ->
|
||||||
?ERROR_MSG("transaction return internal error: ~p~n", [{'EXIT', Reason}]),
|
?ERROR_MSG("transaction return internal error: ~p~n", [{'EXIT', Reason}]),
|
||||||
{error, ?ERR_INTERNAL_SERVER_ERROR};
|
{error, ?ERR_INTERNAL_SERVER_ERROR};
|
||||||
@@ -3825,6 +3639,17 @@
|
@@ -3859,6 +3673,17 @@
|
||||||
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
{error, ?ERR_INTERNAL_SERVER_ERROR}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ get_vcard_module(Server) ->
|
|||||||
get_rosteritem_name([], _, _) ->
|
get_rosteritem_name([], _, _) ->
|
||||||
"";
|
"";
|
||||||
get_rosteritem_name([ModVcard], U, S) ->
|
get_rosteritem_name([ModVcard], U, S) ->
|
||||||
From = jlib:make_jid("", S, mod_shared_roster),
|
From = jlib:make_jid("", S, ?MODULE),
|
||||||
To = jlib:make_jid(U, S, ""),
|
To = jlib:make_jid(U, S, ""),
|
||||||
IQ = {iq,"",get,"vcard-temp","",
|
IQ = {iq,"",get,"vcard-temp","",
|
||||||
{xmlelement,"vCard",[{"xmlns","vcard-temp"}],[]}},
|
{xmlelement,"vCard",[{"xmlns","vcard-temp"}],[]}},
|
||||||
@ -619,14 +619,14 @@ add_user_to_group(Host, US, Group) ->
|
|||||||
{LUser, LServer} = US,
|
{LUser, LServer} = US,
|
||||||
case ejabberd_regexp:run(LUser, "^@.+@$") of
|
case ejabberd_regexp:run(LUser, "^@.+@$") of
|
||||||
match ->
|
match ->
|
||||||
GroupOpts = mod_shared_roster:get_group_opts(Host, Group),
|
GroupOpts = ?MODULE:get_group_opts(Host, Group),
|
||||||
MoreGroupOpts =
|
MoreGroupOpts =
|
||||||
case LUser of
|
case LUser of
|
||||||
"@all@" -> [{all_users, true}];
|
"@all@" -> [{all_users, true}];
|
||||||
"@online@" -> [{online_users, true}];
|
"@online@" -> [{online_users, true}];
|
||||||
_ -> []
|
_ -> []
|
||||||
end,
|
end,
|
||||||
mod_shared_roster:set_group_opts(
|
?MODULE:set_group_opts(
|
||||||
Host, Group,
|
Host, Group,
|
||||||
GroupOpts ++ MoreGroupOpts);
|
GroupOpts ++ MoreGroupOpts);
|
||||||
nomatch ->
|
nomatch ->
|
||||||
@ -652,7 +652,7 @@ remove_user_from_group(Host, US, Group) ->
|
|||||||
{LUser, LServer} = US,
|
{LUser, LServer} = US,
|
||||||
case ejabberd_regexp:run(LUser, "^@.+@$") of
|
case ejabberd_regexp:run(LUser, "^@.+@$") of
|
||||||
match ->
|
match ->
|
||||||
GroupOpts = mod_shared_roster:get_group_opts(Host, Group),
|
GroupOpts = ?MODULE:get_group_opts(Host, Group),
|
||||||
NewGroupOpts =
|
NewGroupOpts =
|
||||||
case LUser of
|
case LUser of
|
||||||
"@all@" ->
|
"@all@" ->
|
||||||
@ -660,7 +660,7 @@ remove_user_from_group(Host, US, Group) ->
|
|||||||
"@online@" ->
|
"@online@" ->
|
||||||
lists:filter(fun(X) -> X/={online_users,true} end, GroupOpts)
|
lists:filter(fun(X) -> X/={online_users,true} end, GroupOpts)
|
||||||
end,
|
end,
|
||||||
mod_shared_roster:set_group_opts(Host, Group, NewGroupOpts);
|
?MODULE:set_group_opts(Host, Group, NewGroupOpts);
|
||||||
nomatch ->
|
nomatch ->
|
||||||
R = #sr_user{us = US, group_host = GroupHost},
|
R = #sr_user{us = US, group_host = GroupHost},
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
@ -876,7 +876,7 @@ webadmin_page(Acc, _, _) -> Acc.
|
|||||||
|
|
||||||
list_shared_roster_groups(Host, Query, Lang) ->
|
list_shared_roster_groups(Host, Query, Lang) ->
|
||||||
Res = list_sr_groups_parse_query(Host, Query),
|
Res = list_sr_groups_parse_query(Host, Query),
|
||||||
SRGroups = mod_shared_roster:list_groups(Host),
|
SRGroups = ?MODULE:list_groups(Host),
|
||||||
FGroups =
|
FGroups =
|
||||||
?XAE("table", [],
|
?XAE("table", [],
|
||||||
[?XE("tbody",
|
[?XE("tbody",
|
||||||
@ -925,19 +925,19 @@ list_sr_groups_parse_query(Host, Query) ->
|
|||||||
list_sr_groups_parse_addnew(Host, Query) ->
|
list_sr_groups_parse_addnew(Host, Query) ->
|
||||||
case lists:keysearch("namenew", 1, Query) of
|
case lists:keysearch("namenew", 1, Query) of
|
||||||
{value, {_, Group}} when Group /= "" ->
|
{value, {_, Group}} when Group /= "" ->
|
||||||
mod_shared_roster:create_group(Host, Group),
|
?MODULE:create_group(Host, Group),
|
||||||
ok;
|
ok;
|
||||||
_ ->
|
_ ->
|
||||||
error
|
error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
list_sr_groups_parse_delete(Host, Query) ->
|
list_sr_groups_parse_delete(Host, Query) ->
|
||||||
SRGroups = mod_shared_roster:list_groups(Host),
|
SRGroups = ?MODULE:list_groups(Host),
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(Group) ->
|
fun(Group) ->
|
||||||
case lists:member({"selected", Group}, Query) of
|
case lists:member({"selected", Group}, Query) of
|
||||||
true ->
|
true ->
|
||||||
mod_shared_roster:delete_group(Host, Group);
|
?MODULE:delete_group(Host, Group);
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end
|
end
|
||||||
@ -947,14 +947,14 @@ list_sr_groups_parse_delete(Host, Query) ->
|
|||||||
|
|
||||||
shared_roster_group(Host, Group, Query, Lang) ->
|
shared_roster_group(Host, Group, Query, Lang) ->
|
||||||
Res = shared_roster_group_parse_query(Host, Group, Query),
|
Res = shared_roster_group_parse_query(Host, Group, Query),
|
||||||
GroupOpts = mod_shared_roster:get_group_opts(Host, Group),
|
GroupOpts = ?MODULE:get_group_opts(Host, Group),
|
||||||
Name = get_opt(GroupOpts, name, ""),
|
Name = get_opt(GroupOpts, name, ""),
|
||||||
Description = get_opt(GroupOpts, description, ""),
|
Description = get_opt(GroupOpts, description, ""),
|
||||||
AllUsers = get_opt(GroupOpts, all_users, false),
|
AllUsers = get_opt(GroupOpts, all_users, false),
|
||||||
OnlineUsers = get_opt(GroupOpts, online_users, false),
|
OnlineUsers = get_opt(GroupOpts, online_users, false),
|
||||||
%%Disabled = false,
|
%%Disabled = false,
|
||||||
DisplayedGroups = get_opt(GroupOpts, displayed_groups, []),
|
DisplayedGroups = get_opt(GroupOpts, displayed_groups, []),
|
||||||
Members = mod_shared_roster:get_group_explicit_users(Host, Group),
|
Members = ?MODULE:get_group_explicit_users(Host, Group),
|
||||||
FMembers =
|
FMembers =
|
||||||
if
|
if
|
||||||
AllUsers ->
|
AllUsers ->
|
||||||
@ -1042,7 +1042,7 @@ shared_roster_group_parse_query(Host, Group, Query) ->
|
|||||||
true -> [{displayed_groups, DispGroups}]
|
true -> [{displayed_groups, DispGroups}]
|
||||||
end,
|
end,
|
||||||
|
|
||||||
OldMembers = mod_shared_roster:get_group_explicit_users(
|
OldMembers = ?MODULE:get_group_explicit_users(
|
||||||
Host, Group),
|
Host, Group),
|
||||||
SJIDs = string:tokens(SMembers, ", \r\n"),
|
SJIDs = string:tokens(SMembers, ", \r\n"),
|
||||||
NewMembers =
|
NewMembers =
|
||||||
@ -1074,7 +1074,7 @@ shared_roster_group_parse_query(Host, Group, Query) ->
|
|||||||
false -> []
|
false -> []
|
||||||
end,
|
end,
|
||||||
|
|
||||||
mod_shared_roster:set_group_opts(
|
?MODULE:set_group_opts(
|
||||||
Host, Group,
|
Host, Group,
|
||||||
NameOpt ++ DispGroupsOpt ++ DescriptionOpt ++ AllUsersOpt ++ OnlineUsersOpt),
|
NameOpt ++ DispGroupsOpt ++ DescriptionOpt ++ AllUsersOpt ++ OnlineUsersOpt),
|
||||||
|
|
||||||
@ -1085,12 +1085,12 @@ shared_roster_group_parse_query(Host, Group, Query) ->
|
|||||||
RemovedMembers = OldMembers -- NewMembers,
|
RemovedMembers = OldMembers -- NewMembers,
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(US) ->
|
fun(US) ->
|
||||||
mod_shared_roster:remove_user_from_group(
|
?MODULE:remove_user_from_group(
|
||||||
Host, US, Group)
|
Host, US, Group)
|
||||||
end, RemovedMembers),
|
end, RemovedMembers),
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(US) ->
|
fun(US) ->
|
||||||
mod_shared_roster:add_user_to_group(
|
?MODULE:add_user_to_group(
|
||||||
Host, US, Group)
|
Host, US, Group)
|
||||||
end, AddedMembers),
|
end, AddedMembers),
|
||||||
ok
|
ok
|
||||||
|
@ -329,10 +329,13 @@ eldap_search(State, FilterParseArgs, AttributesList) ->
|
|||||||
[]
|
[]
|
||||||
end.
|
end.
|
||||||
|
|
||||||
get_user_displayed_groups({_User, Host}) ->
|
get_user_displayed_groups({User, Host}) ->
|
||||||
{ok, State} = eldap_utils:get_state(Host, ?MODULE),
|
{ok, State} = eldap_utils:get_state(Host, ?MODULE),
|
||||||
GroupAttr = State#state.group_attr,
|
GroupAttr = State#state.group_attr,
|
||||||
Entries = eldap_search(State, [State#state.rfilter], [GroupAttr]),
|
Entries = eldap_search(
|
||||||
|
State,
|
||||||
|
[eldap_filter:do_sub(State#state.rfilter, [{"%u", User}])],
|
||||||
|
[GroupAttr]),
|
||||||
Reply = lists:flatmap(
|
Reply = lists:flatmap(
|
||||||
fun(#eldap_entry{attributes = Attrs}) ->
|
fun(#eldap_entry{attributes = Attrs}) ->
|
||||||
case Attrs of
|
case Attrs of
|
||||||
|
1165
src/mod_shared_roster_odbc.erl
Normal file
1165
src/mod_shared_roster_odbc.erl
Normal file
File diff suppressed because it is too large
Load Diff
@ -352,6 +352,7 @@ ldap_attribute_to_vcard(vCard, {"email", Value}) ->
|
|||||||
|
|
||||||
ldap_attribute_to_vcard(vCard, {"photo", Value}) ->
|
ldap_attribute_to_vcard(vCard, {"photo", Value}) ->
|
||||||
{xmlelement,"PHOTO",[],[
|
{xmlelement,"PHOTO",[],[
|
||||||
|
{xmlelement,"TYPE",[],[{xmlcdata,"image/jpeg"}]},
|
||||||
{xmlelement,"BINVAL",[],[{xmlcdata, jlib:encode_base64(Value)}]}]};
|
{xmlelement,"BINVAL",[],[{xmlcdata, jlib:encode_base64(Value)}]}]};
|
||||||
|
|
||||||
ldap_attribute_to_vcard(vCardN, {"family", Value}) ->
|
ldap_attribute_to_vcard(vCardN, {"family", Value}) ->
|
||||||
|
128
src/mod_vcard_xupdate_odbc.erl
Normal file
128
src/mod_vcard_xupdate_odbc.erl
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
%%% File : mod_vcard_xupdate_odbc.erl
|
||||||
|
%%% Author : Igor Goryachev <igor@goryachev.org>
|
||||||
|
%%% Purpose : Add avatar hash in presence on behalf of client (XEP-0153)
|
||||||
|
%%% Created : 9 Mar 2007 by Igor Goryachev <igor@goryachev.org>
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
-module(mod_vcard_xupdate_odbc).
|
||||||
|
|
||||||
|
-behaviour(gen_mod).
|
||||||
|
|
||||||
|
%% gen_mod callbacks
|
||||||
|
-export([start/2,
|
||||||
|
stop/1]).
|
||||||
|
|
||||||
|
%% hooks
|
||||||
|
-export([update_presence/3,
|
||||||
|
vcard_set/3]).
|
||||||
|
|
||||||
|
-include("ejabberd.hrl").
|
||||||
|
-include("jlib.hrl").
|
||||||
|
|
||||||
|
%%====================================================================
|
||||||
|
%% gen_mod callbacks
|
||||||
|
%%====================================================================
|
||||||
|
|
||||||
|
start(Host, _Opts) ->
|
||||||
|
ejabberd_hooks:add(c2s_update_presence, Host,
|
||||||
|
?MODULE, update_presence, 100),
|
||||||
|
ejabberd_hooks:add(vcard_set, Host,
|
||||||
|
?MODULE, vcard_set, 100),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
stop(Host) ->
|
||||||
|
ejabberd_hooks:delete(c2s_update_presence, Host,
|
||||||
|
?MODULE, update_presence, 100),
|
||||||
|
ejabberd_hooks:delete(vcard_set, Host,
|
||||||
|
?MODULE, vcard_set, 100),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
%%====================================================================
|
||||||
|
%% Hooks
|
||||||
|
%%====================================================================
|
||||||
|
|
||||||
|
update_presence({xmlelement, "presence", Attrs, _Els} = Packet, User, Host) ->
|
||||||
|
case xml:get_attr_s("type", Attrs) of
|
||||||
|
[] ->
|
||||||
|
presence_with_xupdate(Packet, User, Host);
|
||||||
|
_ ->
|
||||||
|
Packet
|
||||||
|
end;
|
||||||
|
update_presence(Packet, _User, _Host) ->
|
||||||
|
Packet.
|
||||||
|
|
||||||
|
vcard_set(LUser, LServer, VCARD) ->
|
||||||
|
US = {LUser, LServer},
|
||||||
|
case xml:get_path_s(VCARD, [{elem, "PHOTO"}, {elem, "BINVAL"}, cdata]) of
|
||||||
|
[] ->
|
||||||
|
remove_xupdate(LUser, LServer);
|
||||||
|
BinVal ->
|
||||||
|
add_xupdate(LUser, LServer, sha:sha(jlib:decode_base64(BinVal)))
|
||||||
|
end,
|
||||||
|
ejabberd_sm:force_update_presence(US).
|
||||||
|
|
||||||
|
%%====================================================================
|
||||||
|
%% ODBC storage
|
||||||
|
%%====================================================================
|
||||||
|
|
||||||
|
add_xupdate(LUser, LServer, Hash) ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
SHash = ejabberd_odbc:escape(Hash),
|
||||||
|
F = fun() ->
|
||||||
|
odbc_queries:update_t(
|
||||||
|
"vcard_xupdate",
|
||||||
|
["username", "hash"],
|
||||||
|
[Username, SHash],
|
||||||
|
["username='", Username, "'"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
get_xupdate(LUser, LServer) ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
case ejabberd_odbc:sql_query(
|
||||||
|
LServer, ["select hash from vcard_xupdate "
|
||||||
|
"where username='", Username, "';"]) of
|
||||||
|
{selected, ["hash"], [{Hash}]} ->
|
||||||
|
Hash;
|
||||||
|
_ ->
|
||||||
|
undefined
|
||||||
|
end.
|
||||||
|
|
||||||
|
remove_xupdate(LUser, LServer) ->
|
||||||
|
Username = ejabberd_odbc:escape(LUser),
|
||||||
|
F = fun() ->
|
||||||
|
ejabberd_odbc:sql_query_t(
|
||||||
|
["delete from vcard_xupdate where "
|
||||||
|
"username='", Username, "';"])
|
||||||
|
end,
|
||||||
|
ejabberd_odbc:sql_transaction(LServer, F).
|
||||||
|
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
%%% Presence stanza rebuilding
|
||||||
|
%%%----------------------------------------------------------------------
|
||||||
|
|
||||||
|
presence_with_xupdate({xmlelement, "presence", Attrs, Els}, User, Host) ->
|
||||||
|
XPhotoEl = build_xphotoel(User, Host),
|
||||||
|
Els2 = presence_with_xupdate2(Els, [], XPhotoEl),
|
||||||
|
{xmlelement, "presence", Attrs, Els2}.
|
||||||
|
|
||||||
|
presence_with_xupdate2([], Els2, XPhotoEl) ->
|
||||||
|
lists:reverse([XPhotoEl | Els2]);
|
||||||
|
%% This clause assumes that the x element contains only the XMLNS attribute:
|
||||||
|
presence_with_xupdate2([{xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], _}
|
||||||
|
| Els], Els2, XPhotoEl) ->
|
||||||
|
presence_with_xupdate2(Els, Els2, XPhotoEl);
|
||||||
|
presence_with_xupdate2([El | Els], Els2, XPhotoEl) ->
|
||||||
|
presence_with_xupdate2(Els, [El | Els2], XPhotoEl).
|
||||||
|
|
||||||
|
build_xphotoel(User, Host) ->
|
||||||
|
Hash = get_xupdate(User, Host),
|
||||||
|
PhotoSubEls = case Hash of
|
||||||
|
Hash when is_list(Hash) ->
|
||||||
|
[{xmlcdata, Hash}];
|
||||||
|
_ ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
PhotoEl = [{xmlelement, "photo", [], PhotoSubEls}],
|
||||||
|
{xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], PhotoEl}.
|
@ -20,11 +20,13 @@
|
|||||||
{"Allow users to send invites","Permetre que els usuaris envien invitacions"}.
|
{"Allow users to send invites","Permetre que els usuaris envien invitacions"}.
|
||||||
{"Allow users to send private messages","Permetre que els usuaris envien missatges privats"}.
|
{"Allow users to send private messages","Permetre que els usuaris envien missatges privats"}.
|
||||||
{"Allow visitors to change nickname","Permetre als visitants canviar el Nickname"}.
|
{"Allow visitors to change nickname","Permetre als visitants canviar el Nickname"}.
|
||||||
|
{"Allow visitors to send private messages to","Permetre als visitants enviar missatges privats a"}.
|
||||||
{"Allow visitors to send status text in presence updates","Permetre als visitants enviar text d'estat en les actualitzacions de presència"}.
|
{"Allow visitors to send status text in presence updates","Permetre als visitants enviar text d'estat en les actualitzacions de presència"}.
|
||||||
|
{"Allow visitors to send voice requests","Permetre als visitants enviar peticions de veu"}.
|
||||||
{"All Users","Tots els usuaris"}.
|
{"All Users","Tots els usuaris"}.
|
||||||
{"Announcements","Anuncis"}.
|
{"Announcements","Anuncis"}.
|
||||||
{"anyone","qualsevol"}.
|
{"anyone","qualsevol"}.
|
||||||
{"A password is required to enter this room","Es necessita password per a entrar en aquesta sala"}.
|
{"A password is required to enter this room","Es necessita contrasenya per a entrar en aquesta sala"}.
|
||||||
{"April","Abril"}.
|
{"April","Abril"}.
|
||||||
{"August","Agost"}.
|
{"August","Agost"}.
|
||||||
{"Backup","Guardar còpia de seguretat"}.
|
{"Backup","Guardar còpia de seguretat"}.
|
||||||
@ -33,15 +35,17 @@
|
|||||||
{"Backup to File at ","Desar còpia de seguretat a fitxer en "}.
|
{"Backup to File at ","Desar còpia de seguretat a fitxer en "}.
|
||||||
{"Bad format","Format erroni"}.
|
{"Bad format","Format erroni"}.
|
||||||
{"Birthday","Aniversari"}.
|
{"Birthday","Aniversari"}.
|
||||||
{"Change Password","Canviar password"}.
|
{"CAPTCHA web page","Pàgina web del CAPTCHA"}.
|
||||||
{"Change User Password","Canviar Password d'Usuari"}.
|
{"Change Password","Canviar Contrasenya"}.
|
||||||
|
{"Change User Password","Canviar Contrasenya d'Usuari"}.
|
||||||
|
{"Characters not allowed:","Caràcters no permesos:"}.
|
||||||
{"Chatroom configuration modified","Configuració de la sala de xat modificada"}.
|
{"Chatroom configuration modified","Configuració de la sala de xat modificada"}.
|
||||||
{"Chatroom is created","La sala s'ha creat"}.
|
{"Chatroom is created","La sala s'ha creat"}.
|
||||||
{"Chatroom is destroyed","La sala s'ha destruït"}.
|
{"Chatroom is destroyed","La sala s'ha destruït"}.
|
||||||
{"Chatroom is started","La sala s'ha iniciat"}.
|
{"Chatroom is started","La sala s'ha iniciat"}.
|
||||||
{"Chatroom is stopped","La sala s'ha aturat"}.
|
{"Chatroom is stopped","La sala s'ha aturat"}.
|
||||||
{"Chatrooms","Sales de xat"}.
|
{"Chatrooms","Sales de xat"}.
|
||||||
{"Choose a username and password to register with this server","Tria nom d'usuari i password per a registrar-te en aquest servidor"}.
|
{"Choose a username and password to register with this server","Tria nom d'usuari i contrasenya per a registrar-te en aquest servidor"}.
|
||||||
{"Choose modules to stop","Selecciona mòduls a detindre"}.
|
{"Choose modules to stop","Selecciona mòduls a detindre"}.
|
||||||
{"Choose storage type of tables","Selecciona el tipus d'almacenament de les taules"}.
|
{"Choose storage type of tables","Selecciona el tipus d'almacenament de les taules"}.
|
||||||
{"Choose whether to approve this entity's subscription.","Tria si aprova aquesta entitat de subscripció"}.
|
{"Choose whether to approve this entity's subscription.","Tria si aprova aquesta entitat de subscripció"}.
|
||||||
@ -69,12 +73,14 @@
|
|||||||
{"Description:","Descripció:"}.
|
{"Description:","Descripció:"}.
|
||||||
{"Disc only copy","Còpia sols en disc"}.
|
{"Disc only copy","Còpia sols en disc"}.
|
||||||
{"Displayed Groups:","Mostrar grups:"}.
|
{"Displayed Groups:","Mostrar grups:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","No li donis la teva contrasenya a ningú, ni tan sols als administradors del servidor Jabber."}.
|
||||||
{"Dump Backup to Text File at ","Exporta còpia de seguretat a fitxer de text en "}.
|
{"Dump Backup to Text File at ","Exporta còpia de seguretat a fitxer de text en "}.
|
||||||
{"Dump to Text File","Exportar a fitxer de text"}.
|
{"Dump to Text File","Exportar a fitxer de text"}.
|
||||||
{"Edit Properties","Editar propietats"}.
|
{"Edit Properties","Editar propietats"}.
|
||||||
|
{"Either approve or decline the voice request.","Aprova o denega la petició de veu"}.
|
||||||
{"ejabberd IRC module","mòdul ejabberd IRC"}.
|
{"ejabberd IRC module","mòdul ejabberd IRC"}.
|
||||||
{"ejabberd MUC module","mòdul ejabberd MUC"}.
|
{"ejabberd MUC module","mòdul ejabberd MUC"}.
|
||||||
{"ejabberd Publish-Subscribe module","Mòdul ejannerd Publicar-Subscriure"}.
|
{"ejabberd Publish-Subscribe module","Mòdul ejabberd Publicar-Subscriure"}.
|
||||||
{"ejabberd SOCKS5 Bytestreams module","mòdul ejabberd SOCKS5 Bytestreams"}.
|
{"ejabberd SOCKS5 Bytestreams module","mòdul ejabberd SOCKS5 Bytestreams"}.
|
||||||
{"ejabberd vCard module","Mòdul ejabberd vCard"}.
|
{"ejabberd vCard module","Mòdul ejabberd vCard"}.
|
||||||
{"ejabberd Web Admin","Web d'administració del ejabberd"}.
|
{"ejabberd Web Admin","Web d'administració del ejabberd"}.
|
||||||
@ -91,12 +97,14 @@
|
|||||||
{"Enter path to text file","Introdueix ruta al fitxer de text"}.
|
{"Enter path to text file","Introdueix ruta al fitxer de text"}.
|
||||||
{"Enter the text you see","Introdueix el text que veus"}.
|
{"Enter the text you see","Introdueix el text que veus"}.
|
||||||
{"Enter username and encodings you wish to use for connecting to IRC servers. Press 'Next' to get more fields to fill in. Press 'Complete' to save settings.","Introdueix el nom d'usuari i les codificacions de caràcters per a utilitzar als servidors de IRC. Apreta \"Seguent\" per veure més caps per omplir. Apreta \"Completar\" per guardar la configuració. "}.
|
{"Enter username and encodings you wish to use for connecting to IRC servers. Press 'Next' to get more fields to fill in. Press 'Complete' to save settings.","Introdueix el nom d'usuari i les codificacions de caràcters per a utilitzar als servidors de IRC. Apreta \"Seguent\" per veure més caps per omplir. Apreta \"Completar\" per guardar la configuració. "}.
|
||||||
{"Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers","Introdueix el nom d'usuari, les codificacions de caràcters, els ports i contrassenyes per a utilitzar al connectar als servidors de IRC "}.
|
{"Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers","Introdueix el nom d'usuari, les codificacions de caràcters, els ports i contrasenyes per a utilitzar al connectar als servidors de IRC"}.
|
||||||
{"Erlang Jabber Server","Servidor Erlang Jabber"}.
|
{"Erlang Jabber Server","Servidor Erlang Jabber"}.
|
||||||
{"Error","Error"}.
|
{"Error","Error"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Exemple: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Exemple: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Excloure Jabber IDs de la comprovació CAPTCHA"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar dades de tots els usuaris del servidor a arxius PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar dades de tots els usuaris del servidor a arxius PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dades d'usuaris d'un host a arxius PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dades d'usuaris d'un host a arxius PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","No s'ha pogut extraure el JID de la teva aprovació de petició de veu"}.
|
||||||
{"Family Name","Cognom"}.
|
{"Family Name","Cognom"}.
|
||||||
{"February","Febrer"}.
|
{"February","Febrer"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Emplena camps per a buscar usuaris Jabber que concorden"}.
|
{"Fill in fields to search for any matching Jabber User","Emplena camps per a buscar usuaris Jabber que concorden"}.
|
||||||
@ -108,8 +116,9 @@
|
|||||||
{"Get Number of Online Users","Obtenir Número d'Usuaris Connectats"}.
|
{"Get Number of Online Users","Obtenir Número d'Usuaris Connectats"}.
|
||||||
{"Get Number of Registered Users","Obtenir Número d'Usuaris Registrats"}.
|
{"Get Number of Registered Users","Obtenir Número d'Usuaris Registrats"}.
|
||||||
{"Get User Last Login Time","Obtenir la última connexió d'Usuari"}.
|
{"Get User Last Login Time","Obtenir la última connexió d'Usuari"}.
|
||||||
{"Get User Password","Obtenir Password d'usuari"}.
|
{"Get User Password","Obtenir Contrasenya d'usuari"}.
|
||||||
{"Get User Statistics","Obtenir Estadístiques d'Usuari"}.
|
{"Get User Statistics","Obtenir Estadístiques d'Usuari"}.
|
||||||
|
{"Grant voice to this person?","Concedir veu a aquesta persona?"}.
|
||||||
{"Group ","Grup "}.
|
{"Group ","Grup "}.
|
||||||
{"Groups","Grups"}.
|
{"Groups","Grups"}.
|
||||||
{"has been banned","Has sigut banejat"}.
|
{"has been banned","Has sigut banejat"}.
|
||||||
@ -119,7 +128,8 @@
|
|||||||
{"has been kicked","Has sigut expulsat"}.
|
{"has been kicked","Has sigut expulsat"}.
|
||||||
{" has set the subject to: "," ha posat l'assumpte: "}.
|
{" has set the subject to: "," ha posat l'assumpte: "}.
|
||||||
{"Host","Host"}.
|
{"Host","Host"}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Si vols especificar codificacions de caràcters diferents per a cada servidor IRC emplena aquesta llista amb els valors amb el format '{\"servidor irc\", \"codificació\", port, \"contrassenya\"}'. Aquest servei utilitza per defecte la codificació \"~s\", port ~p, no contrassenya."}.
|
{"If you don't see the CAPTCHA image here, visit the web page.","Si no veus la imatge CAPTCHA açí, visita la pàgina web."}.
|
||||||
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Si vols especificar codificacions de caràcters diferents per a cada servidor IRC emplena aquesta llista amb els valors amb el format '{\"servidor irc\", \"codificació\", port, \"contrasenya\"}'. Aquest servei utilitza per defecte la codificació \"~s\", port ~p, no contrasenya."}.
|
||||||
{"Import Directory","Importar directori"}.
|
{"Import Directory","Importar directori"}.
|
||||||
{"Import File","Importar fitxer"}.
|
{"Import File","Importar fitxer"}.
|
||||||
{"Import user data from jabberd14 spool file:","Importar dades d'usuaris de l'arxiu de spool de jabberd14"}.
|
{"Import user data from jabberd14 spool file:","Importar dades d'usuaris de l'arxiu de spool de jabberd14"}.
|
||||||
@ -129,7 +139,7 @@
|
|||||||
{"Import Users from Dir at ","Importar usuaris des del directori en "}.
|
{"Import Users from Dir at ","Importar usuaris des del directori en "}.
|
||||||
{"Import Users From jabberd14 Spool Files","Importar usuaris de jabberd14"}.
|
{"Import Users From jabberd14 Spool Files","Importar usuaris de jabberd14"}.
|
||||||
{"Improper message type","Tipus de missatge incorrecte"}.
|
{"Improper message type","Tipus de missatge incorrecte"}.
|
||||||
{"Incorrect password","Password incorrecte"}.
|
{"Incorrect password","Contrasenya incorrecta"}.
|
||||||
{"Invalid affiliation: ~s","Afiliació invàlida: ~s"}.
|
{"Invalid affiliation: ~s","Afiliació invàlida: ~s"}.
|
||||||
{"Invalid role: ~s","Rol invàlid: ~s"}.
|
{"Invalid role: ~s","Rol invàlid: ~s"}.
|
||||||
{"IP addresses","Adreça IP"}.
|
{"IP addresses","Adreça IP"}.
|
||||||
@ -143,7 +153,8 @@
|
|||||||
{"is now known as","ara es conegut com"}.
|
{"is now known as","ara es conegut com"}.
|
||||||
{"It is not allowed to send private messages","No està permés enviar missatges privats"}.
|
{"It is not allowed to send private messages","No està permés enviar missatges privats"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","No està permés enviar missatges del tipus \"groupchat\""}.
|
{"It is not allowed to send private messages of type \"groupchat\"","No està permés enviar missatges del tipus \"groupchat\""}.
|
||||||
{"It is not allowed to send private messages to the conference","No està permés l'enviament de missatges privats a la sala"}.
|
{"It is not allowed to send private messages to the conference","No està permès l'enviament de missatges privats a la sala"}.
|
||||||
|
{"Jabber Account Registration","Registre de compte Jabber"}.
|
||||||
{"Jabber ID","ID Jabber"}.
|
{"Jabber ID","ID Jabber"}.
|
||||||
{"Jabber ID ~s is invalid","El Jabber ID ~s no és vàlid"}.
|
{"Jabber ID ~s is invalid","El Jabber ID ~s no és vàlid"}.
|
||||||
{"January","Gener"}.
|
{"January","Gener"}.
|
||||||
@ -163,10 +174,10 @@
|
|||||||
{"List of modules to start","Llista de mòduls a iniciar"}.
|
{"List of modules to start","Llista de mòduls a iniciar"}.
|
||||||
{"Low level update script","Script d'actualització de baix nivell"}.
|
{"Low level update script","Script d'actualització de baix nivell"}.
|
||||||
{"Make participants list public","Crear una llista de participants pública"}.
|
{"Make participants list public","Crear una llista de participants pública"}.
|
||||||
{"Make room captcha protected","Crear una sala protegida per captcha"}.
|
{"Make room CAPTCHA protected","Crear una sala protegida per CAPTCHA"}.
|
||||||
{"Make room members-only","Crear una sala de \"només membres\""}.
|
{"Make room members-only","Crear una sala de \"només membres\""}.
|
||||||
{"Make room moderated","Crear una sala moderada"}.
|
{"Make room moderated","Crear una sala moderada"}.
|
||||||
{"Make room password protected","Crear una sala amb password"}.
|
{"Make room password protected","Crear una sala amb contrasenya"}.
|
||||||
{"Make room persistent","Crear una sala persistent"}.
|
{"Make room persistent","Crear una sala persistent"}.
|
||||||
{"Make room public searchable","Crear una sala pública"}.
|
{"Make room public searchable","Crear una sala pública"}.
|
||||||
{"March","Març"}.
|
{"March","Març"}.
|
||||||
@ -176,9 +187,11 @@
|
|||||||
{"May","Maig"}.
|
{"May","Maig"}.
|
||||||
{"Membership is required to enter this room","Necessites ser membre d'aquesta sala per a poder entrar"}.
|
{"Membership is required to enter this room","Necessites ser membre d'aquesta sala per a poder entrar"}.
|
||||||
{"Members:","Membre:"}.
|
{"Members:","Membre:"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Memoritza la teva contrasenya, o escriu-la en un paper guardat a un lloc segur.A Jabber no hi ha una forma automatitzada de recuperar la teva contrasenya si la oblides."}.
|
||||||
{"Memory","Memòria"}.
|
{"Memory","Memòria"}.
|
||||||
{"Message body","Missatge"}.
|
{"Message body","Missatge"}.
|
||||||
{"Middle Name","Segon nom"}.
|
{"Middle Name","Segon nom"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Interval mínim entre peticions de veu (en segons)"}.
|
||||||
{"Moderator privileges required","Es necessita tenir privilegis de moderador"}.
|
{"Moderator privileges required","Es necessita tenir privilegis de moderador"}.
|
||||||
{"moderators only","només moderadors"}.
|
{"moderators only","només moderadors"}.
|
||||||
{"Modified modules","Mòduls modificats"}.
|
{"Modified modules","Mòduls modificats"}.
|
||||||
@ -189,9 +202,11 @@
|
|||||||
{"Name:","Nom:"}.
|
{"Name:","Nom:"}.
|
||||||
{"Name","Nom"}.
|
{"Name","Nom"}.
|
||||||
{"Never","Mai"}.
|
{"Never","Mai"}.
|
||||||
|
{"New Password:","Nova Contrasenya:"}.
|
||||||
{"Nickname","Nickname"}.
|
{"Nickname","Nickname"}.
|
||||||
{"Nickname Registration at ","Registre del Nickname en "}.
|
{"Nickname Registration at ","Registre del Nickname en "}.
|
||||||
{"Nickname ~s does not exist in the room","El Nickname ~s no existeix a la sala"}.
|
{"Nickname ~s does not exist in the room","El Nickname ~s no existeix a la sala"}.
|
||||||
|
{"nobody","ningú"}.
|
||||||
{"No body provided for announce message","No hi ha proveedor per al missatge anunci"}.
|
{"No body provided for announce message","No hi ha proveedor per al missatge anunci"}.
|
||||||
{"No Data","No hi ha dades"}.
|
{"No Data","No hi ha dades"}.
|
||||||
{"Node ID","ID del Node"}.
|
{"Node ID","ID del Node"}.
|
||||||
@ -213,14 +228,16 @@
|
|||||||
{"Offline Messages:","Missatges fora de línia:"}.
|
{"Offline Messages:","Missatges fora de línia:"}.
|
||||||
{"Offline Messages","Missatges offline"}.
|
{"Offline Messages","Missatges offline"}.
|
||||||
{"OK","Acceptar"}.
|
{"OK","Acceptar"}.
|
||||||
|
{"Old Password:","Antiga contrasenya:"}.
|
||||||
{"Online","Connectat"}.
|
{"Online","Connectat"}.
|
||||||
{"Online Users","Usuaris conectats"}.
|
{"Online Users","Usuaris conectats"}.
|
||||||
{"Online Users:","Usuaris en línia:"}.
|
{"Online Users:","Usuaris en línia:"}.
|
||||||
{"Only deliver notifications to available users","Sols enviar notificacions als usuaris disponibles"}.
|
{"Only deliver notifications to available users","Sols enviar notificacions als usuaris disponibles"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Només els moderadors i participants poden canviar l'assumpte d'aquesta sala"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Només els moderadors i participants poden canviar l'assumpte d'aquesta sala"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Només els moderadors poden canviar l'assumpte d'aquesta sala"}.
|
{"Only moderators are allowed to change the subject in this room","Només els moderadors poden canviar l'assumpte d'aquesta sala"}.
|
||||||
|
{"Only moderators can approve voice requests","Només els moderadors poden aprovar les peticions de veu"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Sols els ocupants poden enviar missatges a la sala"}.
|
{"Only occupants are allowed to send messages to the conference","Sols els ocupants poden enviar missatges a la sala"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Sols els ocupants poden enviar solicituts a la sala"}.
|
{"Only occupants are allowed to send queries to the conference","Sols els ocupants poden enviar sol·licituds a la sala"}.
|
||||||
{"Only service administrators are allowed to send service messages","Sols els administradors del servei tenen permís per a enviar missatges de servei"}.
|
{"Only service administrators are allowed to send service messages","Sols els administradors del servei tenen permís per a enviar missatges de servei"}.
|
||||||
{"Options","Opcions"}.
|
{"Options","Opcions"}.
|
||||||
{"Organization Name","Nom de la organizació"}.
|
{"Organization Name","Nom de la organizació"}.
|
||||||
@ -230,10 +247,11 @@
|
|||||||
{"Outgoing s2s Servers:","Servidors d'eixida de s2s"}.
|
{"Outgoing s2s Servers:","Servidors d'eixida de s2s"}.
|
||||||
{"Owner privileges required","Es requerixen privilegis de propietari de la sala"}.
|
{"Owner privileges required","Es requerixen privilegis de propietari de la sala"}.
|
||||||
{"Packet","Paquet"}.
|
{"Packet","Paquet"}.
|
||||||
{"Password ~b","Password ~b"}.
|
{"Password ~b","Contrasenya ~b"}.
|
||||||
{"Password:","Password:"}.
|
{"Password:","Contrasenya:"}.
|
||||||
{"Password","Password"}.
|
{"Password","Contrasenya"}.
|
||||||
{"Password Verification","Verificació del Password"}.
|
{"Password Verification:","Verificació de la Contrasenya:"}.
|
||||||
|
{"Password Verification","Verificació de la Contrasenya"}.
|
||||||
{"Path to Dir","Ruta al directori"}.
|
{"Path to Dir","Ruta al directori"}.
|
||||||
{"Path to File","Ruta al fitxer"}.
|
{"Path to File","Ruta al fitxer"}.
|
||||||
{"Pending","Pendent"}.
|
{"Pending","Pendent"}.
|
||||||
@ -241,6 +259,7 @@
|
|||||||
{"Persist items to storage","Persistir elements al guardar"}.
|
{"Persist items to storage","Persistir elements al guardar"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Recorda que aquestes opcions només fan còpia de seguretat de la base de dades Mnesia. Si estàs utilitzant el mòdul d'ODBC també deus de fer una còpia de seguretat de la base de dades de SQL a part."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Recorda que aquestes opcions només fan còpia de seguretat de la base de dades Mnesia. Si estàs utilitzant el mòdul d'ODBC també deus de fer una còpia de seguretat de la base de dades de SQL a part."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Si us plau, espera una mica abans d'enviar una nova petició de veu"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Port ~b"}.
|
{"Port ~b","Port ~b"}.
|
||||||
{"Port","Port"}.
|
{"Port","Port"}.
|
||||||
@ -250,14 +269,16 @@
|
|||||||
{"Publish-Subscribe","Publicar-subscriure't"}.
|
{"Publish-Subscribe","Publicar-subscriure't"}.
|
||||||
{"PubSub subscriber request","Petició de subscriptor PubSub"}.
|
{"PubSub subscriber request","Petició de subscriptor PubSub"}.
|
||||||
{"Purge all items when the relevant publisher goes offline","Eliminar tots els elements quan el publicant relevant es desconnecti"}.
|
{"Purge all items when the relevant publisher goes offline","Eliminar tots els elements quan el publicant relevant es desconnecti"}.
|
||||||
{"Queries to the conference members are not allowed in this room"," En aquesta sala no es permeten solicituts als membres de la sala"}.
|
{"Queries to the conference members are not allowed in this room"," En aquesta sala no es permeten sol·licituds als membres de la conferència"}.
|
||||||
{"RAM and disc copy","Còpia en RAM i disc"}.
|
{"RAM and disc copy","Còpia en RAM i disc"}.
|
||||||
{"RAM copy","Còpia en RAM"}.
|
{"RAM copy","Còpia en RAM"}.
|
||||||
{"Raw","en format text"}.
|
{"Raw","en format text"}.
|
||||||
{"Really delete message of the day?","Segur que vols eliminar el missatge del dia?"}.
|
{"Really delete message of the day?","Segur que vols eliminar el missatge del dia?"}.
|
||||||
{"Recipient is not in the conference room","El receptor no està en la sala de conferència"}.
|
{"Recipient is not in the conference room","El receptor no està en la sala de conferència"}.
|
||||||
|
{"Register a Jabber account","Registrar un compte Jabber"}.
|
||||||
{"Registered Users:","Usuaris registrats:"}.
|
{"Registered Users:","Usuaris registrats:"}.
|
||||||
{"Registered Users","Usuaris registrats"}.
|
{"Registered Users","Usuaris registrats"}.
|
||||||
|
{"Register","Registrar"}.
|
||||||
{"Registration in mod_irc for ","Registre en mod_irc per a"}.
|
{"Registration in mod_irc for ","Registre en mod_irc per a"}.
|
||||||
{"Remote copy","Còpia remota"}.
|
{"Remote copy","Còpia remota"}.
|
||||||
{"Remove All Offline Messages","Eliminar tots els missatges offline"}.
|
{"Remove All Offline Messages","Eliminar tots els missatges offline"}.
|
||||||
@ -294,6 +315,7 @@
|
|||||||
{"Send announcement to all users on all hosts","Enviar anunci a tots els usuaris de tots els hosts"}.
|
{"Send announcement to all users on all hosts","Enviar anunci a tots els usuaris de tots els hosts"}.
|
||||||
{"September","Setembre"}.
|
{"September","Setembre"}.
|
||||||
{"Server ~b","Servidor ~b"}.
|
{"Server ~b","Servidor ~b"}.
|
||||||
|
{"Server:","Servidor:"}.
|
||||||
{"Set message of the day and send to online users","Configurar el missatge del dia i enviar a tots els usuaris"}.
|
{"Set message of the day and send to online users","Configurar el missatge del dia i enviar a tots els usuaris"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Escriure missatge del dia en tots els hosts i enviar-ho als usuaris connectats"}.
|
{"Set message of the day on all hosts and send to online users","Escriure missatge del dia en tots els hosts i enviar-ho als usuaris connectats"}.
|
||||||
{"Shared Roster Groups","Grups de contactes compartits"}.
|
{"Shared Roster Groups","Grups de contactes compartits"}.
|
||||||
@ -301,6 +323,7 @@
|
|||||||
{"Show Ordinary Table","Mostrar Taula Ordinaria"}.
|
{"Show Ordinary Table","Mostrar Taula Ordinaria"}.
|
||||||
{"Shut Down Service","Apager el Servei"}.
|
{"Shut Down Service","Apager el Servei"}.
|
||||||
{"~s invites you to the room ~s","~s et convida a la sala ~s"}.
|
{"~s invites you to the room ~s","~s et convida a la sala ~s"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Alguns clients Jabber poden emmagatzemar la teva contrasenya al teu ordinador. Fes servir aquesta característica només si saps que el teu ordinador és segur."}.
|
||||||
{"Specify the access model","Especificar el model d'accés"}.
|
{"Specify the access model","Especificar el model d'accés"}.
|
||||||
{"Specify the event message type","Especifica el tipus de missatge d'event"}.
|
{"Specify the event message type","Especifica el tipus de missatge d'event"}.
|
||||||
{"Specify the publisher model","Especificar el model del publicant"}.
|
{"Specify the publisher model","Especificar el model del publicant"}.
|
||||||
@ -325,9 +348,18 @@
|
|||||||
{"Sunday","Diumenge"}.
|
{"Sunday","Diumenge"}.
|
||||||
{"That nickname is already in use by another occupant","El Nickname està siguent utilitzat per una altra persona"}.
|
{"That nickname is already in use by another occupant","El Nickname està siguent utilitzat per una altra persona"}.
|
||||||
{"That nickname is registered by another person","El nickname ja està registrat per una altra persona"}.
|
{"That nickname is registered by another person","El nickname ja està registrat per una altra persona"}.
|
||||||
{"The captcha is valid.","El captcha es vàlid."}.
|
{"The CAPTCHA is valid.","El CAPTCHA es vàlid."}.
|
||||||
|
{"The CAPTCHA verification has failed","La verificació CAPTCHA ha fallat"}.
|
||||||
{"The collections with which a node is affiliated","Les col.leccions amb les que un node està afiliat"}.
|
{"The collections with which a node is affiliated","Les col.leccions amb les que un node està afiliat"}.
|
||||||
{"the password is","el password és"}.
|
{"the password is","la contrasenya és"}.
|
||||||
|
{"The password is too weak","La contrasenya és massa simple"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","La contrasenya del teu compte Jabber s'ha canviat correctament."}.
|
||||||
|
{"There was an error changing the password: ","Hi ha hagut un error canviant la contrasenya: "}.
|
||||||
|
{"There was an error creating the account: ","Hi ha hagut un error creant el compte: "}.
|
||||||
|
{"There was an error deleting the account: ","Hi ha hagut un error esborrant el compte: "}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Això no distingeix majúscules de minúscules: macbeth es el mateix que MacBeth i Macbeth."}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Aquesta pàgina permet crear un compte Jabber en aquest servidor Jabber. El teu JID (Jabber IDentifier; Identificador Jabber) tindrà aquesta forma: usuari@servidor. Si us plau, llegeix amb cura les instruccions per emplenar correctament els camps."}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Aquesta pàgina permet anul·lar el registre d'un compte Jabber en aquest servidor Jabber."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge d'error"}.
|
{"This participant is kicked from the room because he sent an error message","Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge d'error"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge erroni a un altre participant"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge erroni a un altre participant"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Aquest participant ha sigut expulsat de la sala perque ha enviat un error de presencia"}.
|
{"This participant is kicked from the room because he sent an error presence","Aquest participant ha sigut expulsat de la sala perque ha enviat un error de presencia"}.
|
||||||
@ -335,6 +367,7 @@
|
|||||||
{"Thursday","Dijous"}.
|
{"Thursday","Dijous"}.
|
||||||
{"Time","Data"}.
|
{"Time","Data"}.
|
||||||
{"Time delay","Temps de retard"}.
|
{"Time delay","Temps de retard"}.
|
||||||
|
{"Too many CAPTCHA requests","Massa peticions de CAPTCHA"}.
|
||||||
{"To","Per a"}.
|
{"To","Per a"}.
|
||||||
{"To ~s","A ~s"}.
|
{"To ~s","A ~s"}.
|
||||||
{"Traffic rate limit is exceeded","El llímit de tràfic ha sigut sobrepassat"}.
|
{"Traffic rate limit is exceeded","El llímit de tràfic ha sigut sobrepassat"}.
|
||||||
@ -343,8 +376,10 @@
|
|||||||
{"Transactions Logged:","Transaccions registrades"}.
|
{"Transactions Logged:","Transaccions registrades"}.
|
||||||
{"Transactions Restarted:","Transaccions reiniciades"}.
|
{"Transactions Restarted:","Transaccions reiniciades"}.
|
||||||
{"Tuesday","Dimarts"}.
|
{"Tuesday","Dimarts"}.
|
||||||
{"Unable to generate a captcha","No s'ha pogut generar un captcha"}.
|
{"Unable to generate a CAPTCHA","No s'ha pogut generar un CAPTCHA"}.
|
||||||
{"Unauthorized","No autoritzat"}.
|
{"Unauthorized","No autoritzat"}.
|
||||||
|
{"Unregister a Jabber account","Anul·lar el registre d'un compte Jabber"}.
|
||||||
|
{"Unregister","Anul·lar el registre"}.
|
||||||
{"Update ","Actualitzar"}.
|
{"Update ","Actualitzar"}.
|
||||||
{"Update","Actualitzar"}.
|
{"Update","Actualitzar"}.
|
||||||
{"Update message of the day (don't send)","Actualitzar el missatge del dia (no enviar)"}.
|
{"Update message of the day (don't send)","Actualitzar el missatge del dia (no enviar)"}.
|
||||||
@ -353,7 +388,9 @@
|
|||||||
{"Update script","Script d'actualització"}.
|
{"Update script","Script d'actualització"}.
|
||||||
{"Uptime:","Temps en marxa"}.
|
{"Uptime:","Temps en marxa"}.
|
||||||
{"Use of STARTTLS required","És obligatori utilitzar STARTTLS"}.
|
{"Use of STARTTLS required","És obligatori utilitzar STARTTLS"}.
|
||||||
|
{"User JID","JID del usuari "}.
|
||||||
{"User Management","Gestió d'Usuaris"}.
|
{"User Management","Gestió d'Usuaris"}.
|
||||||
|
{"Username:","Nom d'usuari:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Els usuaris no tenen permís per a crear comptes tan depresa"}.
|
{"Users are not allowed to register accounts so quickly","Els usuaris no tenen permís per a crear comptes tan depresa"}.
|
||||||
{"Users Last Activity","Última activitat d'usuari"}.
|
{"Users Last Activity","Última activitat d'usuari"}.
|
||||||
{"Users","Usuaris"}.
|
{"Users","Usuaris"}.
|
||||||
@ -364,13 +401,21 @@
|
|||||||
{"Virtual Hosts","Hosts virtuals"}.
|
{"Virtual Hosts","Hosts virtuals"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Els visitants no tenen permés canviar el seus Nicknames en esta sala"}.
|
{"Visitors are not allowed to change their nicknames in this room","Els visitants no tenen permés canviar el seus Nicknames en esta sala"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Els visitants no poden enviar missatges a tots els ocupants"}.
|
{"Visitors are not allowed to send messages to all occupants","Els visitants no poden enviar missatges a tots els ocupants"}.
|
||||||
|
{"Voice request","Petició de veu"}.
|
||||||
|
{"Voice requests are disabled in this conference","Les peticions de veu es troben desactivades en aquesta conferència"}.
|
||||||
{"Wednesday","Dimecres"}.
|
{"Wednesday","Dimecres"}.
|
||||||
{"When to send the last published item","Quan s'ha enviat l'última publicació"}.
|
{"When to send the last published item","Quan s'ha enviat l'última publicació"}.
|
||||||
{"Whether to allow subscriptions","Permetre subscripcions"}.
|
{"Whether to allow subscriptions","Permetre subscripcions"}.
|
||||||
|
{"You can later change your password using a Jabber client.","Podràs canviar la teva contrasenya més endavant utilitzant un client Jabber."}.
|
||||||
{"You have been banned from this room","Has sigut bloquejat en aquesta sala"}.
|
{"You have been banned from this room","Has sigut bloquejat en aquesta sala"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Deus d'omplir el camp \"Nickname\" al formulari"}.
|
{"You must fill in field \"Nickname\" in the form","Deus d'omplir el camp \"Nickname\" al formulari"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","Necessites un client amb suport x:data i de CAPTCHA para poder registrar-te"}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","Necessites un client amb suport x:data per a poder registrar el Nickname"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","Necessites un client amb suport x:data per a configurar les opcions de mod_irc"}.
|
{"You need an x:data capable client to configure mod_irc settings","Necessites un client amb suport x:data per a configurar les opcions de mod_irc"}.
|
||||||
{"You need an x:data capable client to configure room","Necessites un client amb suport x:data per a configurar la sala"}.
|
{"You need an x:data capable client to configure room","Necessites un client amb suport x:data per a configurar la sala"}.
|
||||||
{"You need an x:data capable client to search","Necesites un client amb suport x:data per a poder buscar"}.
|
{"You need an x:data capable client to search","Necessites un client amb suport x:data per a poder buscar"}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","La teva llista de privacitat activa ha denegat l'encaminament d'aquesta stanza."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","La cua de missatges offline és plena. El missatge ha sigut descartat"}.
|
{"Your contact offline message queue is full. The message has been discarded.","La cua de missatges offline és plena. El missatge ha sigut descartat"}.
|
||||||
|
{"Your Jabber account was successfully created.","El teu compte Jabber ha sigut creat correctament."}.
|
||||||
|
{"Your Jabber account was successfully deleted.","El teu compte Jabber ha sigut esborrat correctament."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Els teus missatges per ~s s'estan bloquejant. Per desbloquejar-los, visita ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Els teus missatges per ~s s'estan bloquejant. Per desbloquejar-los, visita ~s"}.
|
||||||
|
810
src/msgs/ca.po
810
src/msgs/ca.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Povolit uživatelům posílání pozvánek"}.
|
{"Allow users to send invites","Povolit uživatelům posílání pozvánek"}.
|
||||||
{"Allow users to send private messages","Povolit uživatelům odesílat soukromé zprávy"}.
|
{"Allow users to send private messages","Povolit uživatelům odesílat soukromé zprávy"}.
|
||||||
{"Allow visitors to change nickname","Povolit návštěvníkům měnit přezdívku"}.
|
{"Allow visitors to change nickname","Povolit návštěvníkům měnit přezdívku"}.
|
||||||
|
{"Allow visitors to send private messages to","Povolit návštěvníkům odesílat soukromé zprávy"}.
|
||||||
{"Allow visitors to send status text in presence updates","Povolit návštěvníkům posílat stavové zprávy ve statusu"}.
|
{"Allow visitors to send status text in presence updates","Povolit návštěvníkům posílat stavové zprávy ve statusu"}.
|
||||||
|
{"Allow visitors to send voice requests","Povolit uživatelům posílat žádosti o voice práva"}.
|
||||||
{"All Users","Všichni uživatelé"}.
|
{"All Users","Všichni uživatelé"}.
|
||||||
{"Announcements","Oznámení"}.
|
{"Announcements","Oznámení"}.
|
||||||
{"anyone","každému"}.
|
{"anyone","každému"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Uložit zálohu do textového souboru na "}.
|
{"Dump Backup to Text File at ","Uložit zálohu do textového souboru na "}.
|
||||||
{"Dump to Text File","Uložit do textového souboru"}.
|
{"Dump to Text File","Uložit do textového souboru"}.
|
||||||
{"Edit Properties","Upravit vlastnosti"}.
|
{"Edit Properties","Upravit vlastnosti"}.
|
||||||
|
{"Either approve or decline the voice request.","Povolit nebo odmítnout voice žádost."}.
|
||||||
{"ejabberd IRC module","ejabberd IRC modul"}.
|
{"ejabberd IRC module","ejabberd IRC modul"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC modul"}.
|
{"ejabberd MUC module","ejabberd MUC modul"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Chyba"}.
|
{"Error","Chyba"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Příklad: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].2\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Příklad: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].2\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Vyloučit Jabber ID z procesu CAPTCHA ověřování"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportovat všechny uživatele do souboru ve formátu PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportovat všechny uživatele do souboru ve formátu PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportovat uživatele na hostiteli do souboru ve formátu PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportovat uživatele na hostiteli do souboru ve formátu PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Došlo k chybě při získávání Jabber ID z vaší žádosti o voice práva"}.
|
||||||
{"Family Name","Příjmení"}.
|
{"Family Name","Příjmení"}.
|
||||||
{"February",". února"}.
|
{"February",". února"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Vyplňte políčka pro vyhledání uživatele Jabberu"}.
|
{"Fill in fields to search for any matching Jabber User","Vyplňte políčka pro vyhledání uživatele Jabberu"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Získat čas podleního přihlášení uživatele"}.
|
{"Get User Last Login Time","Získat čas podleního přihlášení uživatele"}.
|
||||||
{"Get User Password","Získat heslo uživatele"}.
|
{"Get User Password","Získat heslo uživatele"}.
|
||||||
{"Get User Statistics","Získat statistiky uživatele"}.
|
{"Get User Statistics","Získat statistiky uživatele"}.
|
||||||
|
{"Grant voice to this person?","Udělit voice práva této osobě?"}.
|
||||||
{"Group ","Skupina "}.
|
{"Group ","Skupina "}.
|
||||||
{"Groups","Skupiny"}.
|
{"Groups","Skupiny"}.
|
||||||
{"has been banned","byl(a) zablokován(a)"}.
|
{"has been banned","byl(a) zablokován(a)"}.
|
||||||
@ -122,7 +128,7 @@
|
|||||||
{"has been kicked","byl(a) vyhozen(a) z místnosti"}.
|
{"has been kicked","byl(a) vyhozen(a) z místnosti"}.
|
||||||
{" has set the subject to: "," změnil(a) téma na: "}.
|
{" has set the subject to: "," změnil(a) téma na: "}.
|
||||||
{"Host","Hostitel"}.
|
{"Host","Hostitel"}.
|
||||||
{"If you don't see the CAPTCHA image here, visit the web page.","Pokud zde nevidíte obrázek CAPTCHE, přejděte na webovou stránku."}.
|
{"If you don't see the CAPTCHA image here, visit the web page.","Pokud zde nevidíte obrázek CAPTCHA, přejděte na webovou stránku."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Pokud chcete zadat jiné kódování pro IRC servery, vyplňte seznam s hodnotami ve formátu '{\"irc server\",\"encoding\", port, \"password\"}'. Výchozí kódování pro tuto službu je \"~s\", port ~p, empty password."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Pokud chcete zadat jiné kódování pro IRC servery, vyplňte seznam s hodnotami ve formátu '{\"irc server\",\"encoding\", port, \"password\"}'. Výchozí kódování pro tuto službu je \"~s\", port ~p, empty password."}.
|
||||||
{"Import Directory","Import adresáře"}.
|
{"Import Directory","Import adresáře"}.
|
||||||
{"Import File","Import souboru"}.
|
{"Import File","Import souboru"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Seznam modulů, které mají být spuštěné"}.
|
{"List of modules to start","Seznam modulů, které mají být spuštěné"}.
|
||||||
{"Low level update script","Nízkoúrovňový aktualizační skript"}.
|
{"Low level update script","Nízkoúrovňový aktualizační skript"}.
|
||||||
{"Make participants list public","Nastavit seznam účastníků jako veřejný"}.
|
{"Make participants list public","Nastavit seznam účastníků jako veřejný"}.
|
||||||
{"Make room captcha protected","Chránit místnost pomocí CAPTCHA"}.
|
{"Make room CAPTCHA protected","Chránit místnost pomocí CAPTCHA"}.
|
||||||
{"Make room members-only","Zpřístupnit místnost jen členům"}.
|
{"Make room members-only","Zpřístupnit místnost jen členům"}.
|
||||||
{"Make room moderated","Nastavit místnost jako moderovanou"}.
|
{"Make room moderated","Nastavit místnost jako moderovanou"}.
|
||||||
{"Make room password protected","Chránit místnost heslem"}.
|
{"Make room password protected","Chránit místnost heslem"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Paměť"}.
|
{"Memory","Paměť"}.
|
||||||
{"Message body","Tělo zprávy"}.
|
{"Message body","Tělo zprávy"}.
|
||||||
{"Middle Name","Druhé jméno"}.
|
{"Middle Name","Druhé jméno"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Minimální interval mezi žádostmi o voice práva (v sekundách)"}.
|
||||||
{"Moderator privileges required","Potřebujete práva moderátora"}.
|
{"Moderator privileges required","Potřebujete práva moderátora"}.
|
||||||
{"moderators only","moderátorům"}.
|
{"moderators only","moderátorům"}.
|
||||||
{"Modified modules","Aktualizované moduly"}.
|
{"Modified modules","Aktualizované moduly"}.
|
||||||
@ -199,6 +206,7 @@
|
|||||||
{"Nickname","Přezdívka"}.
|
{"Nickname","Přezdívka"}.
|
||||||
{"Nickname Registration at ","Registrace přezdívky na "}.
|
{"Nickname Registration at ","Registrace přezdívky na "}.
|
||||||
{"Nickname ~s does not exist in the room","Přezdívka ~s v místnosti neexistuje"}.
|
{"Nickname ~s does not exist in the room","Přezdívka ~s v místnosti neexistuje"}.
|
||||||
|
{"nobody","nikdo"}.
|
||||||
{"No body provided for announce message","Zpráva neobsahuje text"}.
|
{"No body provided for announce message","Zpráva neobsahuje text"}.
|
||||||
{"No Data","Žádná data"}.
|
{"No Data","Žádná data"}.
|
||||||
{"Node ID","ID uzlu"}.
|
{"Node ID","ID uzlu"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Doručovat upozornění jen právě přihlášeným uživatelům"}.
|
{"Only deliver notifications to available users","Doručovat upozornění jen právě přihlášeným uživatelům"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Jen moderátoři a účastníci mají povoleno měnit téma této místnosti"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Jen moderátoři a účastníci mají povoleno měnit téma této místnosti"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Jen moderátoři mají povoleno měnit téma místnosti"}.
|
{"Only moderators are allowed to change the subject in this room","Jen moderátoři mají povoleno měnit téma místnosti"}.
|
||||||
|
{"Only moderators can approve voice requests","Pouze moderátoři mohou schválit žádosti o voice práva"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Jen členové mají povolené zasílat zprávy do konference"}.
|
{"Only occupants are allowed to send messages to the conference","Jen členové mají povolené zasílat zprávy do konference"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Jen členové mohou odesílat požadavky (query) do konference"}.
|
{"Only occupants are allowed to send queries to the conference","Jen členové mohou odesílat požadavky (query) do konference"}.
|
||||||
{"Only service administrators are allowed to send service messages","Pouze správci služby smí odesílat servisní zprávy"}.
|
{"Only service administrators are allowed to send service messages","Pouze správci služby smí odesílat servisní zprávy"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Uložit položky natrvalo do úložiště"}.
|
{"Persist items to storage","Uložit položky natrvalo do úložiště"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Podotýkáme, že tato nastavení budou zálohována do zabudované databáze Mnesia. Pokud používáte ODBC modul, musíte zálohovat svoji SQL databázi samostatně."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Podotýkáme, že tato nastavení budou zálohována do zabudované databáze Mnesia. Pokud používáte ODBC modul, musíte zálohovat svoji SQL databázi samostatně."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Prosím, počkejte chvíli před posláním nové žádosti o voice práva"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Port ~b"}.
|
{"Port ~b","Port ~b"}.
|
||||||
{"Port","Port"}.
|
{"Port","Port"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","Neděle"}.
|
{"Sunday","Neděle"}.
|
||||||
{"That nickname is already in use by another occupant","Přezdívka je již používána jiným členem"}.
|
{"That nickname is already in use by another occupant","Přezdívka je již používána jiným členem"}.
|
||||||
{"That nickname is registered by another person","Přezdívka je zaregistrována jinou osobou"}.
|
{"That nickname is registered by another person","Přezdívka je zaregistrována jinou osobou"}.
|
||||||
{"The captcha is valid.","CAPTCHA souhlasí."}.
|
{"The CAPTCHA is valid.","CAPTCHA souhlasí."}.
|
||||||
{"The CAPTCHA verification has failed","Ověření CAPTCHA se nezdařilo"}.
|
{"The CAPTCHA verification has failed","Ověření CAPTCHA se nezdařilo"}.
|
||||||
{"The collections with which a node is affiliated","Kolekce, se kterými je uzel spřízněn"}.
|
{"The collections with which a node is affiliated","Kolekce, se kterými je uzel spřízněn"}.
|
||||||
{"the password is","heslo je"}.
|
{"the password is","heslo je"}.
|
||||||
@ -357,6 +367,7 @@
|
|||||||
{"Thursday","Čtvrtek"}.
|
{"Thursday","Čtvrtek"}.
|
||||||
{"Time","Čas"}.
|
{"Time","Čas"}.
|
||||||
{"Time delay","Časový posun"}.
|
{"Time delay","Časový posun"}.
|
||||||
|
{"Too many CAPTCHA requests","Přiliš mnoho CAPTCHA žádostí"}.
|
||||||
{"To","Pro"}.
|
{"To","Pro"}.
|
||||||
{"To ~s","Pro ~s"}.
|
{"To ~s","Pro ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Byl překročen limit"}.
|
{"Traffic rate limit is exceeded","Byl překročen limit"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","Transakce zaznamenána"}.
|
{"Transactions Logged:","Transakce zaznamenána"}.
|
||||||
{"Transactions Restarted:","Transakce restartována"}.
|
{"Transactions Restarted:","Transakce restartována"}.
|
||||||
{"Tuesday","Úterý"}.
|
{"Tuesday","Úterý"}.
|
||||||
{"Unable to generate a captcha","Nebylo možné vygenerovat CAPTCHA"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Nebylo možné vygenerovat CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","Nebylo možné vygenerovat CAPTCHA"}.
|
||||||
{"Unauthorized","Nemáte oprávnění"}.
|
{"Unauthorized","Nemáte oprávnění"}.
|
||||||
{"Unregister a Jabber account","Zrušte registraci účtu Jabberu"}.
|
{"Unregister a Jabber account","Zrušte registraci účtu Jabberu"}.
|
||||||
@ -377,7 +387,8 @@
|
|||||||
{"Update plan","Aktualizovat plán"}.
|
{"Update plan","Aktualizovat plán"}.
|
||||||
{"Update script","Aktualizované skripty"}.
|
{"Update script","Aktualizované skripty"}.
|
||||||
{"Uptime:","Čas běhu:"}.
|
{"Uptime:","Čas běhu:"}.
|
||||||
{"Use of STARTTLS required","Je vyžadováno STARTTLS."}.
|
{"Use of STARTTLS required","Je vyžadováno STARTTLS"}.
|
||||||
|
{"User JID","Jabber ID uživatele"}.
|
||||||
{"User Management","Správa uživatelů"}.
|
{"User Management","Správa uživatelů"}.
|
||||||
{"Username:","Uživatelské jméno:"}.
|
{"Username:","Uživatelské jméno:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Je zakázáno registrovat účty v tak rychlém sledu"}.
|
{"Users are not allowed to register accounts so quickly","Je zakázáno registrovat účty v tak rychlém sledu"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","Virtuální hostitelé"}.
|
{"Virtual Hosts","Virtuální hostitelé"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Návštěvníkům této místnosti je zakázáno měnit přezdívku"}.
|
{"Visitors are not allowed to change their nicknames in this room","Návštěvníkům této místnosti je zakázáno měnit přezdívku"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Návštevníci nemají povoleno zasílat zprávy všem účastníkům konference"}.
|
{"Visitors are not allowed to send messages to all occupants","Návštevníci nemají povoleno zasílat zprávy všem účastníkům konference"}.
|
||||||
|
{"Voice requests are disabled in this conference","Voice žádosti jsou v této konferenci zakázány"}.
|
||||||
|
{"Voice request","Žádost o voice práva"}.
|
||||||
{"Wednesday","Středa"}.
|
{"Wednesday","Středa"}.
|
||||||
{"When to send the last published item","Kdy odeslat poslední publikovanou položku"}.
|
{"When to send the last published item","Kdy odeslat poslední publikovanou položku"}.
|
||||||
{"Whether to allow subscriptions","Povolit odebírání"}.
|
{"Whether to allow subscriptions","Povolit odebírání"}.
|
||||||
|
685
src/msgs/cs.po
685
src/msgs/cs.po
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
|||||||
{"Access Rules","Zugangsregeln"}.
|
{"Access Rules","Zugangsregeln"}.
|
||||||
{"Action on user","Aktion auf Benutzer"}.
|
{"Action on user","Aktion auf Benutzer"}.
|
||||||
{"Add Jabber ID","Jabber-ID hinzufügen"}.
|
{"Add Jabber ID","Jabber-ID hinzufügen"}.
|
||||||
{"Add New","Neuen hinzufügen"}.
|
{"Add New","Neue hinzufügen"}.
|
||||||
{"Add User","Benutzer hinzufügen"}.
|
{"Add User","Benutzer hinzufügen"}.
|
||||||
{"Administration of ","Administration von "}.
|
{"Administration of ","Administration von "}.
|
||||||
{"Administration","Verwaltung"}.
|
{"Administration","Verwaltung"}.
|
||||||
@ -16,14 +16,16 @@
|
|||||||
{"All activity","Alle Aktivitäten"}.
|
{"All activity","Alle Aktivitäten"}.
|
||||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Dieser Jabber-ID das Abonnement dieses pubsub-Knotens erlauben?"}.
|
{"Allow this Jabber ID to subscribe to this pubsub node?","Dieser Jabber-ID das Abonnement dieses pubsub-Knotens erlauben?"}.
|
||||||
{"Allow users to change the subject","Erlaube Benutzern das Thema zu ändern"}.
|
{"Allow users to change the subject","Erlaube Benutzern das Thema zu ändern"}.
|
||||||
{"Allow users to query other users","Erlaube Benutzern andere Benutzer abzufragen"}.
|
{"Allow users to query other users","Erlaube Benutzern Informationen über andere Benutzer abzufragen"}.
|
||||||
{"Allow users to send invites","Erlaube Benutzern Einladungen zu senden"}.
|
{"Allow users to send invites","Erlaube Benutzern Einladungen zu senden"}.
|
||||||
{"Allow users to send private messages","Erlaube Benutzern private Nachrichten zu senden"}.
|
{"Allow users to send private messages","Erlaube Benutzern private Nachrichten zu senden"}.
|
||||||
{"Allow visitors to change nickname","Erlaube Besuchern ihren Spitznamen zu ändern"}.
|
{"Allow visitors to change nickname","Erlaube Besuchern ihren Spitznamen zu ändern"}.
|
||||||
{"Allow visitors to send status text in presence updates","Erlaube Besuchern einen Text bei Statusänderung zu setzen"}.
|
{"Allow visitors to send private messages to","Erlaube Besuchern das Senden von privaten Nachrichten an"}.
|
||||||
|
{"Allow visitors to send status text in presence updates","Erlaube Besuchern einen Text bei Statusänderung zu senden"}.
|
||||||
|
{"Allow visitors to send voice requests","Anfragen von Sprachrechten für Benutzer erlauben"}.
|
||||||
{"All Users","Alle Benutzer"}.
|
{"All Users","Alle Benutzer"}.
|
||||||
{"Announcements","Ankündigungen"}.
|
{"Announcements","Ankündigungen"}.
|
||||||
{"anyone","jeder"}.
|
{"anyone","jeden"}.
|
||||||
{"A password is required to enter this room","Sie brauchen ein Passwort um diesen Raum zu betreten"}.
|
{"A password is required to enter this room","Sie brauchen ein Passwort um diesen Raum zu betreten"}.
|
||||||
{"April","April"}.
|
{"April","April"}.
|
||||||
{"August","August"}.
|
{"August","August"}.
|
||||||
@ -67,7 +69,7 @@
|
|||||||
{"Delete Selected","Markierte löschen"}.
|
{"Delete Selected","Markierte löschen"}.
|
||||||
{"Delete User","Benutzer löschen"}.
|
{"Delete User","Benutzer löschen"}.
|
||||||
{"Deliver event notifications","Ereignisbenachrichtigung zustellen"}.
|
{"Deliver event notifications","Ereignisbenachrichtigung zustellen"}.
|
||||||
{"Deliver payloads with event notifications","Nachrichten mit mit Ereignis-Benachrichtigungen zustellen"}.
|
{"Deliver payloads with event notifications","Nachrichten mit Ereignis-Benachrichtigungen zustellen"}.
|
||||||
{"Description:","Beschreibung:"}.
|
{"Description:","Beschreibung:"}.
|
||||||
{"Disc only copy","Nur auf Festplatte"}.
|
{"Disc only copy","Nur auf Festplatte"}.
|
||||||
{"Displayed Groups:","Angezeigte Gruppen:"}.
|
{"Displayed Groups:","Angezeigte Gruppen:"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Ausgabe der Sicherung in diese Textdatei "}.
|
{"Dump Backup to Text File at ","Ausgabe der Sicherung in diese Textdatei "}.
|
||||||
{"Dump to Text File","Ausgabe in Textdatei"}.
|
{"Dump to Text File","Ausgabe in Textdatei"}.
|
||||||
{"Edit Properties","Einstellungen ändern"}.
|
{"Edit Properties","Einstellungen ändern"}.
|
||||||
|
{"Either approve or decline the voice request.","Diese Anfrage für Sprachrechte bestätigen oder ablehnen."}.
|
||||||
{"ejabberd IRC module","ejabberd IRC-Modul"}.
|
{"ejabberd IRC module","ejabberd IRC-Modul"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC-Modul"}.
|
{"ejabberd MUC module","ejabberd MUC-Modul"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe-Modul"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe-Modul"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Fehler"}.
|
{"Error","Fehler"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Beispiel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Beispiel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Von CAPTCHA Überprüfung ausgeschlossene Jabber IDs"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Alle Benutzerdaten des Servers in PIEFXIS Dateien (XEP-0227) exportieren:"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Alle Benutzerdaten des Servers in PIEFXIS Dateien (XEP-0227) exportieren:"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Alle Benutzerdaten des Hosts in PIEFXIS Dateien (XEP-0227) exportieren:"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Alle Benutzerdaten des Hosts in PIEFXIS Dateien (XEP-0227) exportieren:"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Fehler beim Auslesen der JID aus der Anfragenbestätigung für Sprachrechte"}.
|
||||||
{"Family Name","Nachname"}.
|
{"Family Name","Nachname"}.
|
||||||
{"February","Februar"}.
|
{"February","Februar"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Füllen Sie die Felder aus, um nach passenden Jabber-Benutzern zu suchen"}.
|
{"Fill in fields to search for any matching Jabber User","Füllen Sie die Felder aus, um nach passenden Jabber-Benutzern zu suchen"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","letzte Anmeldezeit abrufen"}.
|
{"Get User Last Login Time","letzte Anmeldezeit abrufen"}.
|
||||||
{"Get User Password","Benutzer-Passwort abrufen"}.
|
{"Get User Password","Benutzer-Passwort abrufen"}.
|
||||||
{"Get User Statistics","Benutzer-Statistiken abrufen"}.
|
{"Get User Statistics","Benutzer-Statistiken abrufen"}.
|
||||||
|
{"Grant voice to this person?","Sprachrechte dieser Person erteilen?"}.
|
||||||
{"Group ","Gruppe "}.
|
{"Group ","Gruppe "}.
|
||||||
{"Groups","Gruppen"}.
|
{"Groups","Gruppen"}.
|
||||||
{"has been banned","wurde gebannt"}.
|
{"has been banned","wurde gebannt"}.
|
||||||
@ -136,7 +142,7 @@
|
|||||||
{"Incorrect password","Falsches Passwort"}.
|
{"Incorrect password","Falsches Passwort"}.
|
||||||
{"Invalid affiliation: ~s","Ungültige Mitgliedschaft: ~s"}.
|
{"Invalid affiliation: ~s","Ungültige Mitgliedschaft: ~s"}.
|
||||||
{"Invalid role: ~s","Ungültige Rolle: ~s"}.
|
{"Invalid role: ~s","Ungültige Rolle: ~s"}.
|
||||||
{"IP addresses","IP Addresse"}.
|
{"IP addresses","IP Adressen"}.
|
||||||
{"IP","IP"}.
|
{"IP","IP"}.
|
||||||
{"IRC channel (don't put the first #)","IRC Channel (ohne dem ersten #)"}.
|
{"IRC channel (don't put the first #)","IRC Channel (ohne dem ersten #)"}.
|
||||||
{"IRC server","IRC Server"}.
|
{"IRC server","IRC Server"}.
|
||||||
@ -153,7 +159,7 @@
|
|||||||
{"Jabber ID ~s is invalid","Die Jabber-ID ~s ist ungültig"}.
|
{"Jabber ID ~s is invalid","Die Jabber-ID ~s ist ungültig"}.
|
||||||
{"January","Januar"}.
|
{"January","Januar"}.
|
||||||
{"Join IRC channel","IRC Channel beitreten"}.
|
{"Join IRC channel","IRC Channel beitreten"}.
|
||||||
{"joins the room","kommt in den Raum"}.
|
{"joins the room","betretet den Raum"}.
|
||||||
{"Join the IRC channel here.","Hier den IRC Channel beitreten."}.
|
{"Join the IRC channel here.","Hier den IRC Channel beitreten."}.
|
||||||
{"Join the IRC channel in this Jabber ID: ~s","Den IRC Channel mit dieser Jabber ID beitreten: ~s"}.
|
{"Join the IRC channel in this Jabber ID: ~s","Den IRC Channel mit dieser Jabber ID beitreten: ~s"}.
|
||||||
{"July","Juli"}.
|
{"July","Juli"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Liste der zu startenden Module"}.
|
{"List of modules to start","Liste der zu startenden Module"}.
|
||||||
{"Low level update script","Low level Aktualisierungsscript"}.
|
{"Low level update script","Low level Aktualisierungsscript"}.
|
||||||
{"Make participants list public","Teilnehmerliste öffentlich machen"}.
|
{"Make participants list public","Teilnehmerliste öffentlich machen"}.
|
||||||
{"Make room captcha protected","Raum mit Verifizierung (Captcha) versehen"}.
|
{"Make room CAPTCHA protected","Raum mit Verifizierung (Captcha) versehen"}.
|
||||||
{"Make room members-only","Raum nur für Mitglieder zugänglich machen"}.
|
{"Make room members-only","Raum nur für Mitglieder zugänglich machen"}.
|
||||||
{"Make room moderated","Raum moderiert machen"}.
|
{"Make room moderated","Raum moderiert machen"}.
|
||||||
{"Make room password protected","Raum mit Passwort schützen"}.
|
{"Make room password protected","Raum mit Passwort schützen"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Speicher"}.
|
{"Memory","Speicher"}.
|
||||||
{"Message body","Nachrichtentext"}.
|
{"Message body","Nachrichtentext"}.
|
||||||
{"Middle Name","Zweiter Vorname"}.
|
{"Middle Name","Zweiter Vorname"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Mindestdauer zwischen Anfragen für Sprachrechte (in Sekunden)"}.
|
||||||
{"Moderator privileges required","Moderatorrechte benötigt"}.
|
{"Moderator privileges required","Moderatorrechte benötigt"}.
|
||||||
{"moderators only","ausschliesslich Moderatoren"}.
|
{"moderators only","ausschliesslich Moderatoren"}.
|
||||||
{"Modified modules","Geänderte Module"}.
|
{"Modified modules","Geänderte Module"}.
|
||||||
@ -199,6 +206,7 @@
|
|||||||
{"Nickname","Benutzername"}.
|
{"Nickname","Benutzername"}.
|
||||||
{"Nickname Registration at ","Registrieren des Benutzernames auf"}.
|
{"Nickname Registration at ","Registrieren des Benutzernames auf"}.
|
||||||
{"Nickname ~s does not exist in the room","Der Benutzername ~s existiert im Raum nicht"}.
|
{"Nickname ~s does not exist in the room","Der Benutzername ~s existiert im Raum nicht"}.
|
||||||
|
{"nobody","niemanden"}.
|
||||||
{"No body provided for announce message","Kein Text für die Ankündigung angegeben"}.
|
{"No body provided for announce message","Kein Text für die Ankündigung angegeben"}.
|
||||||
{"No Data","Keine Daten"}.
|
{"No Data","Keine Daten"}.
|
||||||
{"Node ID","Knoten-ID"}.
|
{"Node ID","Knoten-ID"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Benachrichtigungen nur an verfügbare Benutzer schicken"}.
|
{"Only deliver notifications to available users","Benachrichtigungen nur an verfügbare Benutzer schicken"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Nur Moderatoren und Mitglieder dürfen das Thema in diesem Raum ändern"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Nur Moderatoren und Mitglieder dürfen das Thema in diesem Raum ändern"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Nur Moderatoren dürfen das Thema in diesem Raum ändern"}.
|
{"Only moderators are allowed to change the subject in this room","Nur Moderatoren dürfen das Thema in diesem Raum ändern"}.
|
||||||
|
{"Only moderators can approve voice requests","Nur Moderatoren können Anfragen für Sprachrechte bestätigen"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Nur Teilnehmer dürfen Nachrichten an den Raum schicken"}.
|
{"Only occupants are allowed to send messages to the conference","Nur Teilnehmer dürfen Nachrichten an den Raum schicken"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Nur Teilnehmer sind berechtigt Anfragen an die Konferenz zu senden"}.
|
{"Only occupants are allowed to send queries to the conference","Nur Teilnehmer sind berechtigt Anfragen an die Konferenz zu senden"}.
|
||||||
{"Only service administrators are allowed to send service messages","Nur Service-Administratoren sind berechtigt, Servicenachrichten zu versenden"}.
|
{"Only service administrators are allowed to send service messages","Nur Service-Administratoren sind berechtigt, Servicenachrichten zu versenden"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Einträge dauerhaft speichern"}.
|
{"Persist items to storage","Einträge dauerhaft speichern"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Beachten sie, das diese Optionen nur die eingebaute Mnesia-Datenbank sichern. Wenn sie das ODBC-Modul verwenden, müssen sie die SQL-Datenbank manuell sichern."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Beachten sie, das diese Optionen nur die eingebaute Mnesia-Datenbank sichern. Wenn sie das ODBC-Modul verwenden, müssen sie die SQL-Datenbank manuell sichern."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Bitte warten sie ein wenig, bevor sie eine weitere Anfrage für Sprachrechte senden"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Port ~b"}.
|
{"Port ~b","Port ~b"}.
|
||||||
{"Port","Port"}.
|
{"Port","Port"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","Sonntag"}.
|
{"Sunday","Sonntag"}.
|
||||||
{"That nickname is already in use by another occupant","Dieser Benutzername wird bereits von einem Teilnehmer genutzt"}.
|
{"That nickname is already in use by another occupant","Dieser Benutzername wird bereits von einem Teilnehmer genutzt"}.
|
||||||
{"That nickname is registered by another person","Dieser Benutzername wurde bereits von jemand anderem registriert"}.
|
{"That nickname is registered by another person","Dieser Benutzername wurde bereits von jemand anderem registriert"}.
|
||||||
{"The captcha is valid.","Die Verifizierung ist gültig."}.
|
{"The CAPTCHA is valid.","Die Verifizierung ist gültig."}.
|
||||||
{"The CAPTCHA verification has failed","Die CAPTCHA Verifizierung schlug fehl"}.
|
{"The CAPTCHA verification has failed","Die CAPTCHA Verifizierung schlug fehl"}.
|
||||||
{"The collections with which a node is affiliated","Sammlungen, mit denen ein Knoten verknüpft ist"}.
|
{"The collections with which a node is affiliated","Sammlungen, mit denen ein Knoten verknüpft ist"}.
|
||||||
{"the password is","das Passwort lautet"}.
|
{"the password is","das Passwort lautet"}.
|
||||||
@ -350,14 +360,15 @@
|
|||||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Groß/Klein-Schreibung spielt hierbei keine Rolle: macbeth ist gleich MacBeth und Macbeth."}.
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Groß/Klein-Schreibung spielt hierbei keine Rolle: macbeth ist gleich MacBeth und Macbeth."}.
|
||||||
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Diese Seite erlaubt das anlegen eines Jabber Kontos auf diesem Jabber Server. Ihre JID (Jabber IDentifier) setzt sich folgend zusammen: benutzername@server. Bitte lesen sie die Hinweise genau durch, um die Felder korrekt auszufüllen."}.
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Diese Seite erlaubt das anlegen eines Jabber Kontos auf diesem Jabber Server. Ihre JID (Jabber IDentifier) setzt sich folgend zusammen: benutzername@server. Bitte lesen sie die Hinweise genau durch, um die Felder korrekt auszufüllen."}.
|
||||||
{"This page allows to unregister a Jabber account in this Jabber server.","Diese Seite erlaubt es, ein Jabber Konto von diesem Server zu entfernen."}.
|
{"This page allows to unregister a Jabber account in this Jabber server.","Diese Seite erlaubt es, ein Jabber Konto von diesem Server zu entfernen."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine Fehlernachricht gesendet hat"}.
|
{"This participant is kicked from the room because he sent an error message","Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine fehlerhafte Nachricht gesendet hat"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine Fehlernachricht an einen anderen Teilnehmer gesendet hat"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine fehlerhafte Nachricht an einen anderen Teilnehmer gesendet hat"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Dieser Teilnehmer wurde aus dem Raum gekickt, da er einen fehlerhaften Status gesendet hat"}.
|
{"This participant is kicked from the room because he sent an error presence","Dieser Teilnehmer wurde aus dem Raum gekickt, da er einen fehlerhaften Status gesendet hat"}.
|
||||||
{"This room is not anonymous","Dieser Raum ist nicht anonym"}.
|
{"This room is not anonymous","Dieser Raum ist nicht anonym"}.
|
||||||
{"Thursday","Donnerstag"}.
|
{"Thursday","Donnerstag"}.
|
||||||
{"Time delay","Zeitverzögerung"}.
|
{"Time delay","Zeitverzögerung"}.
|
||||||
{"Time","Zeit"}.
|
{"Time","Zeit"}.
|
||||||
{"To","An"}.
|
{"To","An"}.
|
||||||
|
{"Too many CAPTCHA requests","Zu viele CAPTCHA Anfragen"}.
|
||||||
{"To ~s","An ~s"}.
|
{"To ~s","An ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Datenratenlimit wurde überschritten"}.
|
{"Traffic rate limit is exceeded","Datenratenlimit wurde überschritten"}.
|
||||||
{"Transactions Aborted:","Abgebrochene Transaktionen:"}.
|
{"Transactions Aborted:","Abgebrochene Transaktionen:"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","Protokollierte Transaktionen:"}.
|
{"Transactions Logged:","Protokollierte Transaktionen:"}.
|
||||||
{"Transactions Restarted:","Neu gestartete Transaktionen:"}.
|
{"Transactions Restarted:","Neu gestartete Transaktionen:"}.
|
||||||
{"Tuesday","Dienstag"}.
|
{"Tuesday","Dienstag"}.
|
||||||
{"Unable to generate a captcha","Konnte Captcha nicht erstellen"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Konnte CAPTCHA nicht erstellen"}.
|
{"Unable to generate a CAPTCHA","Konnte CAPTCHA nicht erstellen"}.
|
||||||
{"Unauthorized","Nicht berechtigt"}.
|
{"Unauthorized","Nicht berechtigt"}.
|
||||||
{"Unregister","Abmelden"}.
|
{"Unregister","Abmelden"}.
|
||||||
@ -380,6 +390,7 @@
|
|||||||
{"Use of STARTTLS required","Verwendung von STARTTLS erforderlich"}.
|
{"Use of STARTTLS required","Verwendung von STARTTLS erforderlich"}.
|
||||||
{"User ","Benutzer "}.
|
{"User ","Benutzer "}.
|
||||||
{"User","Benutzer"}.
|
{"User","Benutzer"}.
|
||||||
|
{"User JID","Benutzer JID"}.
|
||||||
{"User Management","Benutzerverwaltung"}.
|
{"User Management","Benutzerverwaltung"}.
|
||||||
{"Username:","Benutzername:"}.
|
{"Username:","Benutzername:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Benutzer dürfen Konten nicht so schnell registrieren"}.
|
{"Users are not allowed to register accounts so quickly","Benutzer dürfen Konten nicht so schnell registrieren"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","Virtuelle Hosts"}.
|
{"Virtual Hosts","Virtuelle Hosts"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Besucher dürfen in diesem Raum ihren Benutzernamen nicht ändern"}.
|
{"Visitors are not allowed to change their nicknames in this room","Besucher dürfen in diesem Raum ihren Benutzernamen nicht ändern"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Besucher dürfen nicht an alle Teilnehmer Nachrichten verschicken"}.
|
{"Visitors are not allowed to send messages to all occupants","Besucher dürfen nicht an alle Teilnehmer Nachrichten verschicken"}.
|
||||||
|
{"Voice request","Anfrage für Sprachrechte"}.
|
||||||
|
{"Voice requests are disabled in this conference","Anfragen für Sprachrechte sind in diesem Raum deaktiviert"}.
|
||||||
{"Wednesday","Mittwoch"}.
|
{"Wednesday","Mittwoch"}.
|
||||||
{"When to send the last published item","Wann soll das letzte veröffentlichte Objekt gesendet werden"}.
|
{"When to send the last published item","Wann soll das letzte veröffentlichte Objekt gesendet werden"}.
|
||||||
{"Whether to allow subscriptions","Ob Abonnements erlaubt sind"}.
|
{"Whether to allow subscriptions","Ob Abonnements erlaubt sind"}.
|
||||||
|
710
src/msgs/de.po
710
src/msgs/de.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Επιτρέψετε στους χρήστες να αποστέλλουν προσκλήσεις"}.
|
{"Allow users to send invites","Επιτρέψετε στους χρήστες να αποστέλλουν προσκλήσεις"}.
|
||||||
{"Allow users to send private messages","Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα"}.
|
{"Allow users to send private messages","Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα"}.
|
||||||
{"Allow visitors to change nickname","Επιτρέψετε στους επισκέπτες να αλλάζου ψευδώνυμο"}.
|
{"Allow visitors to change nickname","Επιτρέψετε στους επισκέπτες να αλλάζου ψευδώνυμο"}.
|
||||||
|
{"Allow visitors to send private messages to","Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα σε"}.
|
||||||
{"Allow visitors to send status text in presence updates","Επιτρέψτε στους επισκέπτες να αποστέλλουν κατάσταση στις ενημερώσεις παρουσίας"}.
|
{"Allow visitors to send status text in presence updates","Επιτρέψτε στους επισκέπτες να αποστέλλουν κατάσταση στις ενημερώσεις παρουσίας"}.
|
||||||
|
{"Allow visitors to send voice requests","Επιτρέψτε στους επισκέπτες να στέλνουν αιτήματα φωνής"}.
|
||||||
{"All Users","Όλοι οι χρήστες"}.
|
{"All Users","Όλοι οι χρήστες"}.
|
||||||
{"Announcements","Ανακοινώσεις"}.
|
{"Announcements","Ανακοινώσεις"}.
|
||||||
{"anyone","οποιοσδήποτε"}.
|
{"anyone","οποιοσδήποτε"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Αποθήκευση Αντιγράφου Ασφαλείας σε αρχείο κειμένου στο "}.
|
{"Dump Backup to Text File at ","Αποθήκευση Αντιγράφου Ασφαλείας σε αρχείο κειμένου στο "}.
|
||||||
{"Dump to Text File","Αποθήκευση σε αρχείο κειμένου"}.
|
{"Dump to Text File","Αποθήκευση σε αρχείο κειμένου"}.
|
||||||
{"Edit Properties","Επεξεργασία ιδιοτήτων"}.
|
{"Edit Properties","Επεξεργασία ιδιοτήτων"}.
|
||||||
|
{"Either approve or decline the voice request.","Είτε εγκρίνετε ή απορρίψτε το αίτημα φωνής."}.
|
||||||
{"ejabberd IRC module","ejabberd IRC module"}.
|
{"ejabberd IRC module","ejabberd IRC module"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC module"}.
|
{"ejabberd MUC module","ejabberd MUC module"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd module Δημοσίευσης-Εγγραφής"}.
|
{"ejabberd Publish-Subscribe module","ejabberd module Δημοσίευσης-Εγγραφής"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Διακομιστής"}.
|
{"Erlang Jabber Server","Erlang Jabber Διακομιστής"}.
|
||||||
{"Error","Σφάλμα"}.
|
{"Error","Σφάλμα"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Παράδειγμα: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Παράδειγμα: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Εξαίρεση από τις ταυτότητες Jabber, ή CAPTCHA πρόκληση"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Εξαγωγή δεδομένων όλων των χρηστών του διακομιστή σε PIEFXIS αρχεία (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Εξαγωγή δεδομένων όλων των χρηστών του διακομιστή σε PIEFXIS αρχεία (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Εξαγωγή δεδομένων των χρηστών κεντρικού υπολογιστή σε PIEFXIS αρχεία (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Εξαγωγή δεδομένων των χρηστών κεντρικού υπολογιστή σε PIEFXIS αρχεία (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Απέτυχε η εξαγωγή JID από την έγκριση του αιτήματος φωνής σας"}.
|
||||||
{"Family Name","Επώνυμο"}.
|
{"Family Name","Επώνυμο"}.
|
||||||
{"February","Φεβρουάριος"}.
|
{"February","Φεβρουάριος"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Συμπληρώστε τα πεδία για να αναζητήσετε οποιαδήποτε ταιριάζοντα Jabber χρήστη"}.
|
{"Fill in fields to search for any matching Jabber User","Συμπληρώστε τα πεδία για να αναζητήσετε οποιαδήποτε ταιριάζοντα Jabber χρήστη"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Έκθεση Τελευταίας Ώρας Σύνδεσης Χρήστη"}.
|
{"Get User Last Login Time","Έκθεση Τελευταίας Ώρας Σύνδεσης Χρήστη"}.
|
||||||
{"Get User Password","Έκθεση Κωδικού Πρόσβασης Χρήστη"}.
|
{"Get User Password","Έκθεση Κωδικού Πρόσβασης Χρήστη"}.
|
||||||
{"Get User Statistics","Έκθεση Στατιστικών Χρήστη"}.
|
{"Get User Statistics","Έκθεση Στατιστικών Χρήστη"}.
|
||||||
|
{"Grant voice to this person?","Παραχώρηση φωνής σε αυτό το άτομο;"}.
|
||||||
{"Groups","Ομάδες"}.
|
{"Groups","Ομάδες"}.
|
||||||
{"Group ","Ομάδα"}.
|
{"Group ","Ομάδα"}.
|
||||||
{"has been banned","έχει απαγορευθεί"}.
|
{"has been banned","έχει απαγορευθεί"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Λίστα των Module για Εκκίνηση"}.
|
{"List of modules to start","Λίστα των Module για Εκκίνηση"}.
|
||||||
{"Low level update script","Προγράμα ενημέρωσης χαμηλού επίπεδου "}.
|
{"Low level update script","Προγράμα ενημέρωσης χαμηλού επίπεδου "}.
|
||||||
{"Make participants list public","Κάντε κοινό τον κατάλογο συμμετεχόντων"}.
|
{"Make participants list public","Κάντε κοινό τον κατάλογο συμμετεχόντων"}.
|
||||||
{"Make room captcha protected","Κάντε την αίθουσα CAPTCHA προστατεύονομενη"}.
|
{"Make room CAPTCHA protected","Κάντε την αίθουσα CAPTCHA προστατεύονομενη"}.
|
||||||
{"Make room members-only","Κάντε την αίθουσα μόνο για μέλη"}.
|
{"Make room members-only","Κάντε την αίθουσα μόνο για μέλη"}.
|
||||||
{"Make room moderated","Κάντε την αίθουσα εποπτεύονομενη"}.
|
{"Make room moderated","Κάντε την αίθουσα εποπτεύονομενη"}.
|
||||||
{"Make room password protected","Κάντε την αίθουσα προστατεύομενη με κωδικό πρόσβασης"}.
|
{"Make room password protected","Κάντε την αίθουσα προστατεύομενη με κωδικό πρόσβασης"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Μνήμη"}.
|
{"Memory","Μνήμη"}.
|
||||||
{"Message body","Περιεχόμενο μηνυμάτως"}.
|
{"Message body","Περιεχόμενο μηνυμάτως"}.
|
||||||
{"Middle Name","Πατρώνυμο"}.
|
{"Middle Name","Πατρώνυμο"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Ελάχιστο χρονικό διάστημα μεταξύ αιτημάτων φωνής (σε δευτερόλεπτα)"}.
|
||||||
{"Moderator privileges required","Aπαιτούνται προνόμια συντονιστή"}.
|
{"Moderator privileges required","Aπαιτούνται προνόμια συντονιστή"}.
|
||||||
{"moderators only","συντονιστές μόνο"}.
|
{"moderators only","συντονιστές μόνο"}.
|
||||||
{"Modified modules","Τροποποιημένα modules"}.
|
{"Modified modules","Τροποποιημένα modules"}.
|
||||||
@ -200,6 +207,7 @@
|
|||||||
{"Nickname ~s does not exist in the room","Ψευδώνυμο ~s δεν υπάρχει σε αυτή την αίθουσα"}.
|
{"Nickname ~s does not exist in the room","Ψευδώνυμο ~s δεν υπάρχει σε αυτή την αίθουσα"}.
|
||||||
{"Nickname","Ψευδώνυμο"}.
|
{"Nickname","Ψευδώνυμο"}.
|
||||||
{"No body provided for announce message","Δεν προμηθεύτικε περιεχόμενο ανακοινώσης"}.
|
{"No body provided for announce message","Δεν προμηθεύτικε περιεχόμενο ανακοινώσης"}.
|
||||||
|
{"nobody","κανείς"}.
|
||||||
{"No Data","Κανένα στοιχείο"}.
|
{"No Data","Κανένα στοιχείο"}.
|
||||||
{"Node ID","Ταυτότητα Κόμβου"}.
|
{"Node ID","Ταυτότητα Κόμβου"}.
|
||||||
{"Node not found","Κόμβος δεν βρέθηκε"}.
|
{"Node not found","Κόμβος δεν βρέθηκε"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Παράδωση κοινοποιήσεων μόνο σε διαθέσιμους χρήστες"}.
|
{"Only deliver notifications to available users","Παράδωση κοινοποιήσεων μόνο σε διαθέσιμους χρήστες"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Μόνο οι συντονιστές και οι συμμετέχοντες μπορούν να αλλάξουν το θέμα αυτής της αίθουσας"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Μόνο οι συντονιστές και οι συμμετέχοντες μπορούν να αλλάξουν το θέμα αυτής της αίθουσας"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Μόνο οι συντονιστές μπορούν να αλλάξουν το θέμα αυτής της αίθουσας"}.
|
{"Only moderators are allowed to change the subject in this room","Μόνο οι συντονιστές μπορούν να αλλάξουν το θέμα αυτής της αίθουσας"}.
|
||||||
|
{"Only moderators can approve voice requests","Μόνο οι συντονιστές μπορούν να εγκρίνουν τις αιτήσεις φωνής"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Μόνο οι συμμετέχωντες μπορούν να στέλνουν μηνύματα στο συνέδριο"}.
|
{"Only occupants are allowed to send messages to the conference","Μόνο οι συμμετέχωντες μπορούν να στέλνουν μηνύματα στο συνέδριο"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Μόνο οι συμετεχόντες μπορούν να στείλουν ερωτήματα στη διάσκεψη"}.
|
{"Only occupants are allowed to send queries to the conference","Μόνο οι συμετεχόντες μπορούν να στείλουν ερωτήματα στη διάσκεψη"}.
|
||||||
{"Only service administrators are allowed to send service messages","Μόνο οι διαχειριστές των υπηρεσιών επιτρέπεται να στείλουν υπηρεσιακά μηνύματα"}.
|
{"Only service administrators are allowed to send service messages","Μόνο οι διαχειριστές των υπηρεσιών επιτρέπεται να στείλουν υπηρεσιακά μηνύματα"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Μονιμη αποθήκευση στοιχείων"}.
|
{"Persist items to storage","Μονιμη αποθήκευση στοιχείων"}.
|
||||||
{"Ping","Πινγκ"}.
|
{"Ping","Πινγκ"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Παρακαλώ σημειώστε ότι οι επιλογές αυτές θα αποθήκευσουν Αντιγράφο Ασφαλείας μόνο της ενσωματωμένης βάσης δεδομένων Mnesia. Εάν χρησιμοποιείτε το module ODBC, θα πρέπει επίσης να κάνετε χωριστά Αντιγράφο Ασφαλείας της SQL βάση δεδομένων σας ."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Παρακαλώ σημειώστε ότι οι επιλογές αυτές θα αποθήκευσουν Αντιγράφο Ασφαλείας μόνο της ενσωματωμένης βάσης δεδομένων Mnesia. Εάν χρησιμοποιείτε το module ODBC, θα πρέπει επίσης να κάνετε χωριστά Αντιγράφο Ασφαλείας της SQL βάση δεδομένων σας ."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Παρακαλώ, περιμένετε για λίγο πριν την αποστολή νέου αιτήματος φωνής"}.
|
||||||
{"Pong","Πονγκ"}.
|
{"Pong","Πονγκ"}.
|
||||||
{"Port ~b","Θύρα ~b"}.
|
{"Port ~b","Θύρα ~b"}.
|
||||||
{"Port","Θύρα"}.
|
{"Port","Θύρα"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","Κυριακή"}.
|
{"Sunday","Κυριακή"}.
|
||||||
{"That nickname is already in use by another occupant","Αυτό το ψευδώνυμο είναι ήδη σε χρήση από άλλον συμμετέχων"}.
|
{"That nickname is already in use by another occupant","Αυτό το ψευδώνυμο είναι ήδη σε χρήση από άλλον συμμετέχων"}.
|
||||||
{"That nickname is registered by another person","Αυτό το ψευδώνυμο είναι καταχωρημένο από άλλο πρόσωπο"}.
|
{"That nickname is registered by another person","Αυτό το ψευδώνυμο είναι καταχωρημένο από άλλο πρόσωπο"}.
|
||||||
{"The captcha is valid.","Το captcha είναι έγκυρο."}.
|
{"The CAPTCHA is valid.","Το CAPTCHA είναι έγκυρο."}.
|
||||||
{"The CAPTCHA verification has failed","Η επαλήθευση της εικόνας CAPTCHA απέτυχε"}.
|
{"The CAPTCHA verification has failed","Η επαλήθευση της εικόνας CAPTCHA απέτυχε"}.
|
||||||
{"The collections with which a node is affiliated","Οι συλλογές με την οποία είναι ένας κόμβος συνδέεται"}.
|
{"The collections with which a node is affiliated","Οι συλλογές με την οποία είναι ένας κόμβος συνδέεται"}.
|
||||||
{"The password is too weak","Ο κωδικός πρόσβασης είναι πολύ ασθενές"}.
|
{"The password is too weak","Ο κωδικός πρόσβασης είναι πολύ ασθενές"}.
|
||||||
@ -357,6 +367,7 @@
|
|||||||
{"Thursday","Πέμπτη"}.
|
{"Thursday","Πέμπτη"}.
|
||||||
{"Time delay","Χρόνος καθυστέρησης"}.
|
{"Time delay","Χρόνος καθυστέρησης"}.
|
||||||
{"Time","Χρόνος"}.
|
{"Time","Χρόνος"}.
|
||||||
|
{"Too many CAPTCHA requests","Πάρα πολλά αιτήματα CAPTCHA"}.
|
||||||
{"To ~s","Πρώς ~s"}.
|
{"To ~s","Πρώς ~s"}.
|
||||||
{"To","Πρώς"}.
|
{"To","Πρώς"}.
|
||||||
{"Traffic rate limit is exceeded","Υπέρφορτωση"}.
|
{"Traffic rate limit is exceeded","Υπέρφορτωση"}.
|
||||||
@ -365,8 +376,7 @@
|
|||||||
{"Transactions Logged:","Καταγραμμένες συναλλαγές:"}.
|
{"Transactions Logged:","Καταγραμμένες συναλλαγές:"}.
|
||||||
{"Transactions Restarted:","Επανειλημμένες συναλλαγές:"}.
|
{"Transactions Restarted:","Επανειλημμένες συναλλαγές:"}.
|
||||||
{"Tuesday","Τρίτη"}.
|
{"Tuesday","Τρίτη"}.
|
||||||
{"Unable to generate a captcha","Αδήνατο να δημιουργηθεί CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","Αδήνατο να δημιουργηθεί CAPTCHA"}.
|
||||||
{"Unable to generate a CAPTCHA","Αδήνατο να δημιουργηθεί εικόνα CAPTCHA"}.
|
|
||||||
{"Unauthorized","Χορίς Εξουσιοδότηση"}.
|
{"Unauthorized","Χορίς Εξουσιοδότηση"}.
|
||||||
{"Unregister a Jabber account","Καταργήστε την εγγραφή ενός λογαριασμού Jabber"}.
|
{"Unregister a Jabber account","Καταργήστε την εγγραφή ενός λογαριασμού Jabber"}.
|
||||||
{"Unregister","Καταργήση εγγραφής"}.
|
{"Unregister","Καταργήση εγγραφής"}.
|
||||||
@ -378,6 +388,7 @@
|
|||||||
{"Update","Ενημέρωση"}.
|
{"Update","Ενημέρωση"}.
|
||||||
{"Uptime:","Uptime:"}.
|
{"Uptime:","Uptime:"}.
|
||||||
{"Use of STARTTLS required","Απαιτείται χρήση STARTTLS "}.
|
{"Use of STARTTLS required","Απαιτείται χρήση STARTTLS "}.
|
||||||
|
{"User JID","JID Χρήστη"}.
|
||||||
{"User Management","Διαχείριση χρηστών"}.
|
{"User Management","Διαχείριση χρηστών"}.
|
||||||
{"Username:","Όνομα χρήστη"}.
|
{"Username:","Όνομα χρήστη"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Οι χρήστες δεν επιτρέπεται να εγγραφούν λογαριασμούς τόσο γρήγορα"}.
|
{"Users are not allowed to register accounts so quickly","Οι χρήστες δεν επιτρέπεται να εγγραφούν λογαριασμούς τόσο γρήγορα"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","εικονικοί κεντρικοί υπολογιστές"}.
|
{"Virtual Hosts","εικονικοί κεντρικοί υπολογιστές"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Οι επισκέπτες δεν επιτρέπεται να αλλάξουν τα ψευδώνυμα τους σε αυτή την αίθουσα"}.
|
{"Visitors are not allowed to change their nicknames in this room","Οι επισκέπτες δεν επιτρέπεται να αλλάξουν τα ψευδώνυμα τους σε αυτή την αίθουσα"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Οι επισκέπτες δεν επιτρέπεται να στείλουν μηνύματα σε όλους τους συμμετέχωντες"}.
|
{"Visitors are not allowed to send messages to all occupants","Οι επισκέπτες δεν επιτρέπεται να στείλουν μηνύματα σε όλους τους συμμετέχωντες"}.
|
||||||
|
{"Voice requests are disabled in this conference","Τα αιτήματα φωνής είναι απενεργοποιημένα, σε αυτό το συνέδριο"}.
|
||||||
|
{"Voice request","Αίτημα φωνής"}.
|
||||||
{"Wednesday","Τετάρτη"}.
|
{"Wednesday","Τετάρτη"}.
|
||||||
{"When to send the last published item","Πότε να αποσταλθεί το τελευταίο στοιχείο που δημοσιεύθηκε"}.
|
{"When to send the last published item","Πότε να αποσταλθεί το τελευταίο στοιχείο που δημοσιεύθηκε"}.
|
||||||
{"Whether to allow subscriptions","Εάν επιτρέποντε συνδρομές"}.
|
{"Whether to allow subscriptions","Εάν επιτρέποντε συνδρομές"}.
|
||||||
|
687
src/msgs/el.po
687
src/msgs/el.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Permesu uzantojn sendi invitojn"}.
|
{"Allow users to send invites","Permesu uzantojn sendi invitojn"}.
|
||||||
{"Allow users to send private messages","Permesu uzantojn sendi privatajn mesaĝojn"}.
|
{"Allow users to send private messages","Permesu uzantojn sendi privatajn mesaĝojn"}.
|
||||||
{"Allow visitors to change nickname","Permesu al vizitantoj ŝanĝi siajn kaŝnomojn"}.
|
{"Allow visitors to change nickname","Permesu al vizitantoj ŝanĝi siajn kaŝnomojn"}.
|
||||||
|
{"Allow visitors to send private messages to","Permesu uzantojn sendi privatajn mesaĝojn al"}.
|
||||||
{"Allow visitors to send status text in presence updates","Permesu al vizitantoj sendi statmesaĝon en ĉeest-sciigoj"}.
|
{"Allow visitors to send status text in presence updates","Permesu al vizitantoj sendi statmesaĝon en ĉeest-sciigoj"}.
|
||||||
|
{"Allow visitors to send voice requests","Permesu uzantojn sendi voĉ-petojn"}.
|
||||||
{"All Users","Ĉiuj Uzantoj"}.
|
{"All Users","Ĉiuj Uzantoj"}.
|
||||||
{"Announcements","Anoncoj"}.
|
{"Announcements","Anoncoj"}.
|
||||||
{"anyone","iu ajn"}.
|
{"anyone","iu ajn"}.
|
||||||
@ -33,8 +35,10 @@
|
|||||||
{"Backup to File at ","Faru sekurkopion je "}.
|
{"Backup to File at ","Faru sekurkopion je "}.
|
||||||
{"Bad format","Malĝusta formo"}.
|
{"Bad format","Malĝusta formo"}.
|
||||||
{"Birthday","Naskiĝtago"}.
|
{"Birthday","Naskiĝtago"}.
|
||||||
|
{"CAPTCHA web page","CAPTCHA teksaĵ-paĝo"}.
|
||||||
{"Change Password","Ŝanĝu pasvorton"}.
|
{"Change Password","Ŝanĝu pasvorton"}.
|
||||||
{"Change User Password","Ŝanĝu pasvorton de uzanto"}.
|
{"Change User Password","Ŝanĝu pasvorton de uzanto"}.
|
||||||
|
{"Characters not allowed:","Karaktroj ne permesata:"}.
|
||||||
{"Chatroom configuration modified","Agordo de babilejo ŝanĝita"}.
|
{"Chatroom configuration modified","Agordo de babilejo ŝanĝita"}.
|
||||||
{"Chatroom is created","Babilejo kreita"}.
|
{"Chatroom is created","Babilejo kreita"}.
|
||||||
{"Chatroom is destroyed","Babilejo neniigita"}.
|
{"Chatroom is destroyed","Babilejo neniigita"}.
|
||||||
@ -69,9 +73,11 @@
|
|||||||
{"Description:","Priskribo:"}.
|
{"Description:","Priskribo:"}.
|
||||||
{"Disc only copy","Nur disk-kopio"}.
|
{"Disc only copy","Nur disk-kopio"}.
|
||||||
{"Displayed Groups:","Montrataj grupoj:"}.
|
{"Displayed Groups:","Montrataj grupoj:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","Ne donu vian pasvorton al iun ajn, eĉ ne al la administrantoj de la Ĵabber-servilo."}.
|
||||||
{"Dump Backup to Text File at ","Skribu sekurkopion en plata teksto al "}.
|
{"Dump Backup to Text File at ","Skribu sekurkopion en plata teksto al "}.
|
||||||
{"Dump to Text File","Skribu en plata tekst-dosiero"}.
|
{"Dump to Text File","Skribu en plata tekst-dosiero"}.
|
||||||
{"Edit Properties","Redaktu atributojn"}.
|
{"Edit Properties","Redaktu atributojn"}.
|
||||||
|
{"Either approve or decline the voice request.","Ĉu aprobu, aŭ malaprobu la voĉ-peton."}.
|
||||||
{"ejabberd IRC module","ejabberd IRC-modulo"}.
|
{"ejabberd IRC module","ejabberd IRC-modulo"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC-modulo"}.
|
{"ejabberd MUC module","ejabberd MUC-modulo"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Public-Abonada modulo"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Public-Abonada modulo"}.
|
||||||
@ -90,13 +96,14 @@
|
|||||||
{"Enter path to jabberd14 spool file","Enmetu vojon al jabberd14-uzantdosiero"}.
|
{"Enter path to jabberd14 spool file","Enmetu vojon al jabberd14-uzantdosiero"}.
|
||||||
{"Enter path to text file","Enmetu vojon al plata teksto"}.
|
{"Enter path to text file","Enmetu vojon al plata teksto"}.
|
||||||
{"Enter the text you see","Enmetu montrita teksto"}.
|
{"Enter the text you see","Enmetu montrita teksto"}.
|
||||||
{"Enter username and encodings you wish to use for connecting to IRC servers. Press 'Next' to get more fields to fill in. Press 'Complete' to save settings.","Enmetu uzantnomon kaj enkodigoj kiujn vi volas uzi por konektoj al IRC-serviloj. Elektu \"Sekvonto\" por ekhavi pliajn kampojn. Elektu \"Kompletigu\" por savi agordojn."}.
|
|
||||||
{"Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers","Enmetu uzantnomon,j enkodigojn, pordojn kaj pasvortojn kiujn vi volas uzi por konektoj al IRC-serviloj"}.
|
{"Enter username, encodings, ports and passwords you wish to use for connecting to IRC servers","Enmetu uzantnomon,j enkodigojn, pordojn kaj pasvortojn kiujn vi volas uzi por konektoj al IRC-serviloj"}.
|
||||||
{"Erlang Jabber Server","Erlang-a Jabber-Servilo"}.
|
{"Erlang Jabber Server","Erlang-a Jabber-Servilo"}.
|
||||||
{"Error","Eraro"}.
|
{"Error","Eraro"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Ekzemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"sekreto\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.iutestservilo.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Ekzemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"sekreto\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.iutestservilo.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Esceptu Ĵabber-identigilojn je CAPTCHA-defio"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksportu datumojn de ĉiuj uzantoj en servilo al PIEFXIS dosieroj (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksportu datumojn de ĉiuj uzantoj en servilo al PIEFXIS dosieroj (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksportu datumoj de uzantoj en gastigo al PIEFXIS dosieroj (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksportu datumoj de uzantoj en gastigo al PIEFXIS dosieroj (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Malsukcesis ekstrakti JID-on de via voĉ-pet-aprobo"}.
|
||||||
{"Family Name","Lasta Nomo"}.
|
{"Family Name","Lasta Nomo"}.
|
||||||
{"February","Februaro"}.
|
{"February","Februaro"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Kompletigu la formon por serĉi rekonata Jabber-uzanto"}.
|
{"Fill in fields to search for any matching Jabber User","Kompletigu la formon por serĉi rekonata Jabber-uzanto"}.
|
||||||
@ -110,6 +117,7 @@
|
|||||||
{"Get User Last Login Time","Montru tempon de lasta ensaluto"}.
|
{"Get User Last Login Time","Montru tempon de lasta ensaluto"}.
|
||||||
{"Get User Password","Montru pasvorton de uzanto"}.
|
{"Get User Password","Montru pasvorton de uzanto"}.
|
||||||
{"Get User Statistics","Montru statistikojn de uzanto"}.
|
{"Get User Statistics","Montru statistikojn de uzanto"}.
|
||||||
|
{"Grant voice to this person?","Koncedu voĉon al ĉi-persono?"}.
|
||||||
{"Group ","Grupo "}.
|
{"Group ","Grupo "}.
|
||||||
{"Groups","Grupoj"}.
|
{"Groups","Grupoj"}.
|
||||||
{"has been banned","estas forbarita"}.
|
{"has been banned","estas forbarita"}.
|
||||||
@ -119,6 +127,7 @@
|
|||||||
{"has been kicked","estas forpelita"}.
|
{"has been kicked","estas forpelita"}.
|
||||||
{" has set the subject to: "," ŝanĝis la temon al: "}.
|
{" has set the subject to: "," ŝanĝis la temon al: "}.
|
||||||
{"Host","Gastigo"}.
|
{"Host","Gastigo"}.
|
||||||
|
{"If you don't see the CAPTCHA image here, visit the web page.","Se vi ne vidas la CAPTCHA-imagon jene, vizitu la teksaĵ-paĝon."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Se vi volas specifi diversajn pordojn, pasvortojn, enkodigojn por IRC-serviloj, kompletigu la jenan liston kun la formo '{\"irc-servilo\", \"enkodigo\", porto, \"pasvorto\"}'. Se ne specifita, ĉi tiu servilo uzas la enkodigo \"~s\", porto ~p, malplena pasvorto."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Se vi volas specifi diversajn pordojn, pasvortojn, enkodigojn por IRC-serviloj, kompletigu la jenan liston kun la formo '{\"irc-servilo\", \"enkodigo\", porto, \"pasvorto\"}'. Se ne specifita, ĉi tiu servilo uzas la enkodigo \"~s\", porto ~p, malplena pasvorto."}.
|
||||||
{"Import Directory","Importu dosierujo"}.
|
{"Import Directory","Importu dosierujo"}.
|
||||||
{"Import File","Importu dosieron"}.
|
{"Import File","Importu dosieron"}.
|
||||||
@ -144,6 +153,7 @@
|
|||||||
{"It is not allowed to send private messages","Ne estas permesata sendi privatajn mesaĝojn"}.
|
{"It is not allowed to send private messages","Ne estas permesata sendi privatajn mesaĝojn"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","Malpermesas sendi mesaĝojn de tipo \"groupchat\""}.
|
{"It is not allowed to send private messages of type \"groupchat\"","Malpermesas sendi mesaĝojn de tipo \"groupchat\""}.
|
||||||
{"It is not allowed to send private messages to the conference","Nur partoprenantoj rajtas sendi privatajn mesaĝojn al la babilejo"}.
|
{"It is not allowed to send private messages to the conference","Nur partoprenantoj rajtas sendi privatajn mesaĝojn al la babilejo"}.
|
||||||
|
{"Jabber Account Registration","Ĵabber-konto registrado"}.
|
||||||
{"Jabber ID","Jabber ID"}.
|
{"Jabber ID","Jabber ID"}.
|
||||||
{"Jabber ID ~s is invalid","Jabber ID ~s estas nevalida"}.
|
{"Jabber ID ~s is invalid","Jabber ID ~s estas nevalida"}.
|
||||||
{"January","Januaro"}.
|
{"January","Januaro"}.
|
||||||
@ -163,7 +173,7 @@
|
|||||||
{"List of modules to start","Listo de moduloj por starti"}.
|
{"List of modules to start","Listo de moduloj por starti"}.
|
||||||
{"Low level update script","Bazanivela ĝisdatigo-skripto"}.
|
{"Low level update script","Bazanivela ĝisdatigo-skripto"}.
|
||||||
{"Make participants list public","Farigu partoprento-liston publika"}.
|
{"Make participants list public","Farigu partoprento-liston publika"}.
|
||||||
{"Make room captcha protected","Farigu babilejon protektata per aŭtomata Turingtesto"}.
|
{"Make room CAPTCHA protected","Farigu babilejon protektata per CAPTCHA"}.
|
||||||
{"Make room members-only","Farigu babilejon sole por membroj"}.
|
{"Make room members-only","Farigu babilejon sole por membroj"}.
|
||||||
{"Make room moderated","Farigu babilejon moderigata"}.
|
{"Make room moderated","Farigu babilejon moderigata"}.
|
||||||
{"Make room password protected","Farigu babilejon protektata per pasvorto"}.
|
{"Make room password protected","Farigu babilejon protektata per pasvorto"}.
|
||||||
@ -176,9 +186,11 @@
|
|||||||
{"May","Majo"}.
|
{"May","Majo"}.
|
||||||
{"Membership is required to enter this room","Membreco estas bezonata por eniri ĉi tiun babilejon"}.
|
{"Membership is required to enter this room","Membreco estas bezonata por eniri ĉi tiun babilejon"}.
|
||||||
{"Members:","Membroj:"}.
|
{"Members:","Membroj:"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Memoru vian pasvorton, aŭ skribu ĝin sur papero formetata je sekura loko. Je Ĵabber ne ekzistas aŭtomata metodo por reakiri vian pasvorton se vi forgesas ĝin."}.
|
||||||
{"Memory","Memoro"}.
|
{"Memory","Memoro"}.
|
||||||
{"Message body","Teksto de mesaĝo"}.
|
{"Message body","Teksto de mesaĝo"}.
|
||||||
{"Middle Name","Meza Nomo"}.
|
{"Middle Name","Meza Nomo"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Minimuma intervalo inter voĉ-petoj (je sekundoj)"}.
|
||||||
{"Moderator privileges required","Moderantaj rajtoj bezonata"}.
|
{"Moderator privileges required","Moderantaj rajtoj bezonata"}.
|
||||||
{"moderators only","moderantoj sole"}.
|
{"moderators only","moderantoj sole"}.
|
||||||
{"Modified modules","Ĝisdatigitaj moduloj"}.
|
{"Modified modules","Ĝisdatigitaj moduloj"}.
|
||||||
@ -189,9 +201,11 @@
|
|||||||
{"Name:","Nomo:"}.
|
{"Name:","Nomo:"}.
|
||||||
{"Name","Nomo"}.
|
{"Name","Nomo"}.
|
||||||
{"Never","Neniam"}.
|
{"Never","Neniam"}.
|
||||||
|
{"New Password:","Nova Pasvorto:"}.
|
||||||
{"Nickname","Kaŝnomo"}.
|
{"Nickname","Kaŝnomo"}.
|
||||||
{"Nickname Registration at ","Kaŝnomo-registrado je "}.
|
{"Nickname Registration at ","Kaŝnomo-registrado je "}.
|
||||||
{"Nickname ~s does not exist in the room","Kaŝnomo ~s ne ekzistas en la babilejo"}.
|
{"Nickname ~s does not exist in the room","Kaŝnomo ~s ne ekzistas en la babilejo"}.
|
||||||
|
{"nobody","neniu"}.
|
||||||
{"No body provided for announce message","Neniu teksto donita por anonc-mesaĝo"}.
|
{"No body provided for announce message","Neniu teksto donita por anonc-mesaĝo"}.
|
||||||
{"No Data","Neniu datumo"}.
|
{"No Data","Neniu datumo"}.
|
||||||
{"Node ID","Nodo ID"}.
|
{"Node ID","Nodo ID"}.
|
||||||
@ -213,12 +227,14 @@
|
|||||||
{"Offline Messages:","Liverontaj mesaĝoj"}.
|
{"Offline Messages:","Liverontaj mesaĝoj"}.
|
||||||
{"Offline Messages","Liverontaj mesaĝoj"}.
|
{"Offline Messages","Liverontaj mesaĝoj"}.
|
||||||
{"OK","Bone"}.
|
{"OK","Bone"}.
|
||||||
|
{"Old Password:","Malnova Pasvorto:"}.
|
||||||
{"Online","Konektata"}.
|
{"Online","Konektata"}.
|
||||||
{"Online Users:","Konektataj uzantoj:"}.
|
{"Online Users:","Konektataj uzantoj:"}.
|
||||||
{"Online Users","Konektataj Uzantoj"}.
|
{"Online Users","Konektataj Uzantoj"}.
|
||||||
{"Only deliver notifications to available users","Nur liveru sciigojn al konektataj uzantoj"}.
|
{"Only deliver notifications to available users","Nur liveru sciigojn al konektataj uzantoj"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Nur moderigantoj kaj partoprenantoj rajtas ŝanĝi la temon en ĉi tiu babilejo"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Nur moderigantoj kaj partoprenantoj rajtas ŝanĝi la temon en ĉi tiu babilejo"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Nur moderigantoj rajtas ŝanĝi la temon en ĉi tiu babilejo"}.
|
{"Only moderators are allowed to change the subject in this room","Nur moderigantoj rajtas ŝanĝi la temon en ĉi tiu babilejo"}.
|
||||||
|
{"Only moderators can approve voice requests","Nur moderigantoj povas aprobi voĉ-petojn"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Nur partoprenantoj rajtas sendi mesaĝojn al la babilejo"}.
|
{"Only occupants are allowed to send messages to the conference","Nur partoprenantoj rajtas sendi mesaĝojn al la babilejo"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Nur partoprenantoj rajtas sendi informmendojn al la babilejoj"}.
|
{"Only occupants are allowed to send queries to the conference","Nur partoprenantoj rajtas sendi informmendojn al la babilejoj"}.
|
||||||
{"Only service administrators are allowed to send service messages","Nur servo-administrantoj rajtas sendi serv-mesaĝojn"}.
|
{"Only service administrators are allowed to send service messages","Nur servo-administrantoj rajtas sendi serv-mesaĝojn"}.
|
||||||
@ -233,6 +249,7 @@
|
|||||||
{"Password ~b","Pasvorto ~b"}.
|
{"Password ~b","Pasvorto ~b"}.
|
||||||
{"Password:","Pasvorto:"}.
|
{"Password:","Pasvorto:"}.
|
||||||
{"Password","Pasvorto"}.
|
{"Password","Pasvorto"}.
|
||||||
|
{"Password Verification:","Pasvortkontrolo:"}.
|
||||||
{"Password Verification","Pasvortkontrolo"}.
|
{"Password Verification","Pasvortkontrolo"}.
|
||||||
{"Path to Dir","Vojo al dosierujo"}.
|
{"Path to Dir","Vojo al dosierujo"}.
|
||||||
{"Path to File","Voje de dosiero"}.
|
{"Path to File","Voje de dosiero"}.
|
||||||
@ -241,6 +258,7 @@
|
|||||||
{"Persist items to storage","Savu erojn en konservado"}.
|
{"Persist items to storage","Savu erojn en konservado"}.
|
||||||
{"Ping","Sondaĵo"}.
|
{"Ping","Sondaĵo"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Rimarku ke ĉi tiuj elektebloj nur sekurkopias la propran Mnesia-datumbazon. Se vi uzas la ODBC-modulon, vi ankaŭ devas sekurkopii tiujn SQL-datumbazoj aparte."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Rimarku ke ĉi tiuj elektebloj nur sekurkopias la propran Mnesia-datumbazon. Se vi uzas la ODBC-modulon, vi ankaŭ devas sekurkopii tiujn SQL-datumbazoj aparte."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Bonvolu atendi iomete antaŭ ol sendi plian voĉ-peton"}.
|
||||||
{"Pong","Resondaĵo"}.
|
{"Pong","Resondaĵo"}.
|
||||||
{"Port ~b","Pordo ~b"}.
|
{"Port ~b","Pordo ~b"}.
|
||||||
{"Port","Pordo"}.
|
{"Port","Pordo"}.
|
||||||
@ -256,8 +274,10 @@
|
|||||||
{"Raw","Kruda"}.
|
{"Raw","Kruda"}.
|
||||||
{"Really delete message of the day?","Ĉu vere forigi mesaĝon de la tago?"}.
|
{"Really delete message of the day?","Ĉu vere forigi mesaĝon de la tago?"}.
|
||||||
{"Recipient is not in the conference room","Ricevanto ne ĉeestas en la babilejo "}.
|
{"Recipient is not in the conference room","Ricevanto ne ĉeestas en la babilejo "}.
|
||||||
|
{"Register a Jabber account","Registru Ĵabber-konton"}.
|
||||||
{"Registered Users:","Registritaj uzantoj:"}.
|
{"Registered Users:","Registritaj uzantoj:"}.
|
||||||
{"Registered Users","Registritaj uzantoj"}.
|
{"Registered Users","Registritaj uzantoj"}.
|
||||||
|
{"Register","Registru"}.
|
||||||
{"Registration in mod_irc for ","Registraĵo en mod_irc de "}.
|
{"Registration in mod_irc for ","Registraĵo en mod_irc de "}.
|
||||||
{"Remote copy","Fora kopio"}.
|
{"Remote copy","Fora kopio"}.
|
||||||
{"Remove All Offline Messages","Forigu ĉiujn liverontajn mesaĝojn"}.
|
{"Remove All Offline Messages","Forigu ĉiujn liverontajn mesaĝojn"}.
|
||||||
@ -294,6 +314,7 @@
|
|||||||
{"Send announcement to all users","Sendu anoncon al ĉiu uzanto"}.
|
{"Send announcement to all users","Sendu anoncon al ĉiu uzanto"}.
|
||||||
{"September","Septembro"}.
|
{"September","Septembro"}.
|
||||||
{"Server ~b","Servilo ~b"}.
|
{"Server ~b","Servilo ~b"}.
|
||||||
|
{"Server:","Servilo:"}.
|
||||||
{"Set message of the day and send to online users","Enmetu mesaĝon de la tago kaj sendu al konektataj uzantoj"}.
|
{"Set message of the day and send to online users","Enmetu mesaĝon de la tago kaj sendu al konektataj uzantoj"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Enmetu mesaĝon de la tago je ĉiu gastigo kaj sendu al konektataj uzantoj"}.
|
{"Set message of the day on all hosts and send to online users","Enmetu mesaĝon de la tago je ĉiu gastigo kaj sendu al konektataj uzantoj"}.
|
||||||
{"Shared Roster Groups","Komuna Kontaktlist-grupo"}.
|
{"Shared Roster Groups","Komuna Kontaktlist-grupo"}.
|
||||||
@ -301,6 +322,7 @@
|
|||||||
{"Show Ordinary Table","Montru ordinaran tabelon"}.
|
{"Show Ordinary Table","Montru ordinaran tabelon"}.
|
||||||
{"Shut Down Service","Haltigu Servon"}.
|
{"Shut Down Service","Haltigu Servon"}.
|
||||||
{"~s invites you to the room ~s","~s invitas vin al la babilejo ~s"}.
|
{"~s invites you to the room ~s","~s invitas vin al la babilejo ~s"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Kelkaj Ĵabber-klientoj povas memori vian pasvorton je via komputilo. Nur uzu tiun eblon se vi fidas ke via komputilo estas sekura."}.
|
||||||
{"Specify the access model","Specifu atingo-modelon"}.
|
{"Specify the access model","Specifu atingo-modelon"}.
|
||||||
{"Specify the event message type","Specifu tipo de event-mesaĝo"}.
|
{"Specify the event message type","Specifu tipo de event-mesaĝo"}.
|
||||||
{"Specify the publisher model","Enmetu publikadan modelon"}.
|
{"Specify the publisher model","Enmetu publikadan modelon"}.
|
||||||
@ -325,9 +347,18 @@
|
|||||||
{"Sunday","Dimanĉo"}.
|
{"Sunday","Dimanĉo"}.
|
||||||
{"That nickname is already in use by another occupant","Tiu kaŝnomo jam estas uzata de alia partoprenanto"}.
|
{"That nickname is already in use by another occupant","Tiu kaŝnomo jam estas uzata de alia partoprenanto"}.
|
||||||
{"That nickname is registered by another person","Kaŝnomo estas registrita de alia persono"}.
|
{"That nickname is registered by another person","Kaŝnomo estas registrita de alia persono"}.
|
||||||
{"The captcha is valid.","La aŭtomata Turingtesto estas ĝusta"}.
|
{"The CAPTCHA is valid.","La CAPTCHA ĝustas"}.
|
||||||
|
{"The CAPTCHA verification has failed","La CAPTCHA-kontrolado malsukcesis"}.
|
||||||
{"The collections with which a node is affiliated","Aro kun kiu nodo estas filigita"}.
|
{"The collections with which a node is affiliated","Aro kun kiu nodo estas filigita"}.
|
||||||
{"the password is","la pasvorto estas"}.
|
{"the password is","la pasvorto estas"}.
|
||||||
|
{"The password is too weak","La pasvorto estas ne sufiĉe forta"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","La pasvorto de via Ĵabber-konto estas sukcese ŝanĝata."}.
|
||||||
|
{"There was an error changing the password: ","Estis eraro dum ŝanĝi de la pasvortro:"}.
|
||||||
|
{"There was an error creating the account: ","Estis eraro dum kreado de la konto:"}.
|
||||||
|
{"There was an error deleting the account: ","Estis eraro dum forigado de la konto:"}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Uskleco ne signifas: macbeth estas la sama ol MacBeth kaj Macbeth."}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Jena paĝo ebligas kreadon de Ĵabber-konto je ĉi-Ĵabber-servilo. Via JID (Ĵabber-IDentigilo) estos ĉi-tiel: uzantnomo@servilo. Bonvolu legu bone la instrukciojn por korekta enmetigo de la kampoj. "}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Jena pagxo ebligas malregistri Jxabber-konton je ĉi-servilo."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Ĉi tiu partoprenanta estas forpelata de la babilejo pro sendado de erar-mesaĝo"}.
|
{"This participant is kicked from the room because he sent an error message","Ĉi tiu partoprenanta estas forpelata de la babilejo pro sendado de erar-mesaĝo"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-mesaĝo al alia partoprenanto"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-mesaĝo al alia partoprenanto"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-ĉeesto"}.
|
{"This participant is kicked from the room because he sent an error presence","Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-ĉeesto"}.
|
||||||
@ -336,6 +367,7 @@
|
|||||||
{"Time delay","Prokrasto"}.
|
{"Time delay","Prokrasto"}.
|
||||||
{"Time","Tempo"}.
|
{"Time","Tempo"}.
|
||||||
{"To","Ĝis"}.
|
{"To","Ĝis"}.
|
||||||
|
{"Too many CAPTCHA requests","Tro multaj CAPTCHA-petoj"}.
|
||||||
{"To ~s","Al ~s"}.
|
{"To ~s","Al ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Trafikrapida limigo superita"}.
|
{"Traffic rate limit is exceeded","Trafikrapida limigo superita"}.
|
||||||
{"Transactions Aborted:","Transakcioj nuligitaj"}.
|
{"Transactions Aborted:","Transakcioj nuligitaj"}.
|
||||||
@ -343,8 +375,10 @@
|
|||||||
{"Transactions Logged:","Transakcioj protokolitaj"}.
|
{"Transactions Logged:","Transakcioj protokolitaj"}.
|
||||||
{"Transactions Restarted:","Transakcioj restartitaj"}.
|
{"Transactions Restarted:","Transakcioj restartitaj"}.
|
||||||
{"Tuesday","Mardo"}.
|
{"Tuesday","Mardo"}.
|
||||||
{"Unable to generate a captcha","Ne eblis krei aŭtomatas turingteston"}.
|
{"Unable to generate a CAPTCHA","Ne eblis krei CAPTCHA"}.
|
||||||
{"Unauthorized","Nepermesita"}.
|
{"Unauthorized","Nepermesita"}.
|
||||||
|
{"Unregister a Jabber account","Malregistru Ĵabber-konton"}.
|
||||||
|
{"Unregister","Malregistru"}.
|
||||||
{"Update ","Ĝisdatigu "}.
|
{"Update ","Ĝisdatigu "}.
|
||||||
{"Update","Ĝisdatigu"}.
|
{"Update","Ĝisdatigu"}.
|
||||||
{"Update message of the day (don't send)","Ŝanĝu mesaĝon de la tago (ne sendu)"}.
|
{"Update message of the day (don't send)","Ŝanĝu mesaĝon de la tago (ne sendu)"}.
|
||||||
@ -353,7 +387,9 @@
|
|||||||
{"Update script","Ĝisdatigo-skripto"}.
|
{"Update script","Ĝisdatigo-skripto"}.
|
||||||
{"Uptime:","Daŭro de funkciado"}.
|
{"Uptime:","Daŭro de funkciado"}.
|
||||||
{"Use of STARTTLS required","Uzo de STARTTLS bezonata"}.
|
{"Use of STARTTLS required","Uzo de STARTTLS bezonata"}.
|
||||||
|
{"User JID","Uzant-JID"}.
|
||||||
{"User Management","Uzanto-administrado"}.
|
{"User Management","Uzanto-administrado"}.
|
||||||
|
{"Username:","Uzantnomo"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Ne estas permesata al uzantoj registri tiel rapide"}.
|
{"Users are not allowed to register accounts so quickly","Ne estas permesata al uzantoj registri tiel rapide"}.
|
||||||
{"Users Last Activity","Lasta aktiveco de uzanto"}.
|
{"Users Last Activity","Lasta aktiveco de uzanto"}.
|
||||||
{"Users","Uzantoj"}.
|
{"Users","Uzantoj"}.
|
||||||
@ -364,13 +400,21 @@
|
|||||||
{"Virtual Hosts","Virtual-gastigoj"}.
|
{"Virtual Hosts","Virtual-gastigoj"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Ne estas permesata al vizitantoj ŝanĝi siajn kaŝnomojn en ĉi tiu ĉambro"}.
|
{"Visitors are not allowed to change their nicknames in this room","Ne estas permesata al vizitantoj ŝanĝi siajn kaŝnomojn en ĉi tiu ĉambro"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Vizitantoj ne rajtas sendi mesaĝojn al ĉiuj partoprenantoj"}.
|
{"Visitors are not allowed to send messages to all occupants","Vizitantoj ne rajtas sendi mesaĝojn al ĉiuj partoprenantoj"}.
|
||||||
|
{"Voice requests are disabled in this conference","Voĉ-petoj estas malebligita en jena babilejo"}.
|
||||||
|
{"Voice request","Voĉ-peto"}.
|
||||||
{"Wednesday","Merkredo"}.
|
{"Wednesday","Merkredo"}.
|
||||||
{"When to send the last published item","Kiam sendi la laste publicitan eron"}.
|
{"When to send the last published item","Kiam sendi la laste publicitan eron"}.
|
||||||
{"Whether to allow subscriptions","Ĉu permesi aboni"}.
|
{"Whether to allow subscriptions","Ĉu permesi aboni"}.
|
||||||
|
{"You can later change your password using a Jabber client.","Poste vi povas ŝanĝi vian pasvorton per Ĵabber-kliento."}.
|
||||||
{"You have been banned from this room","Vi estas malpermesata en ĉi tiu babilejo"}.
|
{"You have been banned from this room","Vi estas malpermesata en ĉi tiu babilejo"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Vi devas kompletigi la \"Kaŝnomo\" kampon"}.
|
{"You must fill in field \"Nickname\" in the form","Vi devas kompletigi la \"Kaŝnomo\" kampon"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","Vi bezonas klienton subtenante x:data-funkcio kaj CAPTCHA por registri kaŝnomon"}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","Vi bezonas klienton subtenante x:data-funkcio por registri kaŝnomon"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","Vi bezonas klienton kun x:data-funkcio por agordi mod_irc"}.
|
{"You need an x:data capable client to configure mod_irc settings","Vi bezonas klienton kun x:data-funkcio por agordi mod_irc"}.
|
||||||
{"You need an x:data capable client to configure room","Vi bezonas klienton kun x:data-funkcio por agordi la babilejon"}.
|
{"You need an x:data capable client to configure room","Vi bezonas klienton kun x:data-funkcio por agordi la babilejon"}.
|
||||||
{"You need an x:data capable client to search","Vi bezonas klienton kun x:data-funkcio por serĉado"}.
|
{"You need an x:data capable client to search","Vi bezonas klienton kun x:data-funkcio por serĉado"}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","Via aktiva privatec-listo malpermesas enkursigi ĉi-tiun pakaĵon"}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Mesaĝo-atendovico de la senkonekta kontakto estas plena. La mesaĝo estas forĵetita"}.
|
{"Your contact offline message queue is full. The message has been discarded.","Mesaĝo-atendovico de la senkonekta kontakto estas plena. La mesaĝo estas forĵetita"}.
|
||||||
|
{"Your Jabber account was successfully created.","Via Ĵabber-konto estis sukcese kreata."}.
|
||||||
|
{"Your Jabber account was successfully deleted.","Via Ĵabber-konto estas sukcese forigita."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Viaj mesaĝoj al ~s estas blokata. Por malbloki ilin, iru al ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Viaj mesaĝoj al ~s estas blokata. Por malbloki ilin, iru al ~s"}.
|
||||||
|
764
src/msgs/eo.po
764
src/msgs/eo.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Permitir a los usuarios enviar invitaciones"}.
|
{"Allow users to send invites","Permitir a los usuarios enviar invitaciones"}.
|
||||||
{"Allow users to send private messages","Permitir a los usuarios enviar mensajes privados"}.
|
{"Allow users to send private messages","Permitir a los usuarios enviar mensajes privados"}.
|
||||||
{"Allow visitors to change nickname","Permitir a los visitantes cambiarse el apodo"}.
|
{"Allow visitors to change nickname","Permitir a los visitantes cambiarse el apodo"}.
|
||||||
|
{"Allow visitors to send private messages to","Permitir a los visitantes enviar mensajes privados a"}.
|
||||||
{"Allow visitors to send status text in presence updates","Permitir a los visitantes enviar texto de estado en las actualizaciones de presencia"}.
|
{"Allow visitors to send status text in presence updates","Permitir a los visitantes enviar texto de estado en las actualizaciones de presencia"}.
|
||||||
|
{"Allow visitors to send voice requests","Permitir a los visitantes enviar peticiones de voz"}.
|
||||||
{"All Users","Todos los usuarios"}.
|
{"All Users","Todos los usuarios"}.
|
||||||
{"Announcements","Anuncios"}.
|
{"Announcements","Anuncios"}.
|
||||||
{"anyone","cualquiera"}.
|
{"anyone","cualquiera"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Exporta copia de seguridad a fichero de texto en "}.
|
{"Dump Backup to Text File at ","Exporta copia de seguridad a fichero de texto en "}.
|
||||||
{"Dump to Text File","Exportar a fichero de texto"}.
|
{"Dump to Text File","Exportar a fichero de texto"}.
|
||||||
{"Edit Properties","Editar propiedades"}.
|
{"Edit Properties","Editar propiedades"}.
|
||||||
|
{"Either approve or decline the voice request.","Aprueba o rechaza la petición de voz."}.
|
||||||
{"ejabberd IRC module","Módulo de IRC para ejabberd"}.
|
{"ejabberd IRC module","Módulo de IRC para ejabberd"}.
|
||||||
{"ejabberd MUC module","Módulo de MUC para ejabberd"}.
|
{"ejabberd MUC module","Módulo de MUC para ejabberd"}.
|
||||||
{"ejabberd Publish-Subscribe module","Módulo de Publicar-Subscribir de ejabberd"}.
|
{"ejabberd Publish-Subscribe module","Módulo de Publicar-Subscribir de ejabberd"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Servidor Jabber en Erlang"}.
|
{"Erlang Jabber Server","Servidor Jabber en Erlang"}.
|
||||||
{"Error","Error"}.
|
{"Error","Error"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Ejemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Ejemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Excluir Jabber IDs de las pruebas de CAPTCHA"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar datos de todos los usuarios del servidor a ficheros PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar datos de todos los usuarios del servidor a ficheros PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar datos de los usuarios de un dominio a ficheros PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar datos de los usuarios de un dominio a ficheros PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Fallo al extraer el Jabber ID de tu aprobación de petición de voz"}.
|
||||||
{"Family Name","Apellido"}.
|
{"Family Name","Apellido"}.
|
||||||
{"February","febrero"}.
|
{"February","febrero"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Rellena campos para buscar usuarios Jabber que concuerden"}.
|
{"Fill in fields to search for any matching Jabber User","Rellena campos para buscar usuarios Jabber que concuerden"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Ver fecha de la última conexión de usuario"}.
|
{"Get User Last Login Time","Ver fecha de la última conexión de usuario"}.
|
||||||
{"Get User Password","Ver contraseña de usuario"}.
|
{"Get User Password","Ver contraseña de usuario"}.
|
||||||
{"Get User Statistics","Ver estadísticas de usuario"}.
|
{"Get User Statistics","Ver estadísticas de usuario"}.
|
||||||
|
{"Grant voice to this person?","¿Conceder voz a esta persona?"}.
|
||||||
{"Group ","Grupo "}.
|
{"Group ","Grupo "}.
|
||||||
{"Groups","Grupos"}.
|
{"Groups","Grupos"}.
|
||||||
{"has been banned","ha sido bloqueado"}.
|
{"has been banned","ha sido bloqueado"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Lista de módulos a iniciar"}.
|
{"List of modules to start","Lista de módulos a iniciar"}.
|
||||||
{"Low level update script","Script de actualización a bajo nivel"}.
|
{"Low level update script","Script de actualización a bajo nivel"}.
|
||||||
{"Make participants list public","La lista de participantes es pública"}.
|
{"Make participants list public","La lista de participantes es pública"}.
|
||||||
{"Make room captcha protected","Proteger la sala con captcha"}.
|
{"Make room CAPTCHA protected","Proteger la sala con CAPTCHA"}.
|
||||||
{"Make room members-only","Sala sólo para miembros"}.
|
{"Make room members-only","Sala sólo para miembros"}.
|
||||||
{"Make room moderated","Sala moderada"}.
|
{"Make room moderated","Sala moderada"}.
|
||||||
{"Make room password protected","Proteger la sala con contraseña"}.
|
{"Make room password protected","Proteger la sala con contraseña"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Memoria"}.
|
{"Memory","Memoria"}.
|
||||||
{"Message body","Cuerpo del mensaje"}.
|
{"Message body","Cuerpo del mensaje"}.
|
||||||
{"Middle Name","Segundo nombre"}.
|
{"Middle Name","Segundo nombre"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Intervalo mínimo entre peticiones de voz (en segundos)"}.
|
||||||
{"Moderator privileges required","Se necesita privilegios de moderador"}.
|
{"Moderator privileges required","Se necesita privilegios de moderador"}.
|
||||||
{"moderators only","solo moderadores"}.
|
{"moderators only","solo moderadores"}.
|
||||||
{"Modified modules","Módulos modificados"}.
|
{"Modified modules","Módulos modificados"}.
|
||||||
@ -199,6 +206,7 @@
|
|||||||
{"Nickname","Apodo"}.
|
{"Nickname","Apodo"}.
|
||||||
{"Nickname Registration at ","Registro del apodo en "}.
|
{"Nickname Registration at ","Registro del apodo en "}.
|
||||||
{"Nickname ~s does not exist in the room","El apodo ~s no existe en la sala"}.
|
{"Nickname ~s does not exist in the room","El apodo ~s no existe en la sala"}.
|
||||||
|
{"nobody","nadie"}.
|
||||||
{"No body provided for announce message","No se ha proporcionado cuerpo de mensaje para el anuncio"}.
|
{"No body provided for announce message","No se ha proporcionado cuerpo de mensaje para el anuncio"}.
|
||||||
{"No Data","Sin datos"}.
|
{"No Data","Sin datos"}.
|
||||||
{"Node ID","Nodo ID"}.
|
{"Node ID","Nodo ID"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Solo enviar notificaciones a los usuarios disponibles"}.
|
{"Only deliver notifications to available users","Solo enviar notificaciones a los usuarios disponibles"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Solo los moderadores pueden cambiar el asunto de esta sala"}.
|
{"Only moderators are allowed to change the subject in this room","Solo los moderadores pueden cambiar el asunto de esta sala"}.
|
||||||
|
{"Only moderators can approve voice requests","Solo los moderadores pueden aprobar peticiones de voz"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Solo los ocupantes pueden enviar mensajes a la sala"}.
|
{"Only occupants are allowed to send messages to the conference","Solo los ocupantes pueden enviar mensajes a la sala"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Solo los ocupantes pueden enviar solicitudes a la sala"}.
|
{"Only occupants are allowed to send queries to the conference","Solo los ocupantes pueden enviar solicitudes a la sala"}.
|
||||||
{"Only service administrators are allowed to send service messages","Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}.
|
{"Only service administrators are allowed to send service messages","Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Persistir elementos al almacenar"}.
|
{"Persist items to storage","Persistir elementos al almacenar"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Ten en cuenta que estas opciones solo harán copia de seguridad de la base de datos Mnesia embebida. Si estás usando ODBC tendrás que hacer también copia de seguridad de tu base de datos SQL."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Ten en cuenta que estas opciones solo harán copia de seguridad de la base de datos Mnesia embebida. Si estás usando ODBC tendrás que hacer también copia de seguridad de tu base de datos SQL."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Por favor, espera un poco antes de enviar otra petición de voz"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Puerto ~b"}.
|
{"Port ~b","Puerto ~b"}.
|
||||||
{"Port","Puerto"}.
|
{"Port","Puerto"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","domingo"}.
|
{"Sunday","domingo"}.
|
||||||
{"That nickname is already in use by another occupant","Ese apodo ya está siendo usado por otro ocupante"}.
|
{"That nickname is already in use by another occupant","Ese apodo ya está siendo usado por otro ocupante"}.
|
||||||
{"That nickname is registered by another person","El apodo ya está registrado por otra persona"}.
|
{"That nickname is registered by another person","El apodo ya está registrado por otra persona"}.
|
||||||
{"The captcha is valid.","El captcha es válido."}.
|
{"The CAPTCHA is valid.","El CAPTCHA es válido."}.
|
||||||
{"The CAPTCHA verification has failed","La verificación de CAPTCHA ha fallado"}.
|
{"The CAPTCHA verification has failed","La verificación de CAPTCHA ha fallado"}.
|
||||||
{"The collections with which a node is affiliated","Las colecciones a las que un nodo está afiliado"}.
|
{"The collections with which a node is affiliated","Las colecciones a las que un nodo está afiliado"}.
|
||||||
{"the password is","la contraseña es"}.
|
{"the password is","la contraseña es"}.
|
||||||
@ -357,6 +367,7 @@
|
|||||||
{"Thursday","jueves"}.
|
{"Thursday","jueves"}.
|
||||||
{"Time delay","Retraso temporal"}.
|
{"Time delay","Retraso temporal"}.
|
||||||
{"Time","Fecha"}.
|
{"Time","Fecha"}.
|
||||||
|
{"Too many CAPTCHA requests","Demasiadas peticiones de CAPTCHA"}.
|
||||||
{"To","Para"}.
|
{"To","Para"}.
|
||||||
{"To ~s","A ~s"}.
|
{"To ~s","A ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Se ha exedido el límite de tráfico"}.
|
{"Traffic rate limit is exceeded","Se ha exedido el límite de tráfico"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","Transacciones registradas:"}.
|
{"Transactions Logged:","Transacciones registradas:"}.
|
||||||
{"Transactions Restarted:","Transacciones reiniciadas:"}.
|
{"Transactions Restarted:","Transacciones reiniciadas:"}.
|
||||||
{"Tuesday","martes"}.
|
{"Tuesday","martes"}.
|
||||||
{"Unable to generate a captcha","No se pudo generar un captcha."}.
|
|
||||||
{"Unable to generate a CAPTCHA","No se pudo generar un CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","No se pudo generar un CAPTCHA"}.
|
||||||
{"Unauthorized","No autorizado"}.
|
{"Unauthorized","No autorizado"}.
|
||||||
{"Unregister a Jabber account","Borrar una cuenta Jabber"}.
|
{"Unregister a Jabber account","Borrar una cuenta Jabber"}.
|
||||||
@ -378,6 +388,7 @@
|
|||||||
{"Update script","Script de actualización"}.
|
{"Update script","Script de actualización"}.
|
||||||
{"Uptime:","Tiempo desde el inicio:"}.
|
{"Uptime:","Tiempo desde el inicio:"}.
|
||||||
{"Use of STARTTLS required","Es obligatorio usar STARTTLS"}.
|
{"Use of STARTTLS required","Es obligatorio usar STARTTLS"}.
|
||||||
|
{"User JID","Jabber ID del usuario"}.
|
||||||
{"User Management","Administración de usuarios"}.
|
{"User Management","Administración de usuarios"}.
|
||||||
{"Username:","Nombre de usuario:"}.
|
{"Username:","Nombre de usuario:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Los usuarios no tienen permitido crear cuentas con tanta rapidez"}.
|
{"Users are not allowed to register accounts so quickly","Los usuarios no tienen permitido crear cuentas con tanta rapidez"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","Dominios Virtuales"}.
|
{"Virtual Hosts","Dominios Virtuales"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Los visitantes no tienen permitido cambiar sus apodos en esta sala"}.
|
{"Visitors are not allowed to change their nicknames in this room","Los visitantes no tienen permitido cambiar sus apodos en esta sala"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Los visitantes no pueden enviar mensajes a todos los ocupantes"}.
|
{"Visitors are not allowed to send messages to all occupants","Los visitantes no pueden enviar mensajes a todos los ocupantes"}.
|
||||||
|
{"Voice request","Petición de voz"}.
|
||||||
|
{"Voice requests are disabled in this conference","Las peticiones de voz están desactivadas en esta sala"}.
|
||||||
{"Wednesday","miércoles"}.
|
{"Wednesday","miércoles"}.
|
||||||
{"When to send the last published item","Cuando enviar el último elemento publicado"}.
|
{"When to send the last published item","Cuando enviar el último elemento publicado"}.
|
||||||
{"Whether to allow subscriptions","Permitir subscripciones"}.
|
{"Whether to allow subscriptions","Permitir subscripciones"}.
|
||||||
|
690
src/msgs/es.po
690
src/msgs/es.po
File diff suppressed because it is too large
Load Diff
@ -168,7 +168,7 @@
|
|||||||
{"List of modules to start","Liste des modules à démarrer"}.
|
{"List of modules to start","Liste des modules à démarrer"}.
|
||||||
{"Low level update script","Script de mise à jour de bas-niveau"}.
|
{"Low level update script","Script de mise à jour de bas-niveau"}.
|
||||||
{"Make participants list public","Rendre la liste des participants publique"}.
|
{"Make participants list public","Rendre la liste des participants publique"}.
|
||||||
{"Make room captcha protected","Protéger le salon par un captcha"}.
|
{"Make room CAPTCHA protected","Protéger le salon par un CAPTCHA"}.
|
||||||
{"Make room members-only","Réserver le salon aux membres uniquement"}.
|
{"Make room members-only","Réserver le salon aux membres uniquement"}.
|
||||||
{"Make room moderated","Rendre le salon modéré"}.
|
{"Make room moderated","Rendre le salon modéré"}.
|
||||||
{"Make room password protected","Protéger le salon par mot de passe"}.
|
{"Make room password protected","Protéger le salon par mot de passe"}.
|
||||||
@ -338,7 +338,7 @@
|
|||||||
{"Sunday","Dimanche"}.
|
{"Sunday","Dimanche"}.
|
||||||
{"That nickname is already in use by another occupant","Le pseudo est déjà utilisé par un autre occupant"}.
|
{"That nickname is already in use by another occupant","Le pseudo est déjà utilisé par un autre occupant"}.
|
||||||
{"That nickname is registered by another person","Le pseudo est enregistré par une autre personne"}.
|
{"That nickname is registered by another person","Le pseudo est enregistré par une autre personne"}.
|
||||||
{"The captcha is valid.","Le captcha est valide"}.
|
{"The CAPTCHA is valid.","Le CAPTCHA est valide"}.
|
||||||
{"The CAPTCHA verification has failed","La vérification du CAPTCHA a échoué"}.
|
{"The CAPTCHA verification has failed","La vérification du CAPTCHA a échoué"}.
|
||||||
{"The collections with which a node is affiliated","Les collections avec lesquelle un nœud est affilié"}.
|
{"The collections with which a node is affiliated","Les collections avec lesquelle un nœud est affilié"}.
|
||||||
{"the password is","le mot de passe est"}.
|
{"the password is","le mot de passe est"}.
|
||||||
@ -365,7 +365,6 @@
|
|||||||
{"Transactions Logged:","Transactions journalisées :"}.
|
{"Transactions Logged:","Transactions journalisées :"}.
|
||||||
{"Transactions Restarted:","Transactions redémarrées :"}.
|
{"Transactions Restarted:","Transactions redémarrées :"}.
|
||||||
{"Tuesday","Mardi"}.
|
{"Tuesday","Mardi"}.
|
||||||
{"Unable to generate a captcha","Impossible de générer le captcha"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Impossible de générer le CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","Impossible de générer le CAPTCHA"}.
|
||||||
{"Unauthorized","Non autorisé"}.
|
{"Unauthorized","Non autorisé"}.
|
||||||
{"Unregister a Jabber account","Effacer un compte Jabber"}.
|
{"Unregister a Jabber account","Effacer un compte Jabber"}.
|
||||||
|
688
src/msgs/fr.po
688
src/msgs/fr.po
File diff suppressed because it is too large
Load Diff
@ -159,7 +159,7 @@
|
|||||||
{"List of modules to start","Lista de módulos a iniciar"}.
|
{"List of modules to start","Lista de módulos a iniciar"}.
|
||||||
{"Low level update script","Script de actualización a baixo nivel"}.
|
{"Low level update script","Script de actualización a baixo nivel"}.
|
||||||
{"Make participants list public","A lista de participantes é pública"}.
|
{"Make participants list public","A lista de participantes é pública"}.
|
||||||
{"Make room captcha protected","Protexer a sala con captcha"}.
|
{"Make room CAPTCHA protected","Protexer a sala con CAPTCHA"}.
|
||||||
{"Make room members-only","Sala só para membros"}.
|
{"Make room members-only","Sala só para membros"}.
|
||||||
{"Make room moderated","Facer sala moderada"}.
|
{"Make room moderated","Facer sala moderada"}.
|
||||||
{"Make room password protected","Protexer a sala con contrasinal"}.
|
{"Make room password protected","Protexer a sala con contrasinal"}.
|
||||||
@ -319,7 +319,7 @@
|
|||||||
{"Sunday","Domingo"}.
|
{"Sunday","Domingo"}.
|
||||||
{"That nickname is already in use by another occupant","Ese alcume que xa está en uso por outro ocupante"}.
|
{"That nickname is already in use by another occupant","Ese alcume que xa está en uso por outro ocupante"}.
|
||||||
{"That nickname is registered by another person","O alcume xa está rexistrado por outra persoa"}.
|
{"That nickname is registered by another person","O alcume xa está rexistrado por outra persoa"}.
|
||||||
{"The captcha is valid.","O Captcha é válido."}.
|
{"The CAPTCHA is valid.","O CAPTCHA é válido."}.
|
||||||
{"The collections with which a node is affiliated","As coleccións coas que un nodo está afiliado"}.
|
{"The collections with which a node is affiliated","As coleccións coas que un nodo está afiliado"}.
|
||||||
{"the password is","a contrasinal é"}.
|
{"the password is","a contrasinal é"}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Este participante é expulsado da sala, xa que enviou unha mensaxe de erro"}.
|
{"This participant is kicked from the room because he sent an error message","Este participante é expulsado da sala, xa que enviou unha mensaxe de erro"}.
|
||||||
@ -337,7 +337,6 @@
|
|||||||
{"Transactions Logged:","Transaccións rexistradas:"}.
|
{"Transactions Logged:","Transaccións rexistradas:"}.
|
||||||
{"Transactions Restarted:","Transaccións reiniciadas:"}.
|
{"Transactions Restarted:","Transaccións reiniciadas:"}.
|
||||||
{"Tuesday","Martes"}.
|
{"Tuesday","Martes"}.
|
||||||
{"Unable to generate a captcha","Non se pode xerar un Captcha"}.
|
|
||||||
{"Unauthorized","Non autorizado"}.
|
{"Unauthorized","Non autorizado"}.
|
||||||
{"Update ","Actualizar"}.
|
{"Update ","Actualizar"}.
|
||||||
{"Update","Actualizar"}.
|
{"Update","Actualizar"}.
|
||||||
|
692
src/msgs/gl.po
692
src/msgs/gl.po
File diff suppressed because it is too large
Load Diff
@ -168,7 +168,7 @@
|
|||||||
{"List of modules to start","Daftar modul untuk memulai"}.
|
{"List of modules to start","Daftar modul untuk memulai"}.
|
||||||
{"Low level update script","Perbaruan naskah tingkat rendah"}.
|
{"Low level update script","Perbaruan naskah tingkat rendah"}.
|
||||||
{"Make participants list public","Buat daftar participant diketahui oleh public"}.
|
{"Make participants list public","Buat daftar participant diketahui oleh public"}.
|
||||||
{"Make room captcha protected","Buat ruangan dilindungi dengan chapta"}.
|
{"Make room CAPTCHA protected","Buat ruangan dilindungi dengan CAPTCHA"}.
|
||||||
{"Make room members-only","Buat ruangan hanya untuk member saja"}.
|
{"Make room members-only","Buat ruangan hanya untuk member saja"}.
|
||||||
{"Make room moderated","Buat ruangan hanya untuk moderator saja"}.
|
{"Make room moderated","Buat ruangan hanya untuk moderator saja"}.
|
||||||
{"Make room password protected","Buat ruangan yang dilindungi dengan kata sandi"}.
|
{"Make room password protected","Buat ruangan yang dilindungi dengan kata sandi"}.
|
||||||
@ -338,7 +338,7 @@
|
|||||||
{"Sunday","Minggu"}.
|
{"Sunday","Minggu"}.
|
||||||
{"That nickname is already in use by another occupant","Julukan itu sudah digunakan oleh penghuni lain"}.
|
{"That nickname is already in use by another occupant","Julukan itu sudah digunakan oleh penghuni lain"}.
|
||||||
{"That nickname is registered by another person","Julukan tersebut telah didaftarkan oleh orang lain"}.
|
{"That nickname is registered by another person","Julukan tersebut telah didaftarkan oleh orang lain"}.
|
||||||
{"The captcha is valid.","Captcha ini benar."}.
|
{"The CAPTCHA is valid.","Captcha ini benar."}.
|
||||||
{"The CAPTCHA verification has failed","Verifikasi CAPTCHA telah gagal"}.
|
{"The CAPTCHA verification has failed","Verifikasi CAPTCHA telah gagal"}.
|
||||||
{"The collections with which a node is affiliated","Koleksi dengan yang berafiliasi dengan sebuah node"}.
|
{"The collections with which a node is affiliated","Koleksi dengan yang berafiliasi dengan sebuah node"}.
|
||||||
{"the password is","kata sandi yaitu:"}.
|
{"the password is","kata sandi yaitu:"}.
|
||||||
@ -365,7 +365,6 @@
|
|||||||
{"Transactions Logged:","Transaksi yang ditempuh:"}.
|
{"Transactions Logged:","Transaksi yang ditempuh:"}.
|
||||||
{"Transactions Restarted:","Transaksi yang dijalankan ulang:"}.
|
{"Transactions Restarted:","Transaksi yang dijalankan ulang:"}.
|
||||||
{"Tuesday","Selasa"}.
|
{"Tuesday","Selasa"}.
|
||||||
{"Unable to generate a captcha","Tidak dapat menghasilkan captcha"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Tidak dapat menghasilkan CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","Tidak dapat menghasilkan CAPTCHA"}.
|
||||||
{"Unauthorized","Ditolak"}.
|
{"Unauthorized","Ditolak"}.
|
||||||
{"Unregister a Jabber account","Nonaktifkan akun jabber"}.
|
{"Unregister a Jabber account","Nonaktifkan akun jabber"}.
|
||||||
|
684
src/msgs/id.po
684
src/msgs/id.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Consentire agli utenti l'invio di inviti"}.
|
{"Allow users to send invites","Consentire agli utenti l'invio di inviti"}.
|
||||||
{"Allow users to send private messages","Consentire agli utenti l'invio di messaggi privati"}.
|
{"Allow users to send private messages","Consentire agli utenti l'invio di messaggi privati"}.
|
||||||
{"Allow visitors to change nickname","Consentire ai visitatori di cambiare il nickname"}.
|
{"Allow visitors to change nickname","Consentire ai visitatori di cambiare il nickname"}.
|
||||||
|
{"Allow visitors to send private messages to","Consentire agli ospiti l'invio di messaggi privati a"}.
|
||||||
{"Allow visitors to send status text in presence updates","Consentire ai visitatori l'invio di testo sullo stato in aggiornamenti sulla presenza"}.
|
{"Allow visitors to send status text in presence updates","Consentire ai visitatori l'invio di testo sullo stato in aggiornamenti sulla presenza"}.
|
||||||
|
{"Allow visitors to send voice requests","Consentire agli ospiti l'invio di richieste di parola"}.
|
||||||
{"All Users","Tutti gli utenti"}.
|
{"All Users","Tutti gli utenti"}.
|
||||||
{"Announcements","Annunci"}.
|
{"Announcements","Annunci"}.
|
||||||
{"anyone","tutti"}.
|
{"anyone","tutti"}.
|
||||||
@ -33,8 +35,10 @@
|
|||||||
{"Backup to File at ","Salvataggio sul file "}.
|
{"Backup to File at ","Salvataggio sul file "}.
|
||||||
{"Bad format","Formato non valido"}.
|
{"Bad format","Formato non valido"}.
|
||||||
{"Birthday","Compleanno"}.
|
{"Birthday","Compleanno"}.
|
||||||
|
{"CAPTCHA web page","Pagina web CAPTCHA"}.
|
||||||
{"Change Password","Modificare la password"}.
|
{"Change Password","Modificare la password"}.
|
||||||
{"Change User Password","Cambiare la password dell'utente"}.
|
{"Change User Password","Cambiare la password dell'utente"}.
|
||||||
|
{"Characters not allowed:","Caratteri non consentiti:"}.
|
||||||
{"Chatroom configuration modified","Configurazione della stanza modificata"}.
|
{"Chatroom configuration modified","Configurazione della stanza modificata"}.
|
||||||
{"Chatroom is created","La stanza è creata"}.
|
{"Chatroom is created","La stanza è creata"}.
|
||||||
{"Chatroom is destroyed","La stanza è eliminata"}.
|
{"Chatroom is destroyed","La stanza è eliminata"}.
|
||||||
@ -69,9 +73,11 @@
|
|||||||
{"Description:","Descrizione:"}.
|
{"Description:","Descrizione:"}.
|
||||||
{"Disc only copy","Copia su disco soltanto"}.
|
{"Disc only copy","Copia su disco soltanto"}.
|
||||||
{"Displayed Groups:","Gruppi visualizzati:"}.
|
{"Displayed Groups:","Gruppi visualizzati:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","Non comunicare la tua password a nessuno, neppure agli amministratori del server Jabber."}.
|
||||||
{"Dump Backup to Text File at ","Trascrivere il salvataggio sul file di testo "}.
|
{"Dump Backup to Text File at ","Trascrivere il salvataggio sul file di testo "}.
|
||||||
{"Dump to Text File","Trascrivere su file di testo"}.
|
{"Dump to Text File","Trascrivere su file di testo"}.
|
||||||
{"Edit Properties","Modificare le proprietà"}.
|
{"Edit Properties","Modificare le proprietà"}.
|
||||||
|
{"Either approve or decline the voice request.","Approva oppure respingi la richiesta di parola."}.
|
||||||
{"ejabberd IRC module","Modulo IRC per ejabberd"}.
|
{"ejabberd IRC module","Modulo IRC per ejabberd"}.
|
||||||
{"ejabberd MUC module","Modulo MUC per ejabberd"}.
|
{"ejabberd MUC module","Modulo MUC per ejabberd"}.
|
||||||
{"ejabberd Publish-Subscribe module","Modulo Pubblicazione/Iscrizione (PubSub) per ejabberd"}.
|
{"ejabberd Publish-Subscribe module","Modulo Pubblicazione/Iscrizione (PubSub) per ejabberd"}.
|
||||||
@ -95,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Errore"}.
|
{"Error","Errore"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Esempio: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"segreto\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.serverdiprova.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Esempio: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"segreto\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.serverdiprova.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Escludi degli ID Jabber dal passaggio CAPTCHA"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Esportare i dati di tutti gli utenti nel server in file PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Esportare i dati di tutti gli utenti nel server in file PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Esportare i dati degli utenti di un host in file PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Esportare i dati degli utenti di un host in file PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Impossibile estrarre il JID dall'approvazione della richiesta di parola"}.
|
||||||
{"Family Name","Cognome"}.
|
{"Family Name","Cognome"}.
|
||||||
{"February","Febbraio"}.
|
{"February","Febbraio"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Riempire i campi per la ricerca di utenti Jabber corrispondenti ai criteri"}.
|
{"Fill in fields to search for any matching Jabber User","Riempire i campi per la ricerca di utenti Jabber corrispondenti ai criteri"}.
|
||||||
@ -110,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Ottenere la data di ultimo accesso dell'utente"}.
|
{"Get User Last Login Time","Ottenere la data di ultimo accesso dell'utente"}.
|
||||||
{"Get User Password","Ottenere la password dell'utente"}.
|
{"Get User Password","Ottenere la password dell'utente"}.
|
||||||
{"Get User Statistics","Ottenere le statistiche dell'utente"}.
|
{"Get User Statistics","Ottenere le statistiche dell'utente"}.
|
||||||
|
{"Grant voice to this person?","Dare parola a questa persona?"}.
|
||||||
{"Group ","Gruppo "}.
|
{"Group ","Gruppo "}.
|
||||||
{"Groups","Gruppi"}.
|
{"Groups","Gruppi"}.
|
||||||
{"has been banned","è stata/o bandita/o"}.
|
{"has been banned","è stata/o bandita/o"}.
|
||||||
@ -119,6 +128,7 @@
|
|||||||
{"has been kicked","è stata/o espulsa/o"}.
|
{"has been kicked","è stata/o espulsa/o"}.
|
||||||
{" has set the subject to: "," ha modificato l'oggetto in: "}.
|
{" has set the subject to: "," ha modificato l'oggetto in: "}.
|
||||||
{"Host","Host"}.
|
{"Host","Host"}.
|
||||||
|
{"If you don't see the CAPTCHA image here, visit the web page.","Se qui non vedi l'immagine CAPTCHA, visita la pagina web."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Se si vogliono specificare differenti porte, password, codifiche per i server IRC, si riempia questo elenco con valori nel formato '{\"server IRC\", \"codifica\", porta, \"password\"}'. Per default questo servizio utilizza la codifica \"~s\", la porta ~p, la password vuota."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Se si vogliono specificare differenti porte, password, codifiche per i server IRC, si riempia questo elenco con valori nel formato '{\"server IRC\", \"codifica\", porta, \"password\"}'. Per default questo servizio utilizza la codifica \"~s\", la porta ~p, la password vuota."}.
|
||||||
{"Import Directory","Importare una directory"}.
|
{"Import Directory","Importare una directory"}.
|
||||||
{"Import File","Importare un file"}.
|
{"Import File","Importare un file"}.
|
||||||
@ -144,6 +154,7 @@
|
|||||||
{"It is not allowed to send private messages","Non è consentito l'invio di messaggi privati"}.
|
{"It is not allowed to send private messages","Non è consentito l'invio di messaggi privati"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","Non è consentito l'invio di messaggi privati di tipo \"groupchat\""}.
|
{"It is not allowed to send private messages of type \"groupchat\"","Non è consentito l'invio di messaggi privati di tipo \"groupchat\""}.
|
||||||
{"It is not allowed to send private messages to the conference","Non è consentito l'invio di messaggi privati alla conferenza"}.
|
{"It is not allowed to send private messages to the conference","Non è consentito l'invio di messaggi privati alla conferenza"}.
|
||||||
|
{"Jabber Account Registration","Registrazione account Jabber"}.
|
||||||
{"Jabber ID","Jabber ID (Jabber ID)"}.
|
{"Jabber ID","Jabber ID (Jabber ID)"}.
|
||||||
{"Jabber ID ~s is invalid","Il Jabber ID ~s non è valido"}.
|
{"Jabber ID ~s is invalid","Il Jabber ID ~s non è valido"}.
|
||||||
{"January","Gennaio"}.
|
{"January","Gennaio"}.
|
||||||
@ -163,7 +174,7 @@
|
|||||||
{"List of modules to start","Elenco dei moduli da avviare"}.
|
{"List of modules to start","Elenco dei moduli da avviare"}.
|
||||||
{"Low level update script","Script di aggiornamento di basso livello"}.
|
{"Low level update script","Script di aggiornamento di basso livello"}.
|
||||||
{"Make participants list public","Rendere pubblica la lista dei partecipanti"}.
|
{"Make participants list public","Rendere pubblica la lista dei partecipanti"}.
|
||||||
{"Make room captcha protected","Rendere la stanza protetta da captcha"}.
|
{"Make room CAPTCHA protected","Rendere la stanza protetta da CAPTCHA"}.
|
||||||
{"Make room members-only","Rendere la stanza riservata ai membri"}.
|
{"Make room members-only","Rendere la stanza riservata ai membri"}.
|
||||||
{"Make room moderated","Rendere la stanza moderata"}.
|
{"Make room moderated","Rendere la stanza moderata"}.
|
||||||
{"Make room password protected","Rendere la stanza protetta da password"}.
|
{"Make room password protected","Rendere la stanza protetta da password"}.
|
||||||
@ -176,9 +187,11 @@
|
|||||||
{"May","Maggio"}.
|
{"May","Maggio"}.
|
||||||
{"Membership is required to enter this room","Per entrare in questa stanza è necessario essere membro"}.
|
{"Membership is required to enter this room","Per entrare in questa stanza è necessario essere membro"}.
|
||||||
{"Members:","Membri:"}.
|
{"Members:","Membri:"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Memorizza la password, o scrivila su un foglio di carta da conservare in un luogo sicuro. Jabber non prevede una modalità automatica per il recupero di una password dimenticata."}.
|
||||||
{"Memory","Memoria"}.
|
{"Memory","Memoria"}.
|
||||||
{"Message body","Corpo del messaggio"}.
|
{"Message body","Corpo del messaggio"}.
|
||||||
{"Middle Name","Altro nome"}.
|
{"Middle Name","Altro nome"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Intervallo minimo fra due richieste di parola (in secondi)"}.
|
||||||
{"Moderator privileges required","Necessari i privilegi di moderatore"}.
|
{"Moderator privileges required","Necessari i privilegi di moderatore"}.
|
||||||
{"moderators only","moderatori soltanto"}.
|
{"moderators only","moderatori soltanto"}.
|
||||||
{"Modified modules","Moduli modificati"}.
|
{"Modified modules","Moduli modificati"}.
|
||||||
@ -189,9 +202,11 @@
|
|||||||
{"Name:","Nome:"}.
|
{"Name:","Nome:"}.
|
||||||
{"Name","Nome"}.
|
{"Name","Nome"}.
|
||||||
{"Never","Mai"}.
|
{"Never","Mai"}.
|
||||||
|
{"New Password:","Nuova password:"}.
|
||||||
{"Nickname","Nickname"}.
|
{"Nickname","Nickname"}.
|
||||||
{"Nickname Registration at ","Registrazione di un nickname su "}.
|
{"Nickname Registration at ","Registrazione di un nickname su "}.
|
||||||
{"Nickname ~s does not exist in the room","Il nickname ~s non esiste nella stanza"}.
|
{"Nickname ~s does not exist in the room","Il nickname ~s non esiste nella stanza"}.
|
||||||
|
{"nobody","nessuno"}.
|
||||||
{"No body provided for announce message","Nessun corpo fornito per il messaggio di annuncio"}.
|
{"No body provided for announce message","Nessun corpo fornito per il messaggio di annuncio"}.
|
||||||
{"No Data","Nessuna informazione"}.
|
{"No Data","Nessuna informazione"}.
|
||||||
{"Node ID","ID del nodo"}.
|
{"Node ID","ID del nodo"}.
|
||||||
@ -213,12 +228,14 @@
|
|||||||
{"Offline Messages:","Messaggi offline:"}.
|
{"Offline Messages:","Messaggi offline:"}.
|
||||||
{"Offline Messages","Messaggi offline"}.
|
{"Offline Messages","Messaggi offline"}.
|
||||||
{"OK","OK"}.
|
{"OK","OK"}.
|
||||||
|
{"Old Password:","Vecchia password:"}.
|
||||||
{"Online","Online"}.
|
{"Online","Online"}.
|
||||||
{"Online Users:","Utenti connessi:"}.
|
{"Online Users:","Utenti connessi:"}.
|
||||||
{"Online Users","Utenti online"}.
|
{"Online Users","Utenti online"}.
|
||||||
{"Only deliver notifications to available users","Inviare le notifiche solamente agli utenti disponibili"}.
|
{"Only deliver notifications to available users","Inviare le notifiche solamente agli utenti disponibili"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","La modifica dell'oggetto di questa stanza è consentita soltanto ai moderatori e ai partecipanti"}.
|
{"Only moderators and participants are allowed to change the subject in this room","La modifica dell'oggetto di questa stanza è consentita soltanto ai moderatori e ai partecipanti"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","La modifica dell'oggetto di questa stanza è consentita soltanto ai moderatori"}.
|
{"Only moderators are allowed to change the subject in this room","La modifica dell'oggetto di questa stanza è consentita soltanto ai moderatori"}.
|
||||||
|
{"Only moderators can approve voice requests","Soltanto i moderatori possono approvare richieste di parola"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","L'invio di messaggi alla conferenza è consentito soltanto ai presenti"}.
|
{"Only occupants are allowed to send messages to the conference","L'invio di messaggi alla conferenza è consentito soltanto ai presenti"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","L'invio di query alla conferenza è consentito ai soli presenti"}.
|
{"Only occupants are allowed to send queries to the conference","L'invio di query alla conferenza è consentito ai soli presenti"}.
|
||||||
{"Only service administrators are allowed to send service messages","L'invio di messaggi di servizio è consentito solamente agli amministratori del servizio"}.
|
{"Only service administrators are allowed to send service messages","L'invio di messaggi di servizio è consentito solamente agli amministratori del servizio"}.
|
||||||
@ -233,6 +250,7 @@
|
|||||||
{"Password ~b","Password ~b"}.
|
{"Password ~b","Password ~b"}.
|
||||||
{"Password:","Password:"}.
|
{"Password:","Password:"}.
|
||||||
{"Password","Password"}.
|
{"Password","Password"}.
|
||||||
|
{"Password Verification:","Verifica della password:"}.
|
||||||
{"Password Verification","Verifica della password"}.
|
{"Password Verification","Verifica della password"}.
|
||||||
{"Path to Dir","Percorso della directory"}.
|
{"Path to Dir","Percorso della directory"}.
|
||||||
{"Path to File","Percorso del file"}.
|
{"Path to File","Percorso del file"}.
|
||||||
@ -241,6 +259,7 @@
|
|||||||
{"Persist items to storage","Conservazione persistente degli elementi"}.
|
{"Persist items to storage","Conservazione persistente degli elementi"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","N.B.: Queste opzioni comportano il salvataggio solamente del database interno Mnesia. Se si sta utilizzando il modulo ODBC, è necessario salvare anche il proprio database SQL separatamente."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","N.B.: Queste opzioni comportano il salvataggio solamente del database interno Mnesia. Se si sta utilizzando il modulo ODBC, è necessario salvare anche il proprio database SQL separatamente."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Attendi qualche istante prima di inviare una nuova richiesta di parola"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Porta ~b"}.
|
{"Port ~b","Porta ~b"}.
|
||||||
{"Port","Porta"}.
|
{"Port","Porta"}.
|
||||||
@ -256,8 +275,10 @@
|
|||||||
{"Raw","Grezzo"}.
|
{"Raw","Grezzo"}.
|
||||||
{"Really delete message of the day?","Si conferma l'eliminazione del messaggio del giorno (MOTD)?"}.
|
{"Really delete message of the day?","Si conferma l'eliminazione del messaggio del giorno (MOTD)?"}.
|
||||||
{"Recipient is not in the conference room","Il destinatario non è nella stanza per conferenze"}.
|
{"Recipient is not in the conference room","Il destinatario non è nella stanza per conferenze"}.
|
||||||
|
{"Register a Jabber account","Registra un account Jabber"}.
|
||||||
{"Registered Users:","Utenti registrati:"}.
|
{"Registered Users:","Utenti registrati:"}.
|
||||||
{"Registered Users","Utenti registrati"}.
|
{"Registered Users","Utenti registrati"}.
|
||||||
|
{"Register","Registra"}.
|
||||||
{"Registration in mod_irc for ","Registrazione in mod_irc per "}.
|
{"Registration in mod_irc for ","Registrazione in mod_irc per "}.
|
||||||
{"Remote copy","Copia remota"}.
|
{"Remote copy","Copia remota"}.
|
||||||
{"Remove All Offline Messages","Eliminare tutti i messaggi offline"}.
|
{"Remove All Offline Messages","Eliminare tutti i messaggi offline"}.
|
||||||
@ -294,6 +315,7 @@
|
|||||||
{"Send announcement to all users on all hosts","Inviare l'annuncio a tutti gli utenti su tutti gli host"}.
|
{"Send announcement to all users on all hosts","Inviare l'annuncio a tutti gli utenti su tutti gli host"}.
|
||||||
{"September","Settembre"}.
|
{"September","Settembre"}.
|
||||||
{"Server ~b","Server ~b"}.
|
{"Server ~b","Server ~b"}.
|
||||||
|
{"Server:","Server:"}.
|
||||||
{"Set message of the day and send to online users","Impostare il messaggio del giorno (MOTD) ed inviarlo agli utenti online"}.
|
{"Set message of the day and send to online users","Impostare il messaggio del giorno (MOTD) ed inviarlo agli utenti online"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Impostare il messaggio del giorno (MOTD) su tutti gli host e inviarlo agli utenti online"}.
|
{"Set message of the day on all hosts and send to online users","Impostare il messaggio del giorno (MOTD) su tutti gli host e inviarlo agli utenti online"}.
|
||||||
{"Shared Roster Groups","Gruppi di liste di contatti comuni"}.
|
{"Shared Roster Groups","Gruppi di liste di contatti comuni"}.
|
||||||
@ -301,6 +323,7 @@
|
|||||||
{"Show Ordinary Table","Mostrare la tabella normale"}.
|
{"Show Ordinary Table","Mostrare la tabella normale"}.
|
||||||
{"Shut Down Service","Terminare il servizio"}.
|
{"Shut Down Service","Terminare il servizio"}.
|
||||||
{"~s invites you to the room ~s","~s ti invita nella stanza ~s"}.
|
{"~s invites you to the room ~s","~s ti invita nella stanza ~s"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Alcuni client Jabber possono conservare la password nel tuo computer. Utilizza tale funzione soltanto se ritieni che il tuo computer sia sicuro."}.
|
||||||
{"Specify the access model","Specificare il modello di accesso"}.
|
{"Specify the access model","Specificare il modello di accesso"}.
|
||||||
{"Specify the event message type","Specificare il tipo di messaggio di evento"}.
|
{"Specify the event message type","Specificare il tipo di messaggio di evento"}.
|
||||||
{"Specify the publisher model","Definire il modello di pubblicazione"}.
|
{"Specify the publisher model","Definire il modello di pubblicazione"}.
|
||||||
@ -325,9 +348,18 @@
|
|||||||
{"Sunday","Domenica"}.
|
{"Sunday","Domenica"}.
|
||||||
{"That nickname is already in use by another occupant","Il nickname è già in uso all'interno della conferenza"}.
|
{"That nickname is already in use by another occupant","Il nickname è già in uso all'interno della conferenza"}.
|
||||||
{"That nickname is registered by another person","Questo nickname è registrato da un'altra persona"}.
|
{"That nickname is registered by another person","Questo nickname è registrato da un'altra persona"}.
|
||||||
{"The captcha is valid.","Il captcha è valido."}.
|
{"The CAPTCHA is valid.","Il CAPTCHA è valido."}.
|
||||||
|
{"The CAPTCHA verification has failed","La verifica del CAPTCHA ha avuto esito negativo"}.
|
||||||
{"The collections with which a node is affiliated","Le collezioni a cui è affiliato un nodo"}.
|
{"The collections with which a node is affiliated","Le collezioni a cui è affiliato un nodo"}.
|
||||||
{"the password is","la password è"}.
|
{"the password is","la password è"}.
|
||||||
|
{"The password is too weak","La password è troppo debole"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","Il cambio di password del tuo account Jabber è andato a buon fine."}.
|
||||||
|
{"There was an error changing the password: ","Si è verificato un errore nel cambio di password: "}.
|
||||||
|
{"There was an error creating the account: ","Si è verificato un errore nella creazione dell'account: "}.
|
||||||
|
{"There was an error deleting the account: ","Si è verificato un errore nella cancellazione dell'account: "}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Non fa differenza fra minuscolo e maiuscolo: macbeth, MacBeth e Macbeth si equivalgono."}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Questa pagina consente di creare un account Jabber in questo server Jabber. Il tuo JID (Jabber IDentifier) avrà la forma: nome_utente@server. Leggi attentamente le istruzioni per compilare i campi correttamente."}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Questa pagina consente di eliminare un account Jabber da questo server Jabber."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Partecipante espulso dalla stanza perché ha inviato un messaggio non valido"}.
|
{"This participant is kicked from the room because he sent an error message","Partecipante espulso dalla stanza perché ha inviato un messaggio non valido"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Partecipante espulso dalla stanza perché ha inviato un messaggio non valido a un altro partecipante"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Partecipante espulso dalla stanza perché ha inviato un messaggio non valido a un altro partecipante"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Partecipante espulso dalla stanza perché ha inviato una presenza non valido"}.
|
{"This participant is kicked from the room because he sent an error presence","Partecipante espulso dalla stanza perché ha inviato una presenza non valido"}.
|
||||||
@ -336,6 +368,7 @@
|
|||||||
{"Time delay","Ritardo"}.
|
{"Time delay","Ritardo"}.
|
||||||
{"Time","Ora"}.
|
{"Time","Ora"}.
|
||||||
{"To","A"}.
|
{"To","A"}.
|
||||||
|
{"Too many CAPTCHA requests","Troppe richieste CAPTCHA"}.
|
||||||
{"To ~s","A ~s"}.
|
{"To ~s","A ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Limite di traffico superato"}.
|
{"Traffic rate limit is exceeded","Limite di traffico superato"}.
|
||||||
{"Transactions Aborted:","Transazioni abortite:"}.
|
{"Transactions Aborted:","Transazioni abortite:"}.
|
||||||
@ -343,8 +376,10 @@
|
|||||||
{"Transactions Logged:","Transazioni con log:"}.
|
{"Transactions Logged:","Transazioni con log:"}.
|
||||||
{"Transactions Restarted:","Transazioni riavviate:"}.
|
{"Transactions Restarted:","Transazioni riavviate:"}.
|
||||||
{"Tuesday","Martedì"}.
|
{"Tuesday","Martedì"}.
|
||||||
{"Unable to generate a captcha","Impossibile generare un captcha"}.
|
{"Unable to generate a CAPTCHA","Impossibile generare un CAPTCHA"}.
|
||||||
{"Unauthorized","Non autorizzato"}.
|
{"Unauthorized","Non autorizzato"}.
|
||||||
|
{"Unregister a Jabber account","Elimina un account Jabber"}.
|
||||||
|
{"Unregister","Elimina"}.
|
||||||
{"Update ","Aggiornare "}.
|
{"Update ","Aggiornare "}.
|
||||||
{"Update","Aggiornare"}.
|
{"Update","Aggiornare"}.
|
||||||
{"Update message of the day (don't send)","Aggiornare il messaggio del giorno (MOTD) (non inviarlo)"}.
|
{"Update message of the day (don't send)","Aggiornare il messaggio del giorno (MOTD) (non inviarlo)"}.
|
||||||
@ -353,7 +388,9 @@
|
|||||||
{"Update script","Script di aggiornamento"}.
|
{"Update script","Script di aggiornamento"}.
|
||||||
{"Uptime:","Tempo dall'avvio:"}.
|
{"Uptime:","Tempo dall'avvio:"}.
|
||||||
{"Use of STARTTLS required","Utilizzo di STARTTLS obbligatorio"}.
|
{"Use of STARTTLS required","Utilizzo di STARTTLS obbligatorio"}.
|
||||||
|
{"User JID","JID utente"}.
|
||||||
{"User Management","Gestione degli utenti"}.
|
{"User Management","Gestione degli utenti"}.
|
||||||
|
{"Username:","Nome utente:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Non è consentito agli utenti registrare account così rapidamente"}.
|
{"Users are not allowed to register accounts so quickly","Non è consentito agli utenti registrare account così rapidamente"}.
|
||||||
{"Users Last Activity","Ultima attività degli utenti"}.
|
{"Users Last Activity","Ultima attività degli utenti"}.
|
||||||
{"Users","Utenti"}.
|
{"Users","Utenti"}.
|
||||||
@ -364,13 +401,21 @@
|
|||||||
{"Virtual Hosts","Host Virtuali"}.
|
{"Virtual Hosts","Host Virtuali"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Non è consentito ai visitatori cambiare il nickname in questa stanza"}.
|
{"Visitors are not allowed to change their nicknames in this room","Non è consentito ai visitatori cambiare il nickname in questa stanza"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Non è consentito ai visitatori l'invio di messaggi a tutti i presenti"}.
|
{"Visitors are not allowed to send messages to all occupants","Non è consentito ai visitatori l'invio di messaggi a tutti i presenti"}.
|
||||||
|
{"Voice request","Richiesta di parola"}.
|
||||||
|
{"Voice requests are disabled in this conference","In questa conferenza le richieste di parola sono escluse"}.
|
||||||
{"Wednesday","Mercoledì"}.
|
{"Wednesday","Mercoledì"}.
|
||||||
{"When to send the last published item","Quando inviare l'ultimo elemento pubblicato"}.
|
{"When to send the last published item","Quando inviare l'ultimo elemento pubblicato"}.
|
||||||
{"Whether to allow subscriptions","Consentire iscrizioni?"}.
|
{"Whether to allow subscriptions","Consentire iscrizioni?"}.
|
||||||
|
{"You can later change your password using a Jabber client.","Potrai in seguito cambiare la password utilizzando un client Jabber."}.
|
||||||
{"You have been banned from this room","Sei stata/o bandita/o da questa stanza"}.
|
{"You have been banned from this room","Sei stata/o bandita/o da questa stanza"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Si deve riempire il campo \"Nickname\" nel modulo"}.
|
{"You must fill in field \"Nickname\" in the form","Si deve riempire il campo \"Nickname\" nel modulo"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","La registrazione richiede un client che supporti x:data e CAPTCHA"}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","Per registrare il nickname è necessario un client che supporti x:data"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","Per la configurazione del modulo IRC è necessario un client che supporti x:data"}.
|
{"You need an x:data capable client to configure mod_irc settings","Per la configurazione del modulo IRC è necessario un client che supporti x:data"}.
|
||||||
{"You need an x:data capable client to configure room","Per la configurazione della stanza è necessario un client che supporti x:data"}.
|
{"You need an x:data capable client to configure room","Per la configurazione della stanza è necessario un client che supporti x:data"}.
|
||||||
{"You need an x:data capable client to search","Per effettuare ricerche è necessario un client che supporti x:data"}.
|
{"You need an x:data capable client to search","Per effettuare ricerche è necessario un client che supporti x:data"}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","In base alla tua attuale lista privacy questa stanza è stata esclusa dalla navigazione."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","La coda dei messaggi offline del contatto è piena. Il messaggio è stato scartato"}.
|
{"Your contact offline message queue is full. The message has been discarded.","La coda dei messaggi offline del contatto è piena. Il messaggio è stato scartato"}.
|
||||||
|
{"Your Jabber account was successfully created.","La creazione del tuo account Jabber è andata a buon fine."}.
|
||||||
|
{"Your Jabber account was successfully deleted.","La cancellazione del tuo account Jabber è andata a buon fine."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","I messaggi verso ~s sono bloccati. Per sbloccarli, visitare ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","I messaggi verso ~s sono bloccati. Per sbloccarli, visitare ~s"}.
|
||||||
|
774
src/msgs/it.po
774
src/msgs/it.po
File diff suppressed because it is too large
Load Diff
159
src/msgs/ja.msg
159
src/msgs/ja.msg
@ -15,16 +15,18 @@
|
|||||||
{"A friendly name for the node","ノードのフレンドリネーム"}.
|
{"A friendly name for the node","ノードのフレンドリネーム"}.
|
||||||
{"All activity","すべて"}.
|
{"All activity","すべて"}.
|
||||||
{"Allow this Jabber ID to subscribe to this pubsub node?","この Jabber ID に、この pubsubノードの購読を許可しますか ?"}.
|
{"Allow this Jabber ID to subscribe to this pubsub node?","この Jabber ID に、この pubsubノードの購読を許可しますか ?"}.
|
||||||
{"Allow users to change the subject","ユーザーによる件名の変更を許可"}.
|
{"Allow users to change the subject","ユーザーによる題の変更を許可"}.
|
||||||
{"Allow users to query other users","ユーザーによる他のユーザーへのクエリーを許可"}.
|
{"Allow users to query other users","ユーザーによる他のユーザーへのクエリーを許可"}.
|
||||||
{"Allow users to send invites","ユーザーによる招待を許可"}.
|
{"Allow users to send invites","ユーザーによる招待を許可"}.
|
||||||
{"Allow users to send private messages","ユーザーによるプライベートメッセージの送信を許可"}.
|
{"Allow users to send private messages","ユーザーによるプライベートメッセージの送信を許可"}.
|
||||||
{"Allow visitors to change nickname","ビジターのニックネームの変更を許可"}.
|
{"Allow visitors to change nickname","傍聴者のニックネームの変更を許可"}.
|
||||||
{"Allow visitors to send status text in presence updates","ビジターによるプレゼンス更新のステータス文の送信を許可"}.
|
{"Allow visitors to send private messages to","傍聴者によるプライベートメッセージの送信を次の相手に許可"}.
|
||||||
|
{"Allow visitors to send status text in presence updates","傍聴者によるプレゼンス更新のステータス文の送信を許可"}.
|
||||||
|
{"Allow visitors to send voice requests","傍聴者による発言権の要求を許可"}.
|
||||||
{"All Users","全ユーザー"}.
|
{"All Users","全ユーザー"}.
|
||||||
{"Announcements","アナウンス"}.
|
{"Announcements","アナウンス"}.
|
||||||
{"anyone","誰でも"}.
|
{"anyone","誰にでも"}.
|
||||||
{"A password is required to enter this room","チャットルームに入るにはパスワードが必要です"}.
|
{"A password is required to enter this room","この談話室に入るにはパスワードが必要です"}.
|
||||||
{"April","4月"}.
|
{"April","4月"}.
|
||||||
{"August","8月"}.
|
{"August","8月"}.
|
||||||
{"Backup","バックアップ"}.
|
{"Backup","バックアップ"}.
|
||||||
@ -33,27 +35,27 @@
|
|||||||
{"Backup to File at ","ファイルにバックアップ: "}.
|
{"Backup to File at ","ファイルにバックアップ: "}.
|
||||||
{"Bad format","不正なフォーマット"}.
|
{"Bad format","不正なフォーマット"}.
|
||||||
{"Birthday","誕生日"}.
|
{"Birthday","誕生日"}.
|
||||||
{"CAPTCHA web page","CAPTCHA web ページ"}.
|
{"CAPTCHA web page","CAPTCHA ウェブページ"}.
|
||||||
{"Change Password","パスワードを変更"}.
|
{"Change Password","パスワードを変更"}.
|
||||||
{"Change User Password","パスワードを変更"}.
|
{"Change User Password","パスワードを変更"}.
|
||||||
{"Characters not allowed:","使用できない文字:"}.
|
{"Characters not allowed:","使用できない文字:"}.
|
||||||
{"Chatroom configuration modified","チャットルームの設定が変更されました"}.
|
{"Chatroom configuration modified","談話室の設定が変更されました"}.
|
||||||
{"Chatroom is created","チャットルームを作りました"}.
|
{"Chatroom is created","談話室を作りました"}.
|
||||||
{"Chatroom is destroyed","チャットルームを削除しました"}.
|
{"Chatroom is destroyed","談話室を削除しました"}.
|
||||||
{"Chatroom is started","チャットルームを開始しました"}.
|
{"Chatroom is started","談話室を開始しました"}.
|
||||||
{"Chatroom is stopped","チャットルームを停止しました"}.
|
{"Chatroom is stopped","談話室を停止しました"}.
|
||||||
{"Chatrooms","チャットルーム"}.
|
{"Chatrooms","談話室"}.
|
||||||
{"Choose a username and password to register with this server","サーバーに登録するユーザー名とパスワードを選択してください"}.
|
{"Choose a username and password to register with this server","サーバーに登録するユーザー名とパスワードを選択してください"}.
|
||||||
{"Choose modules to stop","停止するモジュールを選択"}.
|
{"Choose modules to stop","停止するモジュールを選択"}.
|
||||||
{"Choose storage type of tables","テーブルのストレージタイプを選択"}.
|
{"Choose storage type of tables","テーブルのストレージタイプを選択"}.
|
||||||
{"Choose whether to approve this entity's subscription.","このエントリを承認するかどうかを選択してください"}.
|
{"Choose whether to approve this entity's subscription.","このエントリを承認するかどうかを選択してください"}.
|
||||||
{"City","都道府県"}.
|
{"City","都道府県"}.
|
||||||
{"Commands","コマンド"}.
|
{"Commands","コマンド"}.
|
||||||
{"Conference room does not exist","カンファレンスルームは存在しません"}.
|
{"Conference room does not exist","会議室は存在しません"}.
|
||||||
{"Configuration of room ~s","チャットルーム ~s の設定"}.
|
{"Configuration of room ~s","談話室 ~s の設定"}.
|
||||||
{"Configuration","設定"}.
|
{"Configuration","設定"}.
|
||||||
{"Connected Resources:","接続リソース:"}.
|
{"Connected Resources:","接続リソース:"}.
|
||||||
{"Connections parameters","接続パラメータ"}.
|
{"Connections parameters","接続パラメーター"}.
|
||||||
{"Country","国"}.
|
{"Country","国"}.
|
||||||
{"CPU Time:","CPU時間:"}.
|
{"CPU Time:","CPU時間:"}.
|
||||||
{"Database","データーベース"}.
|
{"Database","データーベース"}.
|
||||||
@ -75,12 +77,13 @@
|
|||||||
{"Dump Backup to Text File at ","テキストファイルにバックアップ: "}.
|
{"Dump Backup to Text File at ","テキストファイルにバックアップ: "}.
|
||||||
{"Dump to Text File","テキストファイルに出力"}.
|
{"Dump to Text File","テキストファイルに出力"}.
|
||||||
{"Edit Properties","プロパティを編集"}.
|
{"Edit Properties","プロパティを編集"}.
|
||||||
|
{"Either approve or decline the voice request.","発言権の要求を承認または却下します。"}.
|
||||||
{"ejabberd IRC module","ejabberd IRC module"}.
|
{"ejabberd IRC module","ejabberd IRC module"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC module"}.
|
{"ejabberd MUC module","ejabberd MUC module"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe module"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe モジュール"}.
|
||||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams module"}.
|
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams モジュール"}.
|
||||||
{"ejabberd vCard module","ejabberd vCard module"}.
|
{"ejabberd vCard module","ejabberd vCard モジュール"}.
|
||||||
{"ejabberd Web Admin","ejabberd Web 管理"}.
|
{"ejabberd Web Admin","ejabberd ウェブ管理"}.
|
||||||
{"Elements","要素"}.
|
{"Elements","要素"}.
|
||||||
{"Email","メールアドレス"}.
|
{"Email","メールアドレス"}.
|
||||||
{"Enable logging","ロギングを有効"}.
|
{"Enable logging","ロギングを有効"}.
|
||||||
@ -98,12 +101,14 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","エラー"}.
|
{"Error","エラー"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","例: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","例: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","CAPTCHA 試験を免除する Jabber ID"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","サーバーにあるすべてのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","サーバーにあるすべてのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","ホストのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","ホストのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","発言権要求の承認から JID を取り出すことに失敗しました"}.
|
||||||
{"Family Name","姓"}.
|
{"Family Name","姓"}.
|
||||||
{"February","2月"}.
|
{"February","2月"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","項目を埋めて Jabber User を検索してください"}.
|
{"Fill in fields to search for any matching Jabber User","欄を埋めて Jabber User を検索してください"}.
|
||||||
{"Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)","フォームを埋めて Jabber User を検索して下さい(* を使用すると部分文字列にマッチします)"}.
|
{"Fill in the form to search for any matching Jabber User (Add * to the end of field to match substring)","欄を埋めて Jabber User を検索してください (* を使用すると部分文字列にマッチします)"}.
|
||||||
{"Friday","金曜日"}.
|
{"Friday","金曜日"}.
|
||||||
{"From ~s","差出人 ~s"}.
|
{"From ~s","差出人 ~s"}.
|
||||||
{"From","差出人"}.
|
{"From","差出人"}.
|
||||||
@ -113,16 +118,17 @@
|
|||||||
{"Get User Last Login Time","最終ログイン時間を取得"}.
|
{"Get User Last Login Time","最終ログイン時間を取得"}.
|
||||||
{"Get User Password","パスワードを取得"}.
|
{"Get User Password","パスワードを取得"}.
|
||||||
{"Get User Statistics","ユーザー統計を取得"}.
|
{"Get User Statistics","ユーザー統計を取得"}.
|
||||||
|
{"Grant voice to this person?","この人に発言権を与えますか ?"}.
|
||||||
{"Group ","グループ"}.
|
{"Group ","グループ"}.
|
||||||
{"Groups","グループ"}.
|
{"Groups","グループ"}.
|
||||||
{"has been banned","はバンされました"}.
|
{"has been banned","はバンされました"}.
|
||||||
{"has been kicked","はキックされました"}.
|
{"has been kicked","はキックされました"}.
|
||||||
{"has been kicked because of an affiliation change","は分掌が変更されたためキックされました"}.
|
{"has been kicked because of an affiliation change","は分掌が変更されたためキックされました"}.
|
||||||
{"has been kicked because of a system shutdown","はシステムシャットダウンのためキックされました"}.
|
{"has been kicked because of a system shutdown","はシステムシャットダウンのためキックされました"}.
|
||||||
{"has been kicked because the room has been changed to members-only","はチャットルームのメンバーのみに変更されたためキックされました"}.
|
{"has been kicked because the room has been changed to members-only","は談話室がメンバー制に変更されたためキックされました"}.
|
||||||
{" has set the subject to: "," は件名を設定しました: "}.
|
{" has set the subject to: "," は題を設定しました: "}.
|
||||||
{"Host","ホスト"}.
|
{"Host","ホスト"}.
|
||||||
{"If you don't see the CAPTCHA image here, visit the web page.","ここに CAPTCHA 画像が表示されない場合、web ページを参照してください。"}.
|
{"If you don't see the CAPTCHA image here, visit the web page.","ここに CAPTCHA 画像が表示されない場合、ウェブページを参照してください。"}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","別のポートやパスワード、文字エンコーディングを使用したい場合、'{\"irc server\", \"encoding\", port, \"password\"}' という形式のリストを入力してください。デフォルトでエンコーディングは \"~s\" を使用し、ポートは ~p、パスワードは空になっています。"}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","別のポートやパスワード、文字エンコーディングを使用したい場合、'{\"irc server\", \"encoding\", port, \"password\"}' という形式のリストを入力してください。デフォルトでエンコーディングは \"~s\" を使用し、ポートは ~p、パスワードは空になっています。"}.
|
||||||
{"Import Directory","ディレクトリインポート"}.
|
{"Import Directory","ディレクトリインポート"}.
|
||||||
{"Import File","ファイルからインポート"}.
|
{"Import File","ファイルからインポート"}.
|
||||||
@ -146,14 +152,14 @@
|
|||||||
{"IRC Username","IRC ユーザー名"}.
|
{"IRC Username","IRC ユーザー名"}.
|
||||||
{"is now known as","は名前を変更しました: "}.
|
{"is now known as","は名前を変更しました: "}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","種別が\"groupchat\" であるプライベートメッセージを送信することはできません"}.
|
{"It is not allowed to send private messages of type \"groupchat\"","種別が\"groupchat\" であるプライベートメッセージを送信することはできません"}.
|
||||||
{"It is not allowed to send private messages to the conference","カンファレンスルームにプライベートメッセージを送信することはできません"}.
|
{"It is not allowed to send private messages to the conference","この会議にプライベートメッセージを送信することはできません"}.
|
||||||
{"It is not allowed to send private messages","プライベートメッセージを送信することはできません"}.
|
{"It is not allowed to send private messages","プライベートメッセージを送信することはできません"}.
|
||||||
{"Jabber Account Registration","Jabber アカウント登録"}.
|
{"Jabber Account Registration","Jabber アカウント登録"}.
|
||||||
{"Jabber ID","Jabber ID"}.
|
{"Jabber ID","Jabber ID"}.
|
||||||
{"Jabber ID ~s is invalid","Jabber ID ~s は無効です"}.
|
{"Jabber ID ~s is invalid","Jabber ID ~s は無効です"}.
|
||||||
{"January","1月"}.
|
{"January","1月"}.
|
||||||
{"Join IRC channel","IRC チャンネルに参加"}.
|
{"Join IRC channel","IRC チャンネルに参加"}.
|
||||||
{"joins the room","がチャットルームに参加しました"}.
|
{"joins the room","が談話室に参加しました"}.
|
||||||
{"Join the IRC channel here.","この IRC チャンネルに参加します。"}.
|
{"Join the IRC channel here.","この IRC チャンネルに参加します。"}.
|
||||||
{"Join the IRC channel in this Jabber ID: ~s","Jabber ID: ~s でこの IRC チャンネルに参加"}.
|
{"Join the IRC channel in this Jabber ID: ~s","Jabber ID: ~s でこの IRC チャンネルに参加"}.
|
||||||
{"July","7月"}.
|
{"July","7月"}.
|
||||||
@ -162,31 +168,32 @@
|
|||||||
{"Last login","最終ログイン"}.
|
{"Last login","最終ログイン"}.
|
||||||
{"Last month","先月"}.
|
{"Last month","先月"}.
|
||||||
{"Last year","去年"}.
|
{"Last year","去年"}.
|
||||||
{"leaves the room","がチャットルームから退出しました"}.
|
{"leaves the room","が談話室から退出しました"}.
|
||||||
{"Listened Ports at ","Listen ポート "}.
|
{"Listened Ports at ","Listen ポート "}.
|
||||||
{"Listened Ports","Listen ポート"}.
|
{"Listened Ports","Listen ポート"}.
|
||||||
{"List of modules to start","起動モジュールの一覧"}.
|
{"List of modules to start","起動モジュールの一覧"}.
|
||||||
{"Low level update script","低レベル更新スクリプト"}.
|
{"Low level update script","低レベル更新スクリプト"}.
|
||||||
{"Make participants list public","参加者一覧を公開"}.
|
{"Make participants list public","参加者一覧を公開"}.
|
||||||
{"Make room captcha protected","チャットルームを CAPTCHA で保護"}.
|
{"Make room CAPTCHA protected","談話室を CAPTCHA で保護"}.
|
||||||
{"Make room members-only","チャットルームをメンバーのみに制限"}.
|
{"Make room members-only","談話室をメンバーのみに制限"}.
|
||||||
{"Make room moderated","チャットルームをモデレート化"}.
|
{"Make room moderated","談話室をモデレート化"}.
|
||||||
{"Make room password protected","チャットルームにパスワードを設定"}.
|
{"Make room password protected","談話室をパスワードで保護"}.
|
||||||
{"Make room persistent","チャットルームを永続化"}.
|
{"Make room persistent","談話室を永続化"}.
|
||||||
{"Make room public searchable","チャットルームを検索可"}.
|
{"Make room public searchable","談話室を検索可"}.
|
||||||
{"March","3月"}.
|
{"March","3月"}.
|
||||||
{"Maximum Number of Occupants","最大在室者数"}.
|
{"Maximum Number of Occupants","最大在室者数"}.
|
||||||
{"Max # of items to persist","アイテムの最大保存数"}.
|
{"Max # of items to persist","アイテムの最大保存数"}.
|
||||||
{"Max payload size in bytes","最大ぺイロードサイズ (byte)"}.
|
{"Max payload size in bytes","最大ぺイロードサイズ (byte)"}.
|
||||||
{"May","5月"}.
|
{"May","5月"}.
|
||||||
{"Members:","メンバー:"}.
|
{"Members:","メンバー:"}.
|
||||||
{"Membership is required to enter this room","チャットルームに入るにはメンバーでなければなりません"}.
|
{"Membership is required to enter this room","この談話室に入るにはメンバーでなければなりません"}.
|
||||||
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","パスワードは記憶するか、紙に書いて安全な場所に保管してください。もしあなたがパスワードを忘れてしまった場合、Jabber ではパスワードのリカバリを自動的に行うことはできません。"}.
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","パスワードは記憶するか、紙に書いて安全な場所に保管してください。もしあなたがパスワードを忘れてしまった場合、Jabber ではパスワードのリカバリを自動的に行うことはできません。"}.
|
||||||
{"Memory","メモリ"}.
|
{"Memory","メモリ"}.
|
||||||
{"Message body","本文"}.
|
{"Message body","本文"}.
|
||||||
{"Middle Name","ミドルネーム"}.
|
{"Middle Name","ミドルネーム"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","発言権の要求の最小時間間隔 (秒)"}.
|
||||||
{"Moderator privileges required","モデレーター権限が必要です"}.
|
{"Moderator privileges required","モデレーター権限が必要です"}.
|
||||||
{"moderators only","モデレーターのみ"}.
|
{"moderators only","モデレーターにのみ"}.
|
||||||
{"Modified modules","変更されたモジュール"}.
|
{"Modified modules","変更されたモジュール"}.
|
||||||
{"Module","モジュール"}.
|
{"Module","モジュール"}.
|
||||||
{"Modules","モジュール"}.
|
{"Modules","モジュール"}.
|
||||||
@ -198,8 +205,9 @@
|
|||||||
{"New Password:","新しいパスワード:"}.
|
{"New Password:","新しいパスワード:"}.
|
||||||
{"Nickname","ニックネーム"}.
|
{"Nickname","ニックネーム"}.
|
||||||
{"Nickname Registration at ","ニックネーム登録: "}.
|
{"Nickname Registration at ","ニックネーム登録: "}.
|
||||||
{"Nickname ~s does not exist in the room","ニックネーム ~s はこのチャットルームにいません"}.
|
{"Nickname ~s does not exist in the room","ニックネーム ~s はこの談話室にいません"}.
|
||||||
{"No body provided for announce message","アナウンスメッセージはありませんでした"}.
|
{"No body provided for announce message","アナウンスメッセージはありませんでした"}.
|
||||||
|
{"nobody","誰にも許可しない"}.
|
||||||
{"No Data","データなし"}.
|
{"No Data","データなし"}.
|
||||||
{"Node ","ノード "}.
|
{"Node ","ノード "}.
|
||||||
{"Node ID","ノードID"}.
|
{"Node ID","ノードID"}.
|
||||||
@ -225,10 +233,11 @@
|
|||||||
{"Online Users:","オンラインユーザー:"}.
|
{"Online Users:","オンラインユーザー:"}.
|
||||||
{"Online Users","オンラインユーザー"}.
|
{"Online Users","オンラインユーザー"}.
|
||||||
{"Only deliver notifications to available users","有効なユーザーにのみ告知を送信する"}.
|
{"Only deliver notifications to available users","有効なユーザーにのみ告知を送信する"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","モデレーターと参加者のみがチャットルームの件名を変更できます"}.
|
{"Only moderators and participants are allowed to change the subject in this room","モデレーターと参加者のみが談話室の題を変更できます"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","モデレーターのみがチャットルームの件名を変更できます"}.
|
{"Only moderators are allowed to change the subject in this room","モデレーターのみが談話室の題を変更できます"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","在室者のみがカンファレンスにメッセージを送ることができます"}.
|
{"Only moderators can approve voice requests","モデレーターだけが発言権の要求を承認できます"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","在室者のみがカンファレンスにクエリーを送信することができます"}.
|
{"Only occupants are allowed to send messages to the conference","在室者のみがこの会議にメッセージを送ることができます"}.
|
||||||
|
{"Only occupants are allowed to send queries to the conference","在室者のみが会議にクエリーを送信することができます"}.
|
||||||
{"Only service administrators are allowed to send service messages","サービス管理者のみがサービスメッセージを送信できます"}.
|
{"Only service administrators are allowed to send service messages","サービス管理者のみがサービスメッセージを送信できます"}.
|
||||||
{"Options","オプション"}.
|
{"Options","オプション"}.
|
||||||
{"Organization Name","会社名"}.
|
{"Organization Name","会社名"}.
|
||||||
@ -236,7 +245,7 @@
|
|||||||
{"Outgoing s2s Connections:","外向き s2s コネクション:"}.
|
{"Outgoing s2s Connections:","外向き s2s コネクション:"}.
|
||||||
{"Outgoing s2s Connections","外向き s2s コネクション"}.
|
{"Outgoing s2s Connections","外向き s2s コネクション"}.
|
||||||
{"Outgoing s2s Servers:","外向き s2s サービス:"}.
|
{"Outgoing s2s Servers:","外向き s2s サービス:"}.
|
||||||
{"Owner privileges required","オーナー権限が必要です"}.
|
{"Owner privileges required","主宰者の権限が必要です"}.
|
||||||
{"Packet","パケット"}.
|
{"Packet","パケット"}.
|
||||||
{"Password:","パスワード"}.
|
{"Password:","パスワード"}.
|
||||||
{"Password","パスワード"}.
|
{"Password","パスワード"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","アイテムをストレージに保存する"}.
|
{"Persist items to storage","アイテムをストレージに保存する"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","これらのオプションは組み込みの Mnesia データーベースのバックアップのみを行うことに注意してください。もし ODBC モジュールを使用している場合は、SQL データーベースのバックアップを別に行う必要があります。"}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","これらのオプションは組み込みの Mnesia データーベースのバックアップのみを行うことに注意してください。もし ODBC モジュールを使用している場合は、SQL データーベースのバックアップを別に行う必要があります。"}.
|
||||||
|
{"Please, wait for a while before sending new voice request","新しい発言権の要求を送るまで少し間をおいてください"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port","ポート"}.
|
{"Port","ポート"}.
|
||||||
{"Port ~b","ポート ~b"}.
|
{"Port ~b","ポート ~b"}.
|
||||||
@ -259,12 +269,12 @@
|
|||||||
{"Publish-Subscribe","Publish-Subscribe"}.
|
{"Publish-Subscribe","Publish-Subscribe"}.
|
||||||
{"PubSub subscriber request","PubSub 購読者のリクエスト"}.
|
{"PubSub subscriber request","PubSub 購読者のリクエスト"}.
|
||||||
{"Purge all items when the relevant publisher goes offline","公開者がオフラインになるときに、すべてのアイテムを削除"}.
|
{"Purge all items when the relevant publisher goes offline","公開者がオフラインになるときに、すべてのアイテムを削除"}.
|
||||||
{"Queries to the conference members are not allowed in this room","このチャットルームでは、カンファレンスメンバーへのクエリーは禁止されています"}.
|
{"Queries to the conference members are not allowed in this room","この談話室では、会議のメンバーへのクエリーは禁止されています"}.
|
||||||
{"RAM and disc copy","RAM, ディスクコピー"}.
|
{"RAM and disc copy","RAM, ディスクコピー"}.
|
||||||
{"RAM copy","RAM コピー"}.
|
{"RAM copy","RAM コピー"}.
|
||||||
{"Raw","Raw"}.
|
{"Raw","Raw"}.
|
||||||
{"Really delete message of the day?","本当にお知らせメッセージを削除しますか ?"}.
|
{"Really delete message of the day?","本当にお知らせメッセージを削除しますか ?"}.
|
||||||
{"Recipient is not in the conference room","受信者がカンファレンスルームにいません"}.
|
{"Recipient is not in the conference room","受信者はこの会議室にいません"}.
|
||||||
{"Register a Jabber account","Jabber アカウントを登録"}.
|
{"Register a Jabber account","Jabber アカウントを登録"}.
|
||||||
{"Registered Users:","登録ユーザー:"}.
|
{"Registered Users:","登録ユーザー:"}.
|
||||||
{"Registered Users","登録ユーザー"}.
|
{"Registered Users","登録ユーザー"}.
|
||||||
@ -283,11 +293,11 @@
|
|||||||
{"Restore binary backup after next ejabberd restart (requires less memory):","ejabberd の再起動時にバイナリバックアップからリストア (メモリ少):"}.
|
{"Restore binary backup after next ejabberd restart (requires less memory):","ejabberd の再起動時にバイナリバックアップからリストア (メモリ少):"}.
|
||||||
{"Restore binary backup immediately:","直ちにバイナリバックアップからリストア:"}.
|
{"Restore binary backup immediately:","直ちにバイナリバックアップからリストア:"}.
|
||||||
{"Restore plain text backup immediately:","直ちにプレーンテキストバックアップからリストア:"}.
|
{"Restore plain text backup immediately:","直ちにプレーンテキストバックアップからリストア:"}.
|
||||||
{"Room Configuration","チャットルーム設定"}.
|
{"Room Configuration","談話室の設定"}.
|
||||||
{"Room creation is denied by service policy","サービスポリシーによってチャットルームの作成が禁止されています"}.
|
{"Room creation is denied by service policy","サービスポリシーによって談話室の作成が禁止されています"}.
|
||||||
{"Room description","チャットルームの説明"}.
|
{"Room description","談話室の説明"}.
|
||||||
{"Room Occupants","在室者の数"}.
|
{"Room Occupants","在室者"}.
|
||||||
{"Room title","チャットルームタイトル"}.
|
{"Room title","談話室のタイトル"}.
|
||||||
{"Roster groups allowed to subscribe","名簿グループは購読を許可しました"}.
|
{"Roster groups allowed to subscribe","名簿グループは購読を許可しました"}.
|
||||||
{"Roster of ","名簿: "}.
|
{"Roster of ","名簿: "}.
|
||||||
{"Roster size","名簿サイズ"}.
|
{"Roster size","名簿サイズ"}.
|
||||||
@ -309,11 +319,11 @@
|
|||||||
{"Set message of the day and send to online users","お知らせメッセージを設定し、オンラインユーザーに送信"}.
|
{"Set message of the day and send to online users","お知らせメッセージを設定し、オンラインユーザーに送信"}.
|
||||||
{"Set message of the day on all hosts and send to online users","全ホストのお知らせメッセージを設定し、オンラインユーザーに送信"}.
|
{"Set message of the day on all hosts and send to online users","全ホストのお知らせメッセージを設定し、オンラインユーザーに送信"}.
|
||||||
{"Shared Roster Groups","共有名簿グループ"}.
|
{"Shared Roster Groups","共有名簿グループ"}.
|
||||||
{"Show Integral Table","Integral テーブルを表示"}.
|
{"Show Integral Table","累積の表を表示"}.
|
||||||
{"Show Ordinary Table","Ordinary テーブルを表示"}.
|
{"Show Ordinary Table","通常の表を表示"}.
|
||||||
{"Shut Down Service","サービスを停止"}.
|
{"Shut Down Service","サービスを停止"}.
|
||||||
{"~s invites you to the room ~s","~s はあなたをチャットルーム ~s に招待しています"}.
|
{"~s invites you to the room ~s","~s はあなたを談話室 ~s に招待しています"}.
|
||||||
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Jabber クライアントはコンピューターにあなたのパスワードを記憶できます。この機能を使用する場合、コンピューターが安全であることを確認してください。"}.
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Jabber クライアントはコンピューターにパスワードを記憶できます。コンピューターが安全であると信頼できる場合にのみ、この機能を使用してください。"}.
|
||||||
{"Specify the access model","アクセスモデルを設定する"}.
|
{"Specify the access model","アクセスモデルを設定する"}.
|
||||||
{"Specify the event message type","イベントメッセージ種別を設定"}.
|
{"Specify the event message type","イベントメッセージ種別を設定"}.
|
||||||
{"Specify the publisher model","公開モデルを指定する"}.
|
{"Specify the publisher model","公開モデルを指定する"}.
|
||||||
@ -330,15 +340,15 @@
|
|||||||
{"Storage Type","ストレージタイプ"}.
|
{"Storage Type","ストレージタイプ"}.
|
||||||
{"Store binary backup:","バイナリバックアップを保存:"}.
|
{"Store binary backup:","バイナリバックアップを保存:"}.
|
||||||
{"Store plain text backup:","プレーンテキストバックアップを保存:"}.
|
{"Store plain text backup:","プレーンテキストバックアップを保存:"}.
|
||||||
{"Subject","件名"}.
|
{"Subject","題"}.
|
||||||
{"Submitted","送信完了"}.
|
{"Submitted","送信完了"}.
|
||||||
{"Submit","送信"}.
|
{"Submit","送信"}.
|
||||||
{"Subscriber Address","購読者のアドレス"}.
|
{"Subscriber Address","購読者のアドレス"}.
|
||||||
{"Subscription","認可"}.
|
{"Subscription","認可"}.
|
||||||
{"Sunday","日曜日"}.
|
{"Sunday","日曜日"}.
|
||||||
{"That nickname is already in use by another occupant","ニックネームは既にほかの在室者によって使用されています"}.
|
{"That nickname is already in use by another occupant","そのニックネームは既にほかの在室者によって使用されています"}.
|
||||||
{"That nickname is registered by another person","ニックネームはほかの人によって登録されています"}.
|
{"That nickname is registered by another person","ニックネームはほかの人によって登録されています"}.
|
||||||
{"The captcha is valid.","CAPTCHA は有効です。"}.
|
{"The CAPTCHA is valid.","CAPTCHA は有効です。"}.
|
||||||
{"The CAPTCHA verification has failed","CAPTCHA 検証は失敗しました"}.
|
{"The CAPTCHA verification has failed","CAPTCHA 検証は失敗しました"}.
|
||||||
{"The collections with which a node is affiliated","提携されたノードの集合です"}.
|
{"The collections with which a node is affiliated","提携されたノードの集合です"}.
|
||||||
{"the password is","パスワードは"}.
|
{"the password is","パスワードは"}.
|
||||||
@ -348,15 +358,16 @@
|
|||||||
{"There was an error creating the account: ","アカウントの作成中にエラーが発生しました: "}.
|
{"There was an error creating the account: ","アカウントの作成中にエラーが発生しました: "}.
|
||||||
{"There was an error deleting the account: ","アカウントの削除中にエラーが発生しました: "}.
|
{"There was an error deleting the account: ","アカウントの削除中にエラーが発生しました: "}.
|
||||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","大文字と小文字は区別しません: macbeth は MacBeth や Macbeth と同じです。"}.
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","大文字と小文字は区別しません: macbeth は MacBeth や Macbeth と同じです。"}.
|
||||||
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","ここは Jabber サーバーにアカウントを作成するページです。あなたの JID (JabberID) は username@server のような形式になります。注意事項どおり、正しく項目を記入してください。"}.
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","ここはこの Jabber サーバーにアカウントを作成するページです。あなたの JID (JabberID) は username@server のような形式になります。注意事項どおり、正しく項目を記入してください。"}.
|
||||||
{"This page allows to unregister a Jabber account in this Jabber server.","ここはサーバーの Jabber アカウントの削除を行うページです。"}.
|
{"This page allows to unregister a Jabber account in this Jabber server.","ここはこの Jabber サーバーのアカウントを削除するページです。"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","他の参加者にエラーメッセージを送信したため、この参加者はキックされました"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","他の参加者にエラーメッセージを送信したため、この参加者はキックされました"}.
|
||||||
{"This participant is kicked from the room because he sent an error message","エラーメッセージを送信したため、この参加者はキックされました"}.
|
{"This participant is kicked from the room because he sent an error message","エラーメッセージを送信したため、この参加者はキックされました"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","エラープレゼンスを送信したため、この参加者はキックされました"}.
|
{"This participant is kicked from the room because he sent an error presence","エラープレゼンスを送信したため、この参加者はキックされました"}.
|
||||||
{"This room is not anonymous","このチャットルームは非匿名です"}.
|
{"This room is not anonymous","この談話室は非匿名です"}.
|
||||||
{"Thursday","木曜日"}.
|
{"Thursday","木曜日"}.
|
||||||
{"Time delay","遅延時間"}.
|
{"Time delay","遅延時間"}.
|
||||||
{"Time","時間"}.
|
{"Time","時間"}.
|
||||||
|
{"Too many CAPTCHA requests","CAPTCHA 要求が多すぎます"}.
|
||||||
{"To ~s","宛先 ~s"}.
|
{"To ~s","宛先 ~s"}.
|
||||||
{"To","宛先"}.
|
{"To","宛先"}.
|
||||||
{"Traffic rate limit is exceeded","トラフィックレートの制限を超えました"}.
|
{"Traffic rate limit is exceeded","トラフィックレートの制限を超えました"}.
|
||||||
@ -365,8 +376,7 @@
|
|||||||
{"Transactions Logged:","トランザクションのログ: "}.
|
{"Transactions Logged:","トランザクションのログ: "}.
|
||||||
{"Transactions Restarted:","トランザクションの再起動:"}.
|
{"Transactions Restarted:","トランザクションの再起動:"}.
|
||||||
{"Tuesday","火曜日"}.
|
{"Tuesday","火曜日"}.
|
||||||
{"Unable to generate a captcha","CAPTCHA を生成することができません"}.
|
{"Unable to generate a CAPTCHA","CAPTCHA を生成できません"}.
|
||||||
{"Unable to generate a CAPTCHA","CAPTCHA を生成できませんでした"}.
|
|
||||||
{"Unauthorized","認証されていません"}.
|
{"Unauthorized","認証されていません"}.
|
||||||
{"Unregister a Jabber account","Jabber アカウントを削除"}.
|
{"Unregister a Jabber account","Jabber アカウントを削除"}.
|
||||||
{"Unregister","削除"}.
|
{"Unregister","削除"}.
|
||||||
@ -380,29 +390,32 @@
|
|||||||
{"Use of STARTTLS required","STARTTLS の使用が必要です"}.
|
{"Use of STARTTLS required","STARTTLS の使用が必要です"}.
|
||||||
{"User ","ユーザー "}.
|
{"User ","ユーザー "}.
|
||||||
{"User","ユーザー"}.
|
{"User","ユーザー"}.
|
||||||
|
{"User JID","ユーザー JID"}.
|
||||||
{"User Management","ユーザー管理"}.
|
{"User Management","ユーザー管理"}.
|
||||||
{"Username:","ユーザー名:"}.
|
{"Username:","ユーザー名:"}.
|
||||||
{"Users","ユーザー"}.
|
{"Users","ユーザー"}.
|
||||||
{"Users are not allowed to register accounts so quickly","早すぎるユーザーアカウント登録は許可されていません"}.
|
{"Users are not allowed to register accounts so quickly","それほど速くアカウントを登録することはできません"}.
|
||||||
{"Users Last Activity","ユーザーの活動履歴"}.
|
{"Users Last Activity","ユーザーの活動履歴"}.
|
||||||
{"Validate","検証"}.
|
{"Validate","検証"}.
|
||||||
{"vCard User Search","vCard ユーザー検索"}.
|
{"vCard User Search","vCard ユーザー検索"}.
|
||||||
{"Virtual Hosts","ヴァーチャルホスト"}.
|
{"Virtual Hosts","ヴァーチャルホスト"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","ビジターはこのチャットルームでニックネームを変更することはできません"}.
|
{"Visitors are not allowed to change their nicknames in this room","傍聴者はこの談話室でニックネームを変更することはできません"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","ビジターはすべての在室者にメッセージを送信することはできません"}.
|
{"Visitors are not allowed to send messages to all occupants","傍聴者はすべての在室者にメッセージを送信することはできません"}.
|
||||||
|
{"Voice requests are disabled in this conference","この会議では、発言権の要求はできません"}.
|
||||||
|
{"Voice request","発言権を要求"}.
|
||||||
{"Wednesday","水曜日"}.
|
{"Wednesday","水曜日"}.
|
||||||
{"When to send the last published item","最後の公開アイテムを送信するタイミングで"}.
|
{"When to send the last published item","最後の公開アイテムを送信するタイミングで"}.
|
||||||
{"Whether to allow subscriptions","購読を許可するかどうか"}.
|
{"Whether to allow subscriptions","購読を許可するかどうか"}.
|
||||||
{"You can later change your password using a Jabber client.","あなたは後から Jabber クライアントを使用してパスワードを変更することができます。"}.
|
{"You can later change your password using a Jabber client.","あなたは後で Jabber クライアントを使用してパスワードを変更できます。"}.
|
||||||
{"You have been banned from this room","あなたはチャットルームからバンされています"}.
|
{"You have been banned from this room","あなたはこの談話室からバンされています"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","フォームの\"ニックネーム\"フィールドを入力する必要があります"}.
|
{"You must fill in field \"Nickname\" in the form","フォームの\"ニックネーム\"欄を入力する必要があります"}.
|
||||||
{"You need a client that supports x:data and CAPTCHA to register","登録を行うにはクライアントが x:data と CAPTCHA をサポートする必要があります"}.
|
{"You need a client that supports x:data and CAPTCHA to register","登録を行うには x:data と CAPTCHA をサポートするクライアントが必要です"}.
|
||||||
{"You need a client that supports x:data to register the nickname","ニックネームを登録するにはクライアントが x:data をサポートする必要があります"}.
|
{"You need a client that supports x:data to register the nickname","ニックネームを登録するには x:data をサポートするクライアントが必要です"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","mod_irc の設定にはクライアントが x:data をサポートする必要があります"}.
|
{"You need an x:data capable client to configure mod_irc settings","mod_irc の設定には x:data をサポートするクライアントが必要です"}.
|
||||||
{"You need an x:data capable client to configure room","チャットルームを設定するにはクライアントが x:data をサポートする必要があります"}.
|
{"You need an x:data capable client to configure room","談話室を設定するには x:data をサポートするクライアントが必要です"}.
|
||||||
{"You need an x:data capable client to search","検索を行うためにはクライアントが x:data をサポートする必要があります"}.
|
{"You need an x:data capable client to search","検索を行うためには x:data をサポートするクライアントが必要です"}.
|
||||||
{"Your active privacy list has denied the routing of this stanza.","あなたのプライバシーリストはこのスタンザのルーティングを拒否しました。"}.
|
{"Your active privacy list has denied the routing of this stanza.","あなたのプライバシーリストはこのスタンザのルーティングを拒否しました。"}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","宛先のオフラインメッセージキューが一杯です。このメッセージは破棄されます。"}.
|
{"Your contact offline message queue is full. The message has been discarded.","相手先のオフラインメッセージキューが一杯です。このメッセージは破棄されます。"}.
|
||||||
{"Your Jabber account was successfully created.","Jabber アカウントの作成に成功しました。"}.
|
{"Your Jabber account was successfully created.","Jabber アカウントの作成に成功しました。"}.
|
||||||
{"Your Jabber account was successfully deleted.","Jabber アカウントの削除に成功しました。"}.
|
{"Your Jabber account was successfully deleted.","Jabber アカウントの削除に成功しました。"}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","~s 宛のメッセージはブロックされています、解除するにはこちらを見てください ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","~s 宛のメッセージはブロックされています。解除するにはこちらを見てください ~s"}.
|
||||||
|
837
src/msgs/ja.po
837
src/msgs/ja.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Gebruikers mogen uitnodigingen verzenden"}.
|
{"Allow users to send invites","Gebruikers mogen uitnodigingen verzenden"}.
|
||||||
{"Allow users to send private messages","Gebruikers mogen privéberichten verzenden"}.
|
{"Allow users to send private messages","Gebruikers mogen privéberichten verzenden"}.
|
||||||
{"Allow visitors to change nickname","Sta bezoekers toe hun naam te veranderen"}.
|
{"Allow visitors to change nickname","Sta bezoekers toe hun naam te veranderen"}.
|
||||||
|
{"Allow visitors to send private messages to","Gebruikers mogen privéberichten verzenden aan"}.
|
||||||
{"Allow visitors to send status text in presence updates","Sta bezoekers toe hun statusbericht in te stellen"}.
|
{"Allow visitors to send status text in presence updates","Sta bezoekers toe hun statusbericht in te stellen"}.
|
||||||
|
{"Allow visitors to send voice requests","Gebruikers mogen stemaanvragen verzenden"}.
|
||||||
{"All Users","Alle gebruikers"}.
|
{"All Users","Alle gebruikers"}.
|
||||||
{"Announcements","Mededelingen"}.
|
{"Announcements","Mededelingen"}.
|
||||||
{"anyone","iedereen"}.
|
{"anyone","iedereen"}.
|
||||||
@ -33,8 +35,10 @@
|
|||||||
{"Backup to File at ","Binaire backup maken op "}.
|
{"Backup to File at ","Binaire backup maken op "}.
|
||||||
{"Bad format","Slecht formaat"}.
|
{"Bad format","Slecht formaat"}.
|
||||||
{"Birthday","Geboortedatum"}.
|
{"Birthday","Geboortedatum"}.
|
||||||
|
{"CAPTCHA web page","CAPTCHA webpagina."}.
|
||||||
{"Change Password","Wachtwoord wijzigen"}.
|
{"Change Password","Wachtwoord wijzigen"}.
|
||||||
{"Change User Password","Verander Gebruikerswachtwoord"}.
|
{"Change User Password","Verander Gebruikerswachtwoord"}.
|
||||||
|
{"Characters not allowed:","Niet-toegestane karakters:"}.
|
||||||
{"Chatroom configuration modified","De instellingen van de chatruimte werden veranderd"}.
|
{"Chatroom configuration modified","De instellingen van de chatruimte werden veranderd"}.
|
||||||
{"Chatroom is created","Gespreksruimte gecreëerd"}.
|
{"Chatroom is created","Gespreksruimte gecreëerd"}.
|
||||||
{"Chatroom is destroyed","Gespreksruimte vernietigd"}.
|
{"Chatroom is destroyed","Gespreksruimte vernietigd"}.
|
||||||
@ -69,9 +73,11 @@
|
|||||||
{"Description:","Beschrijving:"}.
|
{"Description:","Beschrijving:"}.
|
||||||
{"Disc only copy","Harde schijf"}.
|
{"Disc only copy","Harde schijf"}.
|
||||||
{"Displayed Groups:","Weergegeven groepen:"}.
|
{"Displayed Groups:","Weergegeven groepen:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","Geef Uw wachtwoord aan niemand, zelfs niet aan de beheerders van deze Jabber-server."}.
|
||||||
{"Dump Backup to Text File at ","Backup naar een tekstbestand schrijven op "}.
|
{"Dump Backup to Text File at ","Backup naar een tekstbestand schrijven op "}.
|
||||||
{"Dump to Text File","Backup naar een tekstbestand schrijven"}.
|
{"Dump to Text File","Backup naar een tekstbestand schrijven"}.
|
||||||
{"Edit Properties","Eigenschappen bewerken"}.
|
{"Edit Properties","Eigenschappen bewerken"}.
|
||||||
|
{"Either approve or decline the voice request.","Keur stemaanvraag goed of af."}.
|
||||||
{"ejabberd IRC module","ejabberd's IRC-module"}.
|
{"ejabberd IRC module","ejabberd's IRC-module"}.
|
||||||
{"ejabberd MUC module","ejabberd's MUC module"}.
|
{"ejabberd MUC module","ejabberd's MUC module"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe module"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe module"}.
|
||||||
@ -95,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Fout"}.
|
{"Error","Fout"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Voorbeeld: [{\"irc.example.org\", \"koi8-r\", 6667, \"geheim\"}, {\"vendetta.example.net\", \"iso8859-1\", 7000}, {irc,testserver.nl\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Voorbeeld: [{\"irc.example.org\", \"koi8-r\", 6667, \"geheim\"}, {\"vendetta.example.net\", \"iso8859-1\", 7000}, {irc,testserver.nl\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Geen CAPTCHA test voor Jabber IDs"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exporteer data van alle gebruikers in de server naar PIEFXIS-bestanden (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exporteer data van alle gebruikers in de server naar PIEFXIS-bestanden (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exporteer data van alle gebruikers van een host naar PIEXFIS-bestanden (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exporteer data van alle gebruikers van een host naar PIEXFIS-bestanden (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Er kon geen JID worden ontleend uit deze stemaanvraag"}.
|
||||||
{"Family Name","Achternaam"}.
|
{"Family Name","Achternaam"}.
|
||||||
{"February","Februari"}.
|
{"February","Februari"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Vul de velden in om te zoeken naar Jabber-gebruikers op deze server"}.
|
{"Fill in fields to search for any matching Jabber User","Vul de velden in om te zoeken naar Jabber-gebruikers op deze server"}.
|
||||||
@ -110,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Tijd van Laatste Aanmelding Opvragen"}.
|
{"Get User Last Login Time","Tijd van Laatste Aanmelding Opvragen"}.
|
||||||
{"Get User Password","Gebruikerswachtwoord Opvragen"}.
|
{"Get User Password","Gebruikerswachtwoord Opvragen"}.
|
||||||
{"Get User Statistics","Gebruikers-statistieken Opvragen"}.
|
{"Get User Statistics","Gebruikers-statistieken Opvragen"}.
|
||||||
|
{"Grant voice to this person?","Stemaanvraag honoreren voor deze persoon?"}.
|
||||||
{"Group ","Groep "}.
|
{"Group ","Groep "}.
|
||||||
{"Groups","Groepen"}.
|
{"Groups","Groepen"}.
|
||||||
{"has been banned","werd verbannen"}.
|
{"has been banned","werd verbannen"}.
|
||||||
@ -119,6 +128,7 @@
|
|||||||
{"has been kicked","werd gekicked"}.
|
{"has been kicked","werd gekicked"}.
|
||||||
{" has set the subject to: "," veranderde het onderwerp in: "}.
|
{" has set the subject to: "," veranderde het onderwerp in: "}.
|
||||||
{"Host","Host"}.
|
{"Host","Host"}.
|
||||||
|
{"If you don't see the CAPTCHA image here, visit the web page.","Als U het CAPTCHA-plaatje niet ziet, bezoek dan de webpagina."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Als u verschillende poorten, wachtwoorden en coderingen wilt opgeven voor elke IRC-server, vul dan deze lijst met het volgende formaat: '{\"IRC-server\", \"codering\", poort, \"wachtwoord\"}'. Standaard gebruikt deze service de codering \"~s\", poort ~p, leeg wachtwoord."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Als u verschillende poorten, wachtwoorden en coderingen wilt opgeven voor elke IRC-server, vul dan deze lijst met het volgende formaat: '{\"IRC-server\", \"codering\", poort, \"wachtwoord\"}'. Standaard gebruikt deze service de codering \"~s\", poort ~p, leeg wachtwoord."}.
|
||||||
{"Import Directory","Directory importeren"}.
|
{"Import Directory","Directory importeren"}.
|
||||||
{"Import File","Bestand importeren"}.
|
{"Import File","Bestand importeren"}.
|
||||||
@ -144,6 +154,7 @@
|
|||||||
{"It is not allowed to send private messages","Het is niet toegestaan priveberichten te sturen"}.
|
{"It is not allowed to send private messages","Het is niet toegestaan priveberichten te sturen"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","Er mogen geen privéberichten van het type \"groupchat\" worden verzonden"}.
|
{"It is not allowed to send private messages of type \"groupchat\"","Er mogen geen privéberichten van het type \"groupchat\" worden verzonden"}.
|
||||||
{"It is not allowed to send private messages to the conference","Er mogen geen privéberichten naar de chatruimte worden verzonden"}.
|
{"It is not allowed to send private messages to the conference","Er mogen geen privéberichten naar de chatruimte worden verzonden"}.
|
||||||
|
{"Jabber Account Registration","Jabber-account registratie"}.
|
||||||
{"Jabber ID","Jabber ID"}.
|
{"Jabber ID","Jabber ID"}.
|
||||||
{"Jabber ID ~s is invalid","De Jabber ID ~s is ongeldig"}.
|
{"Jabber ID ~s is invalid","De Jabber ID ~s is ongeldig"}.
|
||||||
{"January","Januari"}.
|
{"January","Januari"}.
|
||||||
@ -163,7 +174,7 @@
|
|||||||
{"List of modules to start","Lijst met op te starten modules"}.
|
{"List of modules to start","Lijst met op te starten modules"}.
|
||||||
{"Low level update script","Lowlevel script voor de opwaardering"}.
|
{"Low level update script","Lowlevel script voor de opwaardering"}.
|
||||||
{"Make participants list public","Deelnemerslijst publiek maken"}.
|
{"Make participants list public","Deelnemerslijst publiek maken"}.
|
||||||
{"Make room captcha protected","Chatruimte beveiligen met een geautomatiseerde Turing test"}.
|
{"Make room CAPTCHA protected","Chatruimte beveiligen met een geautomatiseerde Turing test"}.
|
||||||
{"Make room members-only","Chatruimte enkel toegankelijk maken voor leden"}.
|
{"Make room members-only","Chatruimte enkel toegankelijk maken voor leden"}.
|
||||||
{"Make room moderated","Chatruimte gemodereerd maken"}.
|
{"Make room moderated","Chatruimte gemodereerd maken"}.
|
||||||
{"Make room password protected","Chatruimte beveiligen met een wachtwoord"}.
|
{"Make room password protected","Chatruimte beveiligen met een wachtwoord"}.
|
||||||
@ -176,9 +187,11 @@
|
|||||||
{"May","Mei"}.
|
{"May","Mei"}.
|
||||||
{"Members:","Groepsleden:"}.
|
{"Members:","Groepsleden:"}.
|
||||||
{"Membership is required to enter this room","U moet lid zijn om deze chatruimte te kunnen betreden"}.
|
{"Membership is required to enter this room","U moet lid zijn om deze chatruimte te kunnen betreden"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Onthou het wachtwoord, of schrijf het op en bewaar het op een veilige plaats. Met Jabber is er geen geautomatiseerde manier om het wachtwoord terug te halen als U het vergeet."}.
|
||||||
{"Memory","Geheugen"}.
|
{"Memory","Geheugen"}.
|
||||||
{"Message body","Bericht"}.
|
{"Message body","Bericht"}.
|
||||||
{"Middle Name","Tussennaam"}.
|
{"Middle Name","Tussennaam"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Minimale interval tussen stemaanvragen (in seconden)"}.
|
||||||
{"Moderator privileges required","U hebt moderatorprivileges nodig"}.
|
{"Moderator privileges required","U hebt moderatorprivileges nodig"}.
|
||||||
{"moderators only","moderators"}.
|
{"moderators only","moderators"}.
|
||||||
{"Modified modules","Gewijzigde modules"}.
|
{"Modified modules","Gewijzigde modules"}.
|
||||||
@ -189,9 +202,11 @@
|
|||||||
{"Name:","Naam:"}.
|
{"Name:","Naam:"}.
|
||||||
{"Name","Naam"}.
|
{"Name","Naam"}.
|
||||||
{"Never","Nooit"}.
|
{"Never","Nooit"}.
|
||||||
|
{"New Password:","Nieuw Wachtwoord:"}.
|
||||||
{"Nickname","Bijnaam"}.
|
{"Nickname","Bijnaam"}.
|
||||||
{"Nickname Registration at ","Registratie van een bijnaam op "}.
|
{"Nickname Registration at ","Registratie van een bijnaam op "}.
|
||||||
{"Nickname ~s does not exist in the room","De bijnaam ~s bestaat niet in deze chatruimte"}.
|
{"Nickname ~s does not exist in the room","De bijnaam ~s bestaat niet in deze chatruimte"}.
|
||||||
|
{"nobody","niemand"}.
|
||||||
{"No body provided for announce message","De mededeling bevat geen bericht"}.
|
{"No body provided for announce message","De mededeling bevat geen bericht"}.
|
||||||
{"No Data","Geen gegevens"}.
|
{"No Data","Geen gegevens"}.
|
||||||
{"Node ID","Node ID"}.
|
{"Node ID","Node ID"}.
|
||||||
@ -213,12 +228,14 @@
|
|||||||
{"Offline Messages:","Offline berichten:"}.
|
{"Offline Messages:","Offline berichten:"}.
|
||||||
{"Offline Messages","Offline berichten"}.
|
{"Offline Messages","Offline berichten"}.
|
||||||
{"OK","OK"}.
|
{"OK","OK"}.
|
||||||
|
{"Old Password:","Oud Wachtwoord:"}.
|
||||||
{"Online","Online"}.
|
{"Online","Online"}.
|
||||||
{"Online Users:","Online gebruikers:"}.
|
{"Online Users:","Online gebruikers:"}.
|
||||||
{"Online Users","Online gebruikers"}.
|
{"Online Users","Online gebruikers"}.
|
||||||
{"Only deliver notifications to available users","Notificaties alleen verzenden naar online gebruikers"}.
|
{"Only deliver notifications to available users","Notificaties alleen verzenden naar online gebruikers"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Alleen moderators en deelnemers mogen het onderwerp van deze chatruimte veranderen"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Alleen moderators en deelnemers mogen het onderwerp van deze chatruimte veranderen"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Alleen moderators mogen het onderwerp van deze chatruimte veranderen"}.
|
{"Only moderators are allowed to change the subject in this room","Alleen moderators mogen het onderwerp van deze chatruimte veranderen"}.
|
||||||
|
{"Only moderators can approve voice requests","Alleen moderators kunnen stemaanvragen goedkeuren"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Alleen aanwezigen mogen berichten naar de chatruimte verzenden"}.
|
{"Only occupants are allowed to send messages to the conference","Alleen aanwezigen mogen berichten naar de chatruimte verzenden"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Alleen aanwezigen mogen verzoeken verzenden naar de chatruimte"}.
|
{"Only occupants are allowed to send queries to the conference","Alleen aanwezigen mogen verzoeken verzenden naar de chatruimte"}.
|
||||||
{"Only service administrators are allowed to send service messages","Alleen beheerders van deze dienst mogen mededelingen verzenden naar alle chatruimtes"}.
|
{"Only service administrators are allowed to send service messages","Alleen beheerders van deze dienst mogen mededelingen verzenden naar alle chatruimtes"}.
|
||||||
@ -231,6 +248,7 @@
|
|||||||
{"Owner privileges required","U hebt eigenaarsprivileges nodig"}.
|
{"Owner privileges required","U hebt eigenaarsprivileges nodig"}.
|
||||||
{"Packet","Pakket"}.
|
{"Packet","Pakket"}.
|
||||||
{"Password ~b","Wachtwoord ~b"}.
|
{"Password ~b","Wachtwoord ~b"}.
|
||||||
|
{"Password Verification:","Wachtwoord Bevestiging:"}.
|
||||||
{"Password Verification","Wachtwoord Bevestiging"}.
|
{"Password Verification","Wachtwoord Bevestiging"}.
|
||||||
{"Password:","Wachtwoord:"}.
|
{"Password:","Wachtwoord:"}.
|
||||||
{"Password","Wachtwoord"}.
|
{"Password","Wachtwoord"}.
|
||||||
@ -241,6 +259,7 @@
|
|||||||
{"Persist items to storage","Items in het geheugen bewaren"}.
|
{"Persist items to storage","Items in het geheugen bewaren"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Merk op dat volgende opties enkel backups maken van de ingebouwde database Mnesia. Als U de ODBC module gebruikt dan moeten daarvan afzonderlijke backups gemaakt worden."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Merk op dat volgende opties enkel backups maken van de ingebouwde database Mnesia. Als U de ODBC module gebruikt dan moeten daarvan afzonderlijke backups gemaakt worden."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Wacht s.v.p. met het maken van een nieuwe stemaanvraag."}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Poort ~b"}.
|
{"Port ~b","Poort ~b"}.
|
||||||
{"Port","Poort"}.
|
{"Port","Poort"}.
|
||||||
@ -256,8 +275,10 @@
|
|||||||
{"Raw","Ruw"}.
|
{"Raw","Ruw"}.
|
||||||
{"Really delete message of the day?","Wilt u het bericht van de dag verwijderen?"}.
|
{"Really delete message of the day?","Wilt u het bericht van de dag verwijderen?"}.
|
||||||
{"Recipient is not in the conference room","De ontvanger is niet in de chatruimte"}.
|
{"Recipient is not in the conference room","De ontvanger is niet in de chatruimte"}.
|
||||||
|
{"Register a Jabber account","Registreer een Jabber-account"}.
|
||||||
{"Registered Users:","Geregistreerde gebruikers:"}.
|
{"Registered Users:","Geregistreerde gebruikers:"}.
|
||||||
{"Registered Users","Geregistreerde gebruikers"}.
|
{"Registered Users","Geregistreerde gebruikers"}.
|
||||||
|
{"Register","Registreer"}.
|
||||||
{"Registration in mod_irc for ","Registratie van "}.
|
{"Registration in mod_irc for ","Registratie van "}.
|
||||||
{"Remote copy","Op andere nodes in de cluster"}.
|
{"Remote copy","Op andere nodes in de cluster"}.
|
||||||
{"Remove All Offline Messages","Verwijder alle offline berichten"}.
|
{"Remove All Offline Messages","Verwijder alle offline berichten"}.
|
||||||
@ -294,6 +315,7 @@
|
|||||||
{"Send announcement to all users on all hosts","Stuur aankondiging aan alle gebruikers op alle hosts"}.
|
{"Send announcement to all users on all hosts","Stuur aankondiging aan alle gebruikers op alle hosts"}.
|
||||||
{"September","September"}.
|
{"September","September"}.
|
||||||
{"Server ~b","Server ~b"}.
|
{"Server ~b","Server ~b"}.
|
||||||
|
{"Server:","Server:"}.
|
||||||
{"Set message of the day and send to online users","Bericht van de dag instellen en verzenden naar online gebruikers"}.
|
{"Set message of the day and send to online users","Bericht van de dag instellen en verzenden naar online gebruikers"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Stel bericht-van-de-dag in op alle hosts en stuur naar aanwezige gebruikers"}.
|
{"Set message of the day on all hosts and send to online users","Stel bericht-van-de-dag in op alle hosts en stuur naar aanwezige gebruikers"}.
|
||||||
{"Shared Roster Groups","Gedeelde rostergroepen"}.
|
{"Shared Roster Groups","Gedeelde rostergroepen"}.
|
||||||
@ -301,6 +323,7 @@
|
|||||||
{"Show Ordinary Table","Deel van tabel laten zien"}.
|
{"Show Ordinary Table","Deel van tabel laten zien"}.
|
||||||
{"Shut Down Service","Stop Service"}.
|
{"Shut Down Service","Stop Service"}.
|
||||||
{"~s invites you to the room ~s","~s nodigt je uit voor het groepsgesprek ~s"}.
|
{"~s invites you to the room ~s","~s nodigt je uit voor het groepsgesprek ~s"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Sommige Jabber-clienten kunnen het wachtwoord opslaan op Uw computer. Gebruik deze mogelijkheid alleen als U vertrouwd dat Uw computer afdoende beveiligd is."}.
|
||||||
{"Specify the access model","Geef toegangsmodel"}.
|
{"Specify the access model","Geef toegangsmodel"}.
|
||||||
{"Specify the event message type","Geef type van eventbericht"}.
|
{"Specify the event message type","Geef type van eventbericht"}.
|
||||||
{"Specify the publisher model","Publicatietype opgeven"}.
|
{"Specify the publisher model","Publicatietype opgeven"}.
|
||||||
@ -325,9 +348,18 @@
|
|||||||
{"Sunday","Zondag"}.
|
{"Sunday","Zondag"}.
|
||||||
{"That nickname is already in use by another occupant","Deze bijnaam is al in gebruik door een andere aanwezige"}.
|
{"That nickname is already in use by another occupant","Deze bijnaam is al in gebruik door een andere aanwezige"}.
|
||||||
{"That nickname is registered by another person","Deze bijnaam is al geregistreerd door iemand anders"}.
|
{"That nickname is registered by another person","Deze bijnaam is al geregistreerd door iemand anders"}.
|
||||||
{"The captcha is valid.","De geautomatiseerde Turing-test is geslaagd."}.
|
{"The CAPTCHA is valid.","De geautomatiseerde Turing-test is geslaagd."}.
|
||||||
|
{"The CAPTCHA verification has failed","De CAPTCHA-verificatie is mislukt"}.
|
||||||
{"The collections with which a node is affiliated","De collecties waar een node mee is gerelateerd"}.
|
{"The collections with which a node is affiliated","De collecties waar een node mee is gerelateerd"}.
|
||||||
{"the password is","het wachtwoord is"}.
|
{"the password is","het wachtwoord is"}.
|
||||||
|
{"The password is too weak","Het wachtwoord is te zwak"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","Het wachtwoord van Uw Jabber-account is succesvol veranderd."}.
|
||||||
|
{"There was an error changing the password: ","Er was een fout bij het veranderen van het wachtwoord:"}.
|
||||||
|
{"There was an error creating the account: ","Er was een fout bij het creeern van de account:"}.
|
||||||
|
{"There was an error deleting the account: ","Er was een fout bij het verwijderen van de account."}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Dit is niet hoofdlettergevoelig: macbeth is hetzelfde als MacBeth en Macbeth."}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Deze pagina maakt het mogelijk een Jabber-account te registreren op deze server. Uw JID (Jabber IDentiteit) zal er als volg uit zien: gebruikersnaam@server. Lees de instructies zorgvuldig teneinde de velden correct in te vullen."}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Deze pagina maakt het mogelijk een Jabber-account op deze server op te heffen."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmeldingsbericht"}.
|
{"This participant is kicked from the room because he sent an error message","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmeldingsbericht"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmeldingsbericht aan een andere deelnemer"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmeldingsbericht aan een andere deelnemer"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmelding-aanwezigheid"}.
|
{"This participant is kicked from the room because he sent an error presence","Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmelding-aanwezigheid"}.
|
||||||
@ -336,6 +368,7 @@
|
|||||||
{"Time delay","Vertraging"}.
|
{"Time delay","Vertraging"}.
|
||||||
{"Time","Tijd"}.
|
{"Time","Tijd"}.
|
||||||
{"To","Aan"}.
|
{"To","Aan"}.
|
||||||
|
{"Too many CAPTCHA requests","Te veel CAPTCHA-aanvragen"}.
|
||||||
{"To ~s","Naar ~s"}.
|
{"To ~s","Naar ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Dataverkeerslimiet overschreden"}.
|
{"Traffic rate limit is exceeded","Dataverkeerslimiet overschreden"}.
|
||||||
{"Transactions Aborted:","Afgebroken transacties:"}.
|
{"Transactions Aborted:","Afgebroken transacties:"}.
|
||||||
@ -343,8 +376,10 @@
|
|||||||
{"Transactions Logged:","Gelogde transacties:"}.
|
{"Transactions Logged:","Gelogde transacties:"}.
|
||||||
{"Transactions Restarted:","Herstarte transacties:"}.
|
{"Transactions Restarted:","Herstarte transacties:"}.
|
||||||
{"Tuesday","Dinsdag"}.
|
{"Tuesday","Dinsdag"}.
|
||||||
{"Unable to generate a captcha","Het generen van een gautomatiseerde Turing test is mislukt"}.
|
{"Unable to generate a CAPTCHA","Het generen van een CAPTCHA is mislukt"}.
|
||||||
{"Unauthorized","Niet geautoriseerd"}.
|
{"Unauthorized","Niet geautoriseerd"}.
|
||||||
|
{"Unregister a Jabber account","Opheffen van Jabber-account"}.
|
||||||
|
{"Unregister","Opheffen"}.
|
||||||
{"Update","Bijwerken"}.
|
{"Update","Bijwerken"}.
|
||||||
{"Update message of the day (don't send)","Bericht van de dag bijwerken (niet verzenden)"}.
|
{"Update message of the day (don't send)","Bericht van de dag bijwerken (niet verzenden)"}.
|
||||||
{"Update message of the day on all hosts (don't send)","Verander bericht-van-de-dag op alle hosts (niet versturen)"}.
|
{"Update message of the day on all hosts (don't send)","Verander bericht-van-de-dag op alle hosts (niet versturen)"}.
|
||||||
@ -355,7 +390,9 @@
|
|||||||
{"Use of STARTTLS required","Gebruik van STARTTLS is vereist"}.
|
{"Use of STARTTLS required","Gebruik van STARTTLS is vereist"}.
|
||||||
{"User ","Gebruiker "}.
|
{"User ","Gebruiker "}.
|
||||||
{"User","Gebruiker"}.
|
{"User","Gebruiker"}.
|
||||||
|
{"User JID","JID Gebruiker"}.
|
||||||
{"User Management","Gebruikersbeheer"}.
|
{"User Management","Gebruikersbeheer"}.
|
||||||
|
{"Username:","Gebruikersnaam:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Het is gebruikers niet toegestaan zo snel achter elkaar te registreren"}.
|
{"Users are not allowed to register accounts so quickly","Het is gebruikers niet toegestaan zo snel achter elkaar te registreren"}.
|
||||||
{"Users","Gebruikers"}.
|
{"Users","Gebruikers"}.
|
||||||
{"Users Last Activity","Laatste activiteit van gebruikers"}.
|
{"Users Last Activity","Laatste activiteit van gebruikers"}.
|
||||||
@ -364,13 +401,21 @@
|
|||||||
{"Virtual Hosts","Virtuele hosts"}.
|
{"Virtual Hosts","Virtuele hosts"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Het is bezoekers niet toegestaan hun naam te veranderen in dit kanaal"}.
|
{"Visitors are not allowed to change their nicknames in this room","Het is bezoekers niet toegestaan hun naam te veranderen in dit kanaal"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Bezoekers mogen geen berichten verzenden naar alle aanwezigen"}.
|
{"Visitors are not allowed to send messages to all occupants","Bezoekers mogen geen berichten verzenden naar alle aanwezigen"}.
|
||||||
|
{"Voice requests are disabled in this conference","Stemaanvragen zijn uitgeschakeld voor deze chatruimte"}.
|
||||||
|
{"Voice request","Stemaanvraag"}.
|
||||||
{"Wednesday","Woensdag"}.
|
{"Wednesday","Woensdag"}.
|
||||||
{"When to send the last published item","Wanneer het laatst gepubliceerde item verzonden moet worden"}.
|
{"When to send the last published item","Wanneer het laatst gepubliceerde item verzonden moet worden"}.
|
||||||
{"Whether to allow subscriptions","Abonnementsaanvraag toestaan"}.
|
{"Whether to allow subscriptions","Abonnementsaanvraag toestaan"}.
|
||||||
|
{"You can later change your password using a Jabber client.","U can het wachtwoord later veranderen met een Jabber-client."}.
|
||||||
{"You have been banned from this room","U werd verbannen uit deze chatruimte"}.
|
{"You have been banned from this room","U werd verbannen uit deze chatruimte"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","U moet het veld \"bijnaam\" invullen"}.
|
{"You must fill in field \"Nickname\" in the form","U moet het veld \"bijnaam\" invullen"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","U hebt een client nodig die x:data en CAPTCHA ondersteunt om een bijnaam te registreren"}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","U hebt een client nodig die x:data ondersteunt om een bijnaam te registreren"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","U hebt een client nodig die x:data ondersteunt om dit IRC-transport in te stellen"}.
|
{"You need an x:data capable client to configure mod_irc settings","U hebt een client nodig die x:data ondersteunt om dit IRC-transport in te stellen"}.
|
||||||
{"You need an x:data capable client to configure room","U hebt een client nodig die x:data ondersteunt om deze chatruimte in te stellen"}.
|
{"You need an x:data capable client to configure room","U hebt een client nodig die x:data ondersteunt om deze chatruimte in te stellen"}.
|
||||||
{"You need an x:data capable client to search","U hebt een client nodig die x:data ondersteunt om te zoeken"}.
|
{"You need an x:data capable client to search","U hebt een client nodig die x:data ondersteunt om te zoeken"}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","Uw actieve privacy-lijst verbied het routeren van dit stanza."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Te veel offline berichten voor dit contactpersoon. Het bericht is niet opgeslagen."}.
|
{"Your contact offline message queue is full. The message has been discarded.","Te veel offline berichten voor dit contactpersoon. Het bericht is niet opgeslagen."}.
|
||||||
|
{"Your Jabber account was successfully created.","Uw Jabber-account is succesvol gecreeerd."}.
|
||||||
|
{"Your Jabber account was successfully deleted.","Uw Jabber-account is succesvol verwijderd."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Uw berichten aan ~s worden geblokkeerd. Om ze te deblokkeren, ga naar ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Uw berichten aan ~s worden geblokkeerd. Om ze te deblokkeren, ga naar ~s"}.
|
||||||
|
757
src/msgs/nl.po
757
src/msgs/nl.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Tillat brukere å sende invitasjoner"}.
|
{"Allow users to send invites","Tillat brukere å sende invitasjoner"}.
|
||||||
{"Allow users to send private messages","Tillat brukere å sende private meldinger"}.
|
{"Allow users to send private messages","Tillat brukere å sende private meldinger"}.
|
||||||
{"Allow visitors to change nickname","Tillat besøkende å endre kallenavn"}.
|
{"Allow visitors to change nickname","Tillat besøkende å endre kallenavn"}.
|
||||||
|
{"Allow visitors to send private messages to","Tillat brukere å sende private meldinger til"}.
|
||||||
{"Allow visitors to send status text in presence updates","Tillat besøkende å sende status tekst i "}.
|
{"Allow visitors to send status text in presence updates","Tillat besøkende å sende status tekst i "}.
|
||||||
|
{"Allow visitors to send voice requests","Tillat brukere å sende lyd forespørsler"}.
|
||||||
{"All Users","Alle Brukere"}.
|
{"All Users","Alle Brukere"}.
|
||||||
{"Announcements","Kunngjøringer"}.
|
{"Announcements","Kunngjøringer"}.
|
||||||
{"anyone","hvem som helst"}.
|
{"anyone","hvem som helst"}.
|
||||||
@ -33,8 +35,10 @@
|
|||||||
{"Backup to File at ","Sikkerhetskopiere til Fil på "}.
|
{"Backup to File at ","Sikkerhetskopiere til Fil på "}.
|
||||||
{"Bad format","Feil format"}.
|
{"Bad format","Feil format"}.
|
||||||
{"Birthday","Fødselsdag"}.
|
{"Birthday","Fødselsdag"}.
|
||||||
|
{"CAPTCHA web page","CAPTCHA web side"}.
|
||||||
{"Change Password","Endre Passord"}.
|
{"Change Password","Endre Passord"}.
|
||||||
{"Change User Password","Endre Brukers Passord"}.
|
{"Change User Password","Endre Brukers Passord"}.
|
||||||
|
{"Characters not allowed:","Ikke godtatte tegn:"}.
|
||||||
{"Chatroom configuration modified","Samtalerommets konfigurasjon er endret"}.
|
{"Chatroom configuration modified","Samtalerommets konfigurasjon er endret"}.
|
||||||
{"Chatroom is created","Samtalerom er opprettet"}.
|
{"Chatroom is created","Samtalerom er opprettet"}.
|
||||||
{"Chatroom is destroyed","Samtalerom er fjernet"}.
|
{"Chatroom is destroyed","Samtalerom er fjernet"}.
|
||||||
@ -69,9 +73,11 @@
|
|||||||
{"Description:","Beskrivelse:"}.
|
{"Description:","Beskrivelse:"}.
|
||||||
{"Disc only copy","Kun diskkopi"}.
|
{"Disc only copy","Kun diskkopi"}.
|
||||||
{"Displayed Groups:","Viste grupper:"}.
|
{"Displayed Groups:","Viste grupper:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","Ikke fortell passordet til noen, ikke en gang til administratoren av Jabber serveren."}.
|
||||||
{"Dump Backup to Text File at ","Dump Sikkerhetskopi til Tekstfil på "}.
|
{"Dump Backup to Text File at ","Dump Sikkerhetskopi til Tekstfil på "}.
|
||||||
{"Dump to Text File","Dump til Tekstfil"}.
|
{"Dump to Text File","Dump til Tekstfil"}.
|
||||||
{"Edit Properties","Redigere Egenskaper"}.
|
{"Edit Properties","Redigere Egenskaper"}.
|
||||||
|
{"Either approve or decline the voice request.","Enten godkjenn eller forby lyd forespørselen"}.
|
||||||
{"ejabberd IRC module","ejabberd IRC modul"}.
|
{"ejabberd IRC module","ejabberd IRC modul"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC modul"}.
|
{"ejabberd MUC module","ejabberd MUC modul"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}.
|
||||||
@ -95,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Feil"}.
|
{"Error","Feil"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Eksempel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Eksempel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Ekskluder Jabber IDer fra CAPTCHA utfordring"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksporter data om alle brukere i en server til PIEFXIS filer"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksporter data om alle brukere i en server til PIEFXIS filer"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksporter data om alle brukere i en host til PIEFXIS filer (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksporter data om alle brukere i en host til PIEFXIS filer (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Feilet i forsøk på å hente JID fra din lyd forespørsel godkjenning"}.
|
||||||
{"Family Name","Etternavn"}.
|
{"Family Name","Etternavn"}.
|
||||||
{"February","februar"}.
|
{"February","februar"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Fyll inn felt for å søke etter Jabber brukere"}.
|
{"Fill in fields to search for any matching Jabber User","Fyll inn felt for å søke etter Jabber brukere"}.
|
||||||
@ -110,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Vis Brukers Siste Påloggings Tidspunkt"}.
|
{"Get User Last Login Time","Vis Brukers Siste Påloggings Tidspunkt"}.
|
||||||
{"Get User Password","Hent Brukers Passord"}.
|
{"Get User Password","Hent Brukers Passord"}.
|
||||||
{"Get User Statistics","Vis Bruker Statistikk"}.
|
{"Get User Statistics","Vis Bruker Statistikk"}.
|
||||||
|
{"Grant voice to this person?","Gi lyd til denne personen?"}.
|
||||||
{"Group ","Gruppe "}.
|
{"Group ","Gruppe "}.
|
||||||
{"Groups","Grupper"}.
|
{"Groups","Grupper"}.
|
||||||
{"has been banned","har blitt bannlyst"}.
|
{"has been banned","har blitt bannlyst"}.
|
||||||
@ -119,6 +128,7 @@
|
|||||||
{"has been kicked","har blitt kastet ut"}.
|
{"has been kicked","har blitt kastet ut"}.
|
||||||
{" has set the subject to: "," har satt emnet til: "}.
|
{" has set the subject to: "," har satt emnet til: "}.
|
||||||
{"Host","Maskin"}.
|
{"Host","Maskin"}.
|
||||||
|
{"If you don't see the CAPTCHA image here, visit the web page.","Dersom du ikke ser CAPTCHA bilde her, besøk web siden. "}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Om du ønsker å spesifisere tekstkoding for IRC tjenere, fyller du ut en liste med verdier i formatet '{\"irc server\", \"encoding\", port, \"password\"}'. Denne tjenesten bruker \"~s\" som standard, port ~p, empty password."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","Om du ønsker å spesifisere tekstkoding for IRC tjenere, fyller du ut en liste med verdier i formatet '{\"irc server\", \"encoding\", port, \"password\"}'. Denne tjenesten bruker \"~s\" som standard, port ~p, empty password."}.
|
||||||
{"Import Directory","Importer Katalog"}.
|
{"Import Directory","Importer Katalog"}.
|
||||||
{"Import File","Importer File"}.
|
{"Import File","Importer File"}.
|
||||||
@ -144,6 +154,7 @@
|
|||||||
{"It is not allowed to send private messages","Det er ikke tillatt å sende private meldinger"}.
|
{"It is not allowed to send private messages","Det er ikke tillatt å sende private meldinger"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","Det er ikke tillatt å sende private meldinger med typen "}.
|
{"It is not allowed to send private messages of type \"groupchat\"","Det er ikke tillatt å sende private meldinger med typen "}.
|
||||||
{"It is not allowed to send private messages to the conference","Det er ikke tillatt å sende private meldinger til "}.
|
{"It is not allowed to send private messages to the conference","Det er ikke tillatt å sende private meldinger til "}.
|
||||||
|
{"Jabber Account Registration","Jabber Konto Registrering"}.
|
||||||
{"Jabber ID","Jabber ID"}.
|
{"Jabber ID","Jabber ID"}.
|
||||||
{"Jabber ID ~s is invalid","Ugyldig Jabber ID ~s"}.
|
{"Jabber ID ~s is invalid","Ugyldig Jabber ID ~s"}.
|
||||||
{"January","januar"}.
|
{"January","januar"}.
|
||||||
@ -163,7 +174,7 @@
|
|||||||
{"List of modules to start","Liste over moduler som skal startes"}.
|
{"List of modules to start","Liste over moduler som skal startes"}.
|
||||||
{"Low level update script","Lavnivå oppdaterings skript"}.
|
{"Low level update script","Lavnivå oppdaterings skript"}.
|
||||||
{"Make participants list public","Gjør deltakerlisten offentlig"}.
|
{"Make participants list public","Gjør deltakerlisten offentlig"}.
|
||||||
{"Make room captcha protected","Gjør rommet captcha beskyttet"}.
|
{"Make room CAPTCHA protected","Gjør rommet CAPTCHA beskyttet"}.
|
||||||
{"Make room members-only","Gjør rommet tilgjengelig kun for medlemmer"}.
|
{"Make room members-only","Gjør rommet tilgjengelig kun for medlemmer"}.
|
||||||
{"Make room moderated","Gjør rommet redaktørstyrt"}.
|
{"Make room moderated","Gjør rommet redaktørstyrt"}.
|
||||||
{"Make room password protected","Passordbeskytt rommet"}.
|
{"Make room password protected","Passordbeskytt rommet"}.
|
||||||
@ -176,9 +187,11 @@
|
|||||||
{"May","mai"}.
|
{"May","mai"}.
|
||||||
{"Membership is required to enter this room","Medlemskap kreves for tilgang til samtalerommet"}.
|
{"Membership is required to enter this room","Medlemskap kreves for tilgang til samtalerommet"}.
|
||||||
{"Members:","Medlemmer:"}.
|
{"Members:","Medlemmer:"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Husk passordet, eller skriv det ned på et papir lagret på et trygt sted. I Jabber er det ingen automatisert måte å gjenskape passordet om du glemmer det. "}.
|
||||||
{"Memory","Minne"}.
|
{"Memory","Minne"}.
|
||||||
{"Message body","Meldingskropp"}.
|
{"Message body","Meldingskropp"}.
|
||||||
{"Middle Name","Mellomnavn"}.
|
{"Middle Name","Mellomnavn"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Minimums interval mellom lyd forespørsler (i sekunder)"}.
|
||||||
{"Moderator privileges required","Redaktørprivilegier kreves"}.
|
{"Moderator privileges required","Redaktørprivilegier kreves"}.
|
||||||
{"moderators only","kun for redaktører"}.
|
{"moderators only","kun for redaktører"}.
|
||||||
{"Modified modules","Endrede moduler"}.
|
{"Modified modules","Endrede moduler"}.
|
||||||
@ -189,9 +202,11 @@
|
|||||||
{"Name:","Navn:"}.
|
{"Name:","Navn:"}.
|
||||||
{"Name","Navn"}.
|
{"Name","Navn"}.
|
||||||
{"Never","Aldri"}.
|
{"Never","Aldri"}.
|
||||||
|
{"New Password:","Nytt Passord:"}.
|
||||||
{"Nickname","Kallenavn"}.
|
{"Nickname","Kallenavn"}.
|
||||||
{"Nickname Registration at ","Registrer Kallenavn på "}.
|
{"Nickname Registration at ","Registrer Kallenavn på "}.
|
||||||
{"Nickname ~s does not exist in the room","Kallenavn ~s eksisterer ikke i dette rommet"}.
|
{"Nickname ~s does not exist in the room","Kallenavn ~s eksisterer ikke i dette rommet"}.
|
||||||
|
{"nobody","ingen"}.
|
||||||
{"No body provided for announce message","Ingen meldingskropp gitt for kunngjørings melding"}.
|
{"No body provided for announce message","Ingen meldingskropp gitt for kunngjørings melding"}.
|
||||||
{"No Data","Ingen Data"}.
|
{"No Data","Ingen Data"}.
|
||||||
{"Node ID","Node ID"}.
|
{"Node ID","Node ID"}.
|
||||||
@ -213,12 +228,14 @@
|
|||||||
{"Offline Messages:","Frakoblede Meldinger:"}.
|
{"Offline Messages:","Frakoblede Meldinger:"}.
|
||||||
{"Offline Messages","Frakoblede Meldinger"}.
|
{"Offline Messages","Frakoblede Meldinger"}.
|
||||||
{"OK","OK"}.
|
{"OK","OK"}.
|
||||||
|
{"Old Password:","Gammelt Passord:"}.
|
||||||
{"Online","Tilkoblet"}.
|
{"Online","Tilkoblet"}.
|
||||||
{"Online Users:","Tilkoblede Brukere:"}.
|
{"Online Users:","Tilkoblede Brukere:"}.
|
||||||
{"Online Users","Tilkoblede Brukere"}.
|
{"Online Users","Tilkoblede Brukere"}.
|
||||||
{"Only deliver notifications to available users","Send kunngjøringer bare til tilgjengelige brukere"}.
|
{"Only deliver notifications to available users","Send kunngjøringer bare til tilgjengelige brukere"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Bare redaktører og deltakere kan endre emnet i dette rommet"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Bare redaktører og deltakere kan endre emnet i dette rommet"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Bare ordstyrer tillates å endre emnet i dette rommet"}.
|
{"Only moderators are allowed to change the subject in this room","Bare ordstyrer tillates å endre emnet i dette rommet"}.
|
||||||
|
{"Only moderators can approve voice requests","Bare ordstyrer kan godkjenne lyd forespørsler"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Bare deltakere får sende normale meldinger til konferansen"}.
|
{"Only occupants are allowed to send messages to the conference","Bare deltakere får sende normale meldinger til konferansen"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Bare deltakere er tillatt å sende forespørsler til "}.
|
{"Only occupants are allowed to send queries to the conference","Bare deltakere er tillatt å sende forespørsler til "}.
|
||||||
{"Only service administrators are allowed to send service messages","Bare tjeneste administratorer er tilatt å sende tjeneste "}.
|
{"Only service administrators are allowed to send service messages","Bare tjeneste administratorer er tilatt å sende tjeneste "}.
|
||||||
@ -233,6 +250,7 @@
|
|||||||
{"Password ~b","Passord ~b"}.
|
{"Password ~b","Passord ~b"}.
|
||||||
{"Password:","Passord:"}.
|
{"Password:","Passord:"}.
|
||||||
{"Password","Passord"}.
|
{"Password","Passord"}.
|
||||||
|
{"Password Verification:","Passord Bekreftelse:"}.
|
||||||
{"Password Verification","Passord Bekreftelse"}.
|
{"Password Verification","Passord Bekreftelse"}.
|
||||||
{"Path to Dir","Sti til Katalog"}.
|
{"Path to Dir","Sti til Katalog"}.
|
||||||
{"Path to File","Sti til Fil"}.
|
{"Path to File","Sti til Fil"}.
|
||||||
@ -241,6 +259,7 @@
|
|||||||
{"Persist items to storage","Vedvarende elementer til lagring"}.
|
{"Persist items to storage","Vedvarende elementer til lagring"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Merk at disse valgene vil bare sikkerhetskopiere den innebygde Mnesia databasen. Dersom du bruker ODBC modulen må du også ta backup av din SQL database."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Merk at disse valgene vil bare sikkerhetskopiere den innebygde Mnesia databasen. Dersom du bruker ODBC modulen må du også ta backup av din SQL database."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Vennligst vent en stund før du sender en ny lyd forespørsel"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Port ~b"}.
|
{"Port ~b","Port ~b"}.
|
||||||
{"Port","Port"}.
|
{"Port","Port"}.
|
||||||
@ -256,8 +275,10 @@
|
|||||||
{"Raw","Rå"}.
|
{"Raw","Rå"}.
|
||||||
{"Really delete message of the day?","Virkelig slette melding for dagen?"}.
|
{"Really delete message of the day?","Virkelig slette melding for dagen?"}.
|
||||||
{"Recipient is not in the conference room","Mottakeren er ikke i konferanserommet"}.
|
{"Recipient is not in the conference room","Mottakeren er ikke i konferanserommet"}.
|
||||||
|
{"Register a Jabber account","Registrer en Jabber konto"}.
|
||||||
{"Registered Users:","Registrerte Brukere:"}.
|
{"Registered Users:","Registrerte Brukere:"}.
|
||||||
{"Registered Users","Registrerte Brukere"}.
|
{"Registered Users","Registrerte Brukere"}.
|
||||||
|
{"Register","Registrer"}.
|
||||||
{"Registration in mod_irc for ","Registrering i mod_irc for "}.
|
{"Registration in mod_irc for ","Registrering i mod_irc for "}.
|
||||||
{"Remote copy","Lagres ikke lokalt"}.
|
{"Remote copy","Lagres ikke lokalt"}.
|
||||||
{"Remove All Offline Messages","Fjern Alle Frakoblede Meldinger"}.
|
{"Remove All Offline Messages","Fjern Alle Frakoblede Meldinger"}.
|
||||||
@ -294,6 +315,7 @@
|
|||||||
{"Send announcement to all users","Send kunngjøring til alle brukere"}.
|
{"Send announcement to all users","Send kunngjøring til alle brukere"}.
|
||||||
{"September","september"}.
|
{"September","september"}.
|
||||||
{"Server ~b","Server ~b"}.
|
{"Server ~b","Server ~b"}.
|
||||||
|
{"Server:","Server:"}.
|
||||||
{"Set message of the day and send to online users","Angi melding for dagen og send til tilkoblede brukere"}.
|
{"Set message of the day and send to online users","Angi melding for dagen og send til tilkoblede brukere"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Angi melding for dagen på alle maskiner og send til "}.
|
{"Set message of the day on all hosts and send to online users","Angi melding for dagen på alle maskiner og send til "}.
|
||||||
{"Shared Roster Groups","Delte Kontaktgrupper"}.
|
{"Shared Roster Groups","Delte Kontaktgrupper"}.
|
||||||
@ -301,6 +323,7 @@
|
|||||||
{"Show Ordinary Table","Vis Ordinær Tabell"}.
|
{"Show Ordinary Table","Vis Ordinær Tabell"}.
|
||||||
{"Shut Down Service","Avslutt Tjeneste"}.
|
{"Shut Down Service","Avslutt Tjeneste"}.
|
||||||
{"~s invites you to the room ~s","~s inviterer deg til rommet ~s"}.
|
{"~s invites you to the room ~s","~s inviterer deg til rommet ~s"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Noen Jabber klienter kan lagre passordet på datamaskinen. Bruk bare den funksjonen dersom du er sikker på at maskinen er trygg."}.
|
||||||
{"Specify the access model","Spesifiser aksess modellen"}.
|
{"Specify the access model","Spesifiser aksess modellen"}.
|
||||||
{"Specify the event message type","Spesifiser hendelsesbeskjed type"}.
|
{"Specify the event message type","Spesifiser hendelsesbeskjed type"}.
|
||||||
{"Specify the publisher model","Angi publiserings modell"}.
|
{"Specify the publisher model","Angi publiserings modell"}.
|
||||||
@ -325,9 +348,18 @@
|
|||||||
{"Sunday","søndag"}.
|
{"Sunday","søndag"}.
|
||||||
{"That nickname is already in use by another occupant","Det kallenavnet er allerede i bruk av en annen deltaker"}.
|
{"That nickname is already in use by another occupant","Det kallenavnet er allerede i bruk av en annen deltaker"}.
|
||||||
{"That nickname is registered by another person","Det kallenavnet er registrert av en annen person"}.
|
{"That nickname is registered by another person","Det kallenavnet er registrert av en annen person"}.
|
||||||
{"The captcha is valid.","Captchaen er ikke gyldig"}.
|
{"The CAPTCHA is valid.","Captchaen er ikke gyldig"}.
|
||||||
|
{"The CAPTCHA verification has failed","CAPTCHA godkjenningen har feilet"}.
|
||||||
{"The collections with which a node is affiliated","Samlingene som en node er assosiert med"}.
|
{"The collections with which a node is affiliated","Samlingene som en node er assosiert med"}.
|
||||||
{"the password is","passordet er"}.
|
{"the password is","passordet er"}.
|
||||||
|
{"The password is too weak","Passordet er for svakt"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","Passordet for din Jabber konto ble endret."}.
|
||||||
|
{"There was an error changing the password: ","En feil skjedde under endring av passordet:"}.
|
||||||
|
{"There was an error creating the account: ","En feil skjedde under oppretting av kontoen:"}.
|
||||||
|
{"There was an error deleting the account: ","En feil skjedde under sletting av kontoen: "}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Denne er ufølsom for små og store bokstaver: macbeth er det samme som MacBeth og Macbeth. "}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Denne siden lar deg lage en Jabber konto på denne Jabber serveren. Din JID (Jabber ID) vil være i formatet: brukernavn@server. Vennligst les instruksjonene nøye slik at du fyller ut skjemaet riktig."}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Denne siden lar deg avregistrere en Jabber konto på denne Jabber serveren."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding"}.
|
{"This participant is kicked from the room because he sent an error message","Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding til en annen deltaker"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding til en annen deltaker"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Denne deltakeren er kastet ut av rommet fordi han sendte feil tilstederværelse"}.
|
{"This participant is kicked from the room because he sent an error presence","Denne deltakeren er kastet ut av rommet fordi han sendte feil tilstederværelse"}.
|
||||||
@ -335,6 +367,7 @@
|
|||||||
{"Thursday","torsdag"}.
|
{"Thursday","torsdag"}.
|
||||||
{"Time delay","Tids forsinkelse"}.
|
{"Time delay","Tids forsinkelse"}.
|
||||||
{"Time","Tid"}.
|
{"Time","Tid"}.
|
||||||
|
{"Too many CAPTCHA requests","For mange CAPTCHA forespørsler"}.
|
||||||
{"To ~s","Til ~s"}.
|
{"To ~s","Til ~s"}.
|
||||||
{"To","Til"}.
|
{"To","Til"}.
|
||||||
{"Traffic rate limit is exceeded","Trafikkmengde grense overskredet"}.
|
{"Traffic rate limit is exceeded","Trafikkmengde grense overskredet"}.
|
||||||
@ -343,8 +376,10 @@
|
|||||||
{"Transactions Logged:","Loggede Transasksjoner:"}.
|
{"Transactions Logged:","Loggede Transasksjoner:"}.
|
||||||
{"Transactions Restarted:","Omstartede Transasksjoner:"}.
|
{"Transactions Restarted:","Omstartede Transasksjoner:"}.
|
||||||
{"Tuesday","tirsdag"}.
|
{"Tuesday","tirsdag"}.
|
||||||
{"Unable to generate a captcha","Umulig å generere en captcha"}.
|
{"Unable to generate a CAPTCHA","Umulig å generere en CAPTCHA"}.
|
||||||
{"Unauthorized","Uautorisert"}.
|
{"Unauthorized","Uautorisert"}.
|
||||||
|
{"Unregister a Jabber account","Avregistrer en Jabber konto"}.
|
||||||
|
{"Unregister","Avregistrer"}.
|
||||||
{"Update message of the day (don't send)","Oppdater melding for dagen (ikke send)"}.
|
{"Update message of the day (don't send)","Oppdater melding for dagen (ikke send)"}.
|
||||||
{"Update message of the day on all hosts (don't send)","Oppdater melding for dagen på alle maskiner (ikke send)"}.
|
{"Update message of the day on all hosts (don't send)","Oppdater melding for dagen på alle maskiner (ikke send)"}.
|
||||||
{"Update ","Oppdater "}.
|
{"Update ","Oppdater "}.
|
||||||
@ -355,7 +390,9 @@
|
|||||||
{"Use of STARTTLS required","Bruk av STARTTLS kreves"}.
|
{"Use of STARTTLS required","Bruk av STARTTLS kreves"}.
|
||||||
{"User ","Bruker "}.
|
{"User ","Bruker "}.
|
||||||
{"User","Bruker"}.
|
{"User","Bruker"}.
|
||||||
|
{"User JID","Bruker JID"}.
|
||||||
{"User Management","Bruker Behandling"}.
|
{"User Management","Bruker Behandling"}.
|
||||||
|
{"Username:","Brukernavn:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Brukere får ikke lov til registrere kontoer så fort"}.
|
{"Users are not allowed to register accounts so quickly","Brukere får ikke lov til registrere kontoer så fort"}.
|
||||||
{"Users","Brukere"}.
|
{"Users","Brukere"}.
|
||||||
{"Users Last Activity","Brukers Siste Aktivitet"}.
|
{"Users Last Activity","Brukers Siste Aktivitet"}.
|
||||||
@ -364,13 +401,21 @@
|
|||||||
{"Virtual Hosts","Virtuella Maskiner"}.
|
{"Virtual Hosts","Virtuella Maskiner"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Besøkende får ikke lov å endre kallenavn i dette "}.
|
{"Visitors are not allowed to change their nicknames in this room","Besøkende får ikke lov å endre kallenavn i dette "}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Besøkende får ikke sende meldinger til alle deltakere"}.
|
{"Visitors are not allowed to send messages to all occupants","Besøkende får ikke sende meldinger til alle deltakere"}.
|
||||||
|
{"Voice request","Lyd forespørsel"}.
|
||||||
|
{"Voice requests are disabled in this conference","Lyd forespørsler er blokkert i denne konferansen"}.
|
||||||
{"Wednesday","onsdag"}.
|
{"Wednesday","onsdag"}.
|
||||||
{"When to send the last published item","Når skal siste publiserte artikkel sendes"}.
|
{"When to send the last published item","Når skal siste publiserte artikkel sendes"}.
|
||||||
{"Whether to allow subscriptions","Om man skal tillate abonnenter"}.
|
{"Whether to allow subscriptions","Om man skal tillate abonnenter"}.
|
||||||
|
{"You can later change your password using a Jabber client.","Du kan når som helst endre passordet via en Jabber klient."}.
|
||||||
{"You have been banned from this room","Du har blitt bannlyst i dette rommet."}.
|
{"You have been banned from this room","Du har blitt bannlyst i dette rommet."}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Du må fylle inn feltet \"Nickname\" i skjemaet"}.
|
{"You must fill in field \"Nickname\" in the form","Du må fylle inn feltet \"Nickname\" i skjemaet"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","Du trenger en klient som støtter x:data og CAPTCHA for registrering "}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","Du trenger en klient som støtter x:data for å registrere kallenavnet"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","Du trenger en x:data kompatibel klient for å konfigurere mod_irc instillinger"}.
|
{"You need an x:data capable client to configure mod_irc settings","Du trenger en x:data kompatibel klient for å konfigurere mod_irc instillinger"}.
|
||||||
{"You need an x:data capable client to configure room","Du trenger en klient som støtter x:data for å "}.
|
{"You need an x:data capable client to configure room","Du trenger en klient som støtter x:data for å "}.
|
||||||
{"You need an x:data capable client to search","Du tregner en klient som støtter x:data for å kunne "}.
|
{"You need an x:data capable client to search","Du tregner en klient som støtter x:data for å kunne "}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","Din aktive privat liste har blokkert rutingen av denne strofen."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Kontaktens frakoblede meldingskø er full. Meldingen har blitt kassert."}.
|
{"Your contact offline message queue is full. The message has been discarded.","Kontaktens frakoblede meldingskø er full. Meldingen har blitt kassert."}.
|
||||||
|
{"Your Jabber account was successfully created.","Din Jabber konto ble opprettet"}.
|
||||||
|
{"Your Jabber account was successfully deleted.","Dni Jabber konto er blitt sltettet."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Dine meldinger til ~s blir blokkert. For å åpne igjen, besøk ~s"}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","Dine meldinger til ~s blir blokkert. For å åpne igjen, besøk ~s"}.
|
||||||
|
762
src/msgs/no.po
762
src/msgs/no.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Pozwól użytkownikom wysyłać zaproszenia"}.
|
{"Allow users to send invites","Pozwól użytkownikom wysyłać zaproszenia"}.
|
||||||
{"Allow users to send private messages","Pozwól użytkownikom wysyłać prywatne wiadomości"}.
|
{"Allow users to send private messages","Pozwól użytkownikom wysyłać prywatne wiadomości"}.
|
||||||
{"Allow visitors to change nickname","Pozwól uczestnikom na zmianę nicka"}.
|
{"Allow visitors to change nickname","Pozwól uczestnikom na zmianę nicka"}.
|
||||||
|
{"Allow visitors to send private messages to","Pozwól użytkownikom wysyłać prywatne wiadomości"}.
|
||||||
{"Allow visitors to send status text in presence updates","Pozwól uczestnikom na wysyłanie statusów opisowych"}.
|
{"Allow visitors to send status text in presence updates","Pozwól uczestnikom na wysyłanie statusów opisowych"}.
|
||||||
|
{"Allow visitors to send voice requests","Pozwól użytkownikom wysyłać zaproszenia"}.
|
||||||
{"All Users","Wszyscy użytkownicy"}.
|
{"All Users","Wszyscy użytkownicy"}.
|
||||||
{"Announcements","Powiadomienia"}.
|
{"Announcements","Powiadomienia"}.
|
||||||
{"anyone","wszystkich"}.
|
{"anyone","wszystkich"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Zapisz kopię zapasową w pliku tekstowym na "}.
|
{"Dump Backup to Text File at ","Zapisz kopię zapasową w pliku tekstowym na "}.
|
||||||
{"Dump to Text File","Wykonaj kopie do pliku tekstowego"}.
|
{"Dump to Text File","Wykonaj kopie do pliku tekstowego"}.
|
||||||
{"Edit Properties","Edytuj właściwości"}.
|
{"Edit Properties","Edytuj właściwości"}.
|
||||||
|
{"Either approve or decline the voice request.","Zatwierdź lub odrzuć żądanie głosowe"}.
|
||||||
{"ejabberd IRC module","Moduł IRC ejabberd"}.
|
{"ejabberd IRC module","Moduł IRC ejabberd"}.
|
||||||
{"ejabberd MUC module","Moduł MUC"}.
|
{"ejabberd MUC module","Moduł MUC"}.
|
||||||
{"ejabberd Publish-Subscribe module","Moduł Publish-Subscribe"}.
|
{"ejabberd Publish-Subscribe module","Moduł Publish-Subscribe"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Błąd"}.
|
{"Error","Błąd"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Przykład: [{\"wroclaw.irc.pl\",\"utf-8\"}, {\"warszawa.irc.pl\", \"iso8859-2\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Przykład: [{\"wroclaw.irc.pl\",\"utf-8\"}, {\"warszawa.irc.pl\", \"iso8859-2\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Pomiń Jabber ID z żądania CAPTCHA"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksportuj dane wszystkich użytkowników serwera do plików w formacie PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Eksportuj dane wszystkich użytkowników serwera do plików w formacie PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksportuj dane użytkowników z hosta do plików w formacie PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Eksportuj dane użytkowników z hosta do plików w formacie PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Nie udało się wydobyć JID-u z twojego żądania"}.
|
||||||
{"Family Name","Nazwisko"}.
|
{"Family Name","Nazwisko"}.
|
||||||
{"February","Luty"}.
|
{"February","Luty"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Wypełnij pola aby znaleźć pasujących użytkowników Jabbera"}.
|
{"Fill in fields to search for any matching Jabber User","Wypełnij pola aby znaleźć pasujących użytkowników Jabbera"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Pokaż czas ostatniego zalogowania uzytkownika"}.
|
{"Get User Last Login Time","Pokaż czas ostatniego zalogowania uzytkownika"}.
|
||||||
{"Get User Password","Pobierz hasło użytkownika"}.
|
{"Get User Password","Pobierz hasło użytkownika"}.
|
||||||
{"Get User Statistics","Pobierz statystyki użytkownika"}.
|
{"Get User Statistics","Pobierz statystyki użytkownika"}.
|
||||||
|
{"Grant voice to this person?","Udzielić głosu tej osobie?"}.
|
||||||
{"Group ","Grupa "}.
|
{"Group ","Grupa "}.
|
||||||
{"Groups","Grupy"}.
|
{"Groups","Grupy"}.
|
||||||
{"has been banned","został wykluczony"}.
|
{"has been banned","został wykluczony"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Lista modułów do uruchomienia"}.
|
{"List of modules to start","Lista modułów do uruchomienia"}.
|
||||||
{"Low level update script","Skrypt aktualizacji niskiego poziomu"}.
|
{"Low level update script","Skrypt aktualizacji niskiego poziomu"}.
|
||||||
{"Make participants list public","Upublicznij listę uczestników"}.
|
{"Make participants list public","Upublicznij listę uczestników"}.
|
||||||
{"Make room captcha protected","Pokój zabezpieczony captchą"}.
|
{"Make room CAPTCHA protected","Pokój zabezpieczony captchą"}.
|
||||||
{"Make room members-only","Pokój tylko dla członków"}.
|
{"Make room members-only","Pokój tylko dla członków"}.
|
||||||
{"Make room moderated","Pokój moderowany"}.
|
{"Make room moderated","Pokój moderowany"}.
|
||||||
{"Make room password protected","Pokój zabezpieczony hasłem"}.
|
{"Make room password protected","Pokój zabezpieczony hasłem"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Pamięć"}.
|
{"Memory","Pamięć"}.
|
||||||
{"Message body","Treść wiadomości"}.
|
{"Message body","Treść wiadomości"}.
|
||||||
{"Middle Name","Drugie imię"}.
|
{"Middle Name","Drugie imię"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Minimalny odstęp między żądaniami głosowymi (w sekundach)"}.
|
||||||
{"Moderator privileges required","Wymagane uprawnienia moderatora"}.
|
{"Moderator privileges required","Wymagane uprawnienia moderatora"}.
|
||||||
{"moderators only","tylko moderatorzy"}.
|
{"moderators only","tylko moderatorzy"}.
|
||||||
{"Modified modules","Zmodyfikowane moduły"}.
|
{"Modified modules","Zmodyfikowane moduły"}.
|
||||||
@ -199,6 +206,7 @@
|
|||||||
{"Nickname","Nazwa użytkownika"}.
|
{"Nickname","Nazwa użytkownika"}.
|
||||||
{"Nickname Registration at ","Rejestracja nazwy użytkownika na "}.
|
{"Nickname Registration at ","Rejestracja nazwy użytkownika na "}.
|
||||||
{"Nickname ~s does not exist in the room","Nie ma nicka ~s w tym pokoju"}.
|
{"Nickname ~s does not exist in the room","Nie ma nicka ~s w tym pokoju"}.
|
||||||
|
{"nobody","nikt"}.
|
||||||
{"No body provided for announce message","Brak treści powiadomienia"}.
|
{"No body provided for announce message","Brak treści powiadomienia"}.
|
||||||
{"No Data","Brak danych"}.
|
{"No Data","Brak danych"}.
|
||||||
{"Node ID","ID węzła"}.
|
{"Node ID","ID węzła"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Dostarczaj powiadomienia tylko dostępnym użytkownikom"}.
|
{"Only deliver notifications to available users","Dostarczaj powiadomienia tylko dostępnym użytkownikom"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Tylko moderatorzy i uczestnicy mogą zmienić temat tego pokoju"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Tylko moderatorzy i uczestnicy mogą zmienić temat tego pokoju"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Tylko moderatorzy mogą zmienić temat tego pokoju"}.
|
{"Only moderators are allowed to change the subject in this room","Tylko moderatorzy mogą zmienić temat tego pokoju"}.
|
||||||
|
{"Only moderators can approve voice requests","Tylko moderatorzy mogą zatwierdzać żądania głosowe"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Tylko uczestnicy mogą wysyłać wiadomości na konferencję"}.
|
{"Only occupants are allowed to send messages to the conference","Tylko uczestnicy mogą wysyłać wiadomości na konferencję"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Tylko uczestnicy mogą wysyłać zapytania do konferencji"}.
|
{"Only occupants are allowed to send queries to the conference","Tylko uczestnicy mogą wysyłać zapytania do konferencji"}.
|
||||||
{"Only service administrators are allowed to send service messages","Tylko administratorzy mogą wysyłać wiadomości"}.
|
{"Only service administrators are allowed to send service messages","Tylko administratorzy mogą wysyłać wiadomości"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Przechowuj na stałe dane PubSub"}.
|
{"Persist items to storage","Przechowuj na stałe dane PubSub"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Te opcje kopii zapasowych dotyczą tylko wbudowanej bazy danych typu Mnesia. Jeśli korzystasz z modułu ODBC, musisz wykonać kopie bazy we własnym zakresie."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Te opcje kopii zapasowych dotyczą tylko wbudowanej bazy danych typu Mnesia. Jeśli korzystasz z modułu ODBC, musisz wykonać kopie bazy we własnym zakresie."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Proszę poczekać chwile, zanim wyślesz nowe żądanie głosowe"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Port ~b"}.
|
{"Port ~b","Port ~b"}.
|
||||||
{"Port","Port"}.
|
{"Port","Port"}.
|
||||||
@ -274,7 +284,7 @@
|
|||||||
{"Remove All Offline Messages","Usuń wszystkie wiadomości typu 'Offline'"}.
|
{"Remove All Offline Messages","Usuń wszystkie wiadomości typu 'Offline'"}.
|
||||||
{"Remove User","Usuń użytkownika"}.
|
{"Remove User","Usuń użytkownika"}.
|
||||||
{"Remove","Usuń"}.
|
{"Remove","Usuń"}.
|
||||||
{"Replaced by new connection","Zastąpione przez nowe połączenie"}.
|
{"Replaced by new connection","Połączenie zostało zastąpione"}.
|
||||||
{"Resources","Zasoby"}.
|
{"Resources","Zasoby"}.
|
||||||
{"Restart Service","Restart usługi"}.
|
{"Restart Service","Restart usługi"}.
|
||||||
{"Restart","Uruchom ponownie"}.
|
{"Restart","Uruchom ponownie"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","Niedziela"}.
|
{"Sunday","Niedziela"}.
|
||||||
{"That nickname is already in use by another occupant","Ta nazwa użytkownika jest używana przez kogoś innego"}.
|
{"That nickname is already in use by another occupant","Ta nazwa użytkownika jest używana przez kogoś innego"}.
|
||||||
{"That nickname is registered by another person","Ta nazwa użytkownika jest już zarejestrowana przez inną osobę"}.
|
{"That nickname is registered by another person","Ta nazwa użytkownika jest już zarejestrowana przez inną osobę"}.
|
||||||
{"The captcha is valid.","Captcha jest poprawna."}.
|
{"The CAPTCHA is valid.","Captcha jest poprawna."}.
|
||||||
{"The CAPTCHA verification has failed","Weryfikacja CAPTCHA nie powiodła się."}.
|
{"The CAPTCHA verification has failed","Weryfikacja CAPTCHA nie powiodła się."}.
|
||||||
{"The collections with which a node is affiliated","Grupy, do których należy węzeł"}.
|
{"The collections with which a node is affiliated","Grupy, do których należy węzeł"}.
|
||||||
{"the password is","hasło to:"}.
|
{"the password is","hasło to:"}.
|
||||||
@ -358,6 +368,7 @@
|
|||||||
{"Time","Czas"}.
|
{"Time","Czas"}.
|
||||||
{"Time delay","Opóźnienie"}.
|
{"Time delay","Opóźnienie"}.
|
||||||
{"To","Do"}.
|
{"To","Do"}.
|
||||||
|
{"Too many CAPTCHA requests","Za dużo żądań CAPTCHA"}.
|
||||||
{"To ~s","Do ~s"}.
|
{"To ~s","Do ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Limit transferu przekroczony"}.
|
{"Traffic rate limit is exceeded","Limit transferu przekroczony"}.
|
||||||
{"Transactions Aborted:","Transakcje anulowane:"}.
|
{"Transactions Aborted:","Transakcje anulowane:"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","Transakcje zalogowane:"}.
|
{"Transactions Logged:","Transakcje zalogowane:"}.
|
||||||
{"Transactions Restarted:","Transakcje uruchomione ponownie:"}.
|
{"Transactions Restarted:","Transakcje uruchomione ponownie:"}.
|
||||||
{"Tuesday","Wtorek"}.
|
{"Tuesday","Wtorek"}.
|
||||||
{"Unable to generate a captcha","Nie można wygenerować captcha"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Nie można wygenerować CAPTCHA"}.
|
{"Unable to generate a CAPTCHA","Nie można wygenerować CAPTCHA"}.
|
||||||
{"Unauthorized","Nie autoryzowano"}.
|
{"Unauthorized","Nie autoryzowano"}.
|
||||||
{"Unregister a Jabber account","Usuń konto Jabber"}.
|
{"Unregister a Jabber account","Usuń konto Jabber"}.
|
||||||
@ -377,7 +387,8 @@
|
|||||||
{"Update script","Skrypt aktualizacji"}.
|
{"Update script","Skrypt aktualizacji"}.
|
||||||
{"Update ","Uaktualnij "}.
|
{"Update ","Uaktualnij "}.
|
||||||
{"Uptime:","Czas pracy:"}.
|
{"Uptime:","Czas pracy:"}.
|
||||||
{"Use of STARTTLS required","Wymagane użycie STARTTLS"}.
|
{"Use of STARTTLS required","Wymagane jest użycie STARTTLS"}.
|
||||||
|
{"User JID","Użytkownik "}.
|
||||||
{"User Management","Zarządzanie użytkownikami"}.
|
{"User Management","Zarządzanie użytkownikami"}.
|
||||||
{"Username:","Nazwa użytkownika:"}.
|
{"Username:","Nazwa użytkownika:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Użytkowncy nie mogą tak szybko rejestrować nowych kont"}.
|
{"Users are not allowed to register accounts so quickly","Użytkowncy nie mogą tak szybko rejestrować nowych kont"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","Wirtualne Hosty"}.
|
{"Virtual Hosts","Wirtualne Hosty"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Uczestnicy tego pokoju nie mogą zmieniać swoich nicków"}.
|
{"Visitors are not allowed to change their nicknames in this room","Uczestnicy tego pokoju nie mogą zmieniać swoich nicków"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Odwiedzający nie mogą wysyłać wiadomości do wszystkich obecnych"}.
|
{"Visitors are not allowed to send messages to all occupants","Odwiedzający nie mogą wysyłać wiadomości do wszystkich obecnych"}.
|
||||||
|
{"Voice requests are disabled in this conference","Głosowe żądania są wyłączone w tym pokoju"}.
|
||||||
|
{"Voice request","Żądanie głosowe"}.
|
||||||
{"Wednesday","Środa"}.
|
{"Wednesday","Środa"}.
|
||||||
{"When to send the last published item","Kiedy wysłać ostatnio opublikowaną rzecz"}.
|
{"When to send the last published item","Kiedy wysłać ostatnio opublikowaną rzecz"}.
|
||||||
{"Whether to allow subscriptions","Czy pozwolić na subskrypcje"}.
|
{"Whether to allow subscriptions","Czy pozwolić na subskrypcje"}.
|
||||||
@ -401,7 +414,7 @@
|
|||||||
{"You need an x:data capable client to configure mod_irc settings","Potrzebujesz klienta obsługującego x:data aby skonfigurować mod_irc"}.
|
{"You need an x:data capable client to configure mod_irc settings","Potrzebujesz klienta obsługującego x:data aby skonfigurować mod_irc"}.
|
||||||
{"You need an x:data capable client to configure room","Potrzebujesz klienta obsługującego x:data aby skonfigurować pokój"}.
|
{"You need an x:data capable client to configure room","Potrzebujesz klienta obsługującego x:data aby skonfigurować pokój"}.
|
||||||
{"You need an x:data capable client to search","Potrzebujesz klienta obsługującego x:data aby wyszukiwać"}.
|
{"You need an x:data capable client to search","Potrzebujesz klienta obsługującego x:data aby wyszukiwać"}.
|
||||||
{"Your active privacy list has denied the routing of this stanza.","Twoja aktywna lista prywatności zabrania"}.
|
{"Your active privacy list has denied the routing of this stanza.","Aktualna lista prywatności zabrania przesyłania tej stanzy"}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Kolejka wiadomości offline adresata jest pełna. Wiadomość została odrzucona."}.
|
{"Your contact offline message queue is full. The message has been discarded.","Kolejka wiadomości offline adresata jest pełna. Wiadomość została odrzucona."}.
|
||||||
{"Your Jabber account was successfully created.","Twoje konto zostało stworzone."}.
|
{"Your Jabber account was successfully created.","Twoje konto zostało stworzone."}.
|
||||||
{"Your Jabber account was successfully deleted.","Twoje konto zostało usunięte."}.
|
{"Your Jabber account was successfully deleted.","Twoje konto zostało usunięte."}.
|
||||||
|
691
src/msgs/pl.po
691
src/msgs/pl.po
File diff suppressed because it is too large
Load Diff
@ -73,6 +73,7 @@
|
|||||||
{"Dump Backup to Text File at ","Exportar backup para texto em "}.
|
{"Dump Backup to Text File at ","Exportar backup para texto em "}.
|
||||||
{"Dump to Text File","Exportar para arquivo de texto"}.
|
{"Dump to Text File","Exportar para arquivo de texto"}.
|
||||||
{"Edit Properties","Editar propriedades"}.
|
{"Edit Properties","Editar propriedades"}.
|
||||||
|
{"Either approve or decline the voice request.","Você deve aprovar/desaprovar a requisição de voz."}.
|
||||||
{"ejabberd IRC module","Módulo de IRC para ejabberd"}.
|
{"ejabberd IRC module","Módulo de IRC para ejabberd"}.
|
||||||
{"ejabberd MUC module","Módulo de MUC para ejabberd"}.
|
{"ejabberd MUC module","Módulo de MUC para ejabberd"}.
|
||||||
{"ejabberd Publish-Subscribe module","Módulo para Publicar Tópicos do ejabberd"}.
|
{"ejabberd Publish-Subscribe module","Módulo para Publicar Tópicos do ejabberd"}.
|
||||||
@ -96,8 +97,10 @@
|
|||||||
{"Erlang Jabber Server","Servidor Jabber em Erlang"}.
|
{"Erlang Jabber Server","Servidor Jabber em Erlang"}.
|
||||||
{"Error","Erro"}.
|
{"Error","Erro"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Exemplo: [{\"irc.teste.net\", \"koi8-r\"}, 6667, \"senha\"}, {\"dominio.foo.net\", \"iso8859-1\", 7000}, {\"irc.servidordeteste.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Exemplo: [{\"irc.teste.net\", \"koi8-r\"}, 6667, \"senha\"}, {\"dominio.foo.net\", \"iso8859-1\", 7000}, {\"irc.servidordeteste.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Excluir IDs Jabber de serem submetidos ao CAPTCHA"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar todos os dados de todos os usuários no servidor, para arquivos formato PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar todos os dados de todos os usuários no servidor, para arquivos formato PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dados dos usuários em um host, para arquivos PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dados dos usuários em um host, para arquivos PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Não foi possível extrair o JID (Jabber ID) da requisição de voz"}.
|
||||||
{"Family Name","Sobrenome"}.
|
{"Family Name","Sobrenome"}.
|
||||||
{"February","Fevereiro"}.
|
{"February","Fevereiro"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Preencha campos para buscar usuários Jabber que concordem"}.
|
{"Fill in fields to search for any matching Jabber User","Preencha campos para buscar usuários Jabber que concordem"}.
|
||||||
@ -132,7 +135,7 @@
|
|||||||
{"Improper message type","Tipo de mensagem incorreto"}.
|
{"Improper message type","Tipo de mensagem incorreto"}.
|
||||||
{"Incorrect password","Senha incorreta"}.
|
{"Incorrect password","Senha incorreta"}.
|
||||||
{"Invalid affiliation: ~s","Afiliação não válida: ~s"}.
|
{"Invalid affiliation: ~s","Afiliação não válida: ~s"}.
|
||||||
{"Invalid role: ~s","Rol não válido: ~s"}.
|
{"Invalid role: ~s","Cargo (role) é não válido: ~s"}.
|
||||||
{"IP addresses","Endereços IP"}.
|
{"IP addresses","Endereços IP"}.
|
||||||
{"IP","IP"}.
|
{"IP","IP"}.
|
||||||
{"IRC channel (don't put the first #)","Canal IRC (não coloque o #)"}.
|
{"IRC channel (don't put the first #)","Canal IRC (não coloque o #)"}.
|
||||||
@ -144,7 +147,7 @@
|
|||||||
{"is now known as","é agora conhecido como"}.
|
{"is now known as","é agora conhecido como"}.
|
||||||
{"It is not allowed to send private messages","Não é permitido enviar mensagens privadas"}.
|
{"It is not allowed to send private messages","Não é permitido enviar mensagens privadas"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","No está permitido enviar mensagens privados do tipo \"groupchat\""}.
|
{"It is not allowed to send private messages of type \"groupchat\"","No está permitido enviar mensagens privados do tipo \"groupchat\""}.
|
||||||
{"It is not allowed to send private messages to the conference","Impedir o envio de mensagens privados a la sala"}.
|
{"It is not allowed to send private messages to the conference","Impedir o envio de mensagens privadas para a sala"}.
|
||||||
{"Jabber Account Registration","Registros de Contas Jabber"}.
|
{"Jabber Account Registration","Registros de Contas Jabber"}.
|
||||||
{"Jabber ID","ID Jabber"}.
|
{"Jabber ID","ID Jabber"}.
|
||||||
{"Jabber ID ~s is invalid","O Jabber ID ~s não es válido"}.
|
{"Jabber ID ~s is invalid","O Jabber ID ~s não es válido"}.
|
||||||
@ -165,7 +168,7 @@
|
|||||||
{"List of modules to start","Listas de módulos para inicializar"}.
|
{"List of modules to start","Listas de módulos para inicializar"}.
|
||||||
{"Low level update script","Script de atualização low level"}.
|
{"Low level update script","Script de atualização low level"}.
|
||||||
{"Make participants list public","Tornar pública a lista de participantes"}.
|
{"Make participants list public","Tornar pública a lista de participantes"}.
|
||||||
{"Make room captcha protected","Tornar protegida a senha da sala"}.
|
{"Make room CAPTCHA protected","Tornar protegida a senha da sala"}.
|
||||||
{"Make room members-only","Tornar sala apenas para membros"}.
|
{"Make room members-only","Tornar sala apenas para membros"}.
|
||||||
{"Make room moderated","Tornar a sala moderada"}.
|
{"Make room moderated","Tornar a sala moderada"}.
|
||||||
{"Make room password protected","Tornar protegida a senha da sala"}.
|
{"Make room password protected","Tornar protegida a senha da sala"}.
|
||||||
@ -182,6 +185,7 @@
|
|||||||
{"Memory","Memória"}.
|
{"Memory","Memória"}.
|
||||||
{"Message body","Corpo da mensagem"}.
|
{"Message body","Corpo da mensagem"}.
|
||||||
{"Middle Name","Nome do meio"}.
|
{"Middle Name","Nome do meio"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","O intervalo mínimo entre requisições de voz (em segundos)"}.
|
||||||
{"Moderator privileges required","Se necessita privilégios de moderador"}.
|
{"Moderator privileges required","Se necessita privilégios de moderador"}.
|
||||||
{"moderators only","apenas moderadores"}.
|
{"moderators only","apenas moderadores"}.
|
||||||
{"Modified modules","Módulos atualizados"}.
|
{"Modified modules","Módulos atualizados"}.
|
||||||
@ -195,6 +199,7 @@
|
|||||||
{"Nickname","Apelido"}.
|
{"Nickname","Apelido"}.
|
||||||
{"Nickname Registration at ","Registro do apelido em "}.
|
{"Nickname Registration at ","Registro do apelido em "}.
|
||||||
{"Nickname ~s does not exist in the room","O nick ~s não existe em la sala"}.
|
{"Nickname ~s does not exist in the room","O nick ~s não existe em la sala"}.
|
||||||
|
{"nobody","ninguém"}.
|
||||||
{"No body provided for announce message","Nenhum corpo de texto fornecido para anunciar mensagem"}.
|
{"No body provided for announce message","Nenhum corpo de texto fornecido para anunciar mensagem"}.
|
||||||
{"No Data","Nenhum dado"}.
|
{"No Data","Nenhum dado"}.
|
||||||
{"Node ID","ID do Tópico"}.
|
{"Node ID","ID do Tópico"}.
|
||||||
@ -203,7 +208,7 @@
|
|||||||
{"Nodes","Nós"}.
|
{"Nodes","Nós"}.
|
||||||
{"No limit","Ilimitado"}.
|
{"No limit","Ilimitado"}.
|
||||||
{"None","Nenhum"}.
|
{"None","Nenhum"}.
|
||||||
{"No resource provided","Recurso não foi fornecido"}.
|
{"No resource provided","Nenhum recurso foi informado"}.
|
||||||
{"Not Found","Não encontrado"}.
|
{"Not Found","Não encontrado"}.
|
||||||
{"Notify subscribers when items are removed from the node","Notificar subscritores quando os elementos se eliminem do nodo"}.
|
{"Notify subscribers when items are removed from the node","Notificar subscritores quando os elementos se eliminem do nodo"}.
|
||||||
{"Notify subscribers when the node configuration changes","Notificar subscritores quando cambia la configuração do nodo"}.
|
{"Notify subscribers when the node configuration changes","Notificar subscritores quando cambia la configuração do nodo"}.
|
||||||
@ -222,6 +227,7 @@
|
|||||||
{"Only deliver notifications to available users","Solo enviar notificações aos usuários disponíveis"}.
|
{"Only deliver notifications to available users","Solo enviar notificações aos usuários disponíveis"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Somente os moderadores e os participamentes podem alterar o assunto desta sala"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Somente os moderadores e os participamentes podem alterar o assunto desta sala"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Somente os moderadores podem alterar o assunto desta sala"}.
|
{"Only moderators are allowed to change the subject in this room","Somente os moderadores podem alterar o assunto desta sala"}.
|
||||||
|
{"Only moderators can approve voice requests","Somente moderadores podem aprovar requisições de voz"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Solo os ocupantes podem enviar mensagens a la sala"}.
|
{"Only occupants are allowed to send messages to the conference","Solo os ocupantes podem enviar mensagens a la sala"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Solo os ocupantes podem enviar consultas a la sala"}.
|
{"Only occupants are allowed to send queries to the conference","Solo os ocupantes podem enviar consultas a la sala"}.
|
||||||
{"Only service administrators are allowed to send service messages","Apenas administradores possuem permissão para enviar mensagens de serviço"}.
|
{"Only service administrators are allowed to send service messages","Apenas administradores possuem permissão para enviar mensagens de serviço"}.
|
||||||
@ -244,11 +250,12 @@
|
|||||||
{"Persist items to storage","Persistir elementos ao armazenar"}.
|
{"Persist items to storage","Persistir elementos ao armazenar"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Observe que tais opções farão backup apenas da base de dados Mnesia. Caso você esteja utilizando o modulo ODBC, você precisará fazer backup de sua base de dados SQL separadamente."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Observe que tais opções farão backup apenas da base de dados Mnesia. Caso você esteja utilizando o modulo ODBC, você precisará fazer backup de sua base de dados SQL separadamente."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Por favor, espere antes de enviar uma nova requisição de voz"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Porta ~b"}.
|
{"Port ~b","Porta ~b"}.
|
||||||
{"Port","Porta"}.
|
{"Port","Porta"}.
|
||||||
{"Present real Jabber IDs to","Tornar o Jabber ID real visível por"}.
|
{"Present real Jabber IDs to","Tornar o Jabber ID real visível por"}.
|
||||||
{"private, ","privado"}.
|
{"private, ","privado, "}.
|
||||||
{"Protocol","Porta"}.
|
{"Protocol","Porta"}.
|
||||||
{"Publish-Subscribe","Publicação de Tópico"}.
|
{"Publish-Subscribe","Publicação de Tópico"}.
|
||||||
{"PubSub subscriber request","PubSub requisição de assinante"}.
|
{"PubSub subscriber request","PubSub requisição de assinante"}.
|
||||||
@ -265,7 +272,7 @@
|
|||||||
{"Registration in mod_irc for ","Registro em mod_irc para "}.
|
{"Registration in mod_irc for ","Registro em mod_irc para "}.
|
||||||
{"Remote copy","Copia remota"}.
|
{"Remote copy","Copia remota"}.
|
||||||
{"Remove All Offline Messages","Remover Todas as Mensagens Offline"}.
|
{"Remove All Offline Messages","Remover Todas as Mensagens Offline"}.
|
||||||
{"Remove","Borrar"}.
|
{"Remove","Remover"}.
|
||||||
{"Remove User","Remover usuário"}.
|
{"Remove User","Remover usuário"}.
|
||||||
{"Replaced by new connection","Substituído por nova conexão"}.
|
{"Replaced by new connection","Substituído por nova conexão"}.
|
||||||
{"Resources","Recursos"}.
|
{"Resources","Recursos"}.
|
||||||
@ -330,7 +337,8 @@
|
|||||||
{"Sunday","Domingo"}.
|
{"Sunday","Domingo"}.
|
||||||
{"That nickname is already in use by another occupant","O apelido (nick) já está sendo utilizado"}.
|
{"That nickname is already in use by another occupant","O apelido (nick) já está sendo utilizado"}.
|
||||||
{"That nickname is registered by another person","O nick já está registrado por outra pessoa"}.
|
{"That nickname is registered by another person","O nick já está registrado por outra pessoa"}.
|
||||||
{"The captcha is valid.","O captcha é inválido."}.
|
{"The CAPTCHA is valid.","O CAPTCHA é inválido."}.
|
||||||
|
{"The CAPTCHA verification has failed","A verificação do CAPTCHA falhou"}.
|
||||||
{"The collections with which a node is affiliated","As coleções com as quais o nó está relacionado"}.
|
{"The collections with which a node is affiliated","As coleções com as quais o nó está relacionado"}.
|
||||||
{"the password is","a senha é"}.
|
{"the password is","a senha é"}.
|
||||||
{"The password of your Jabber account was successfully changed.","A senha da sua conta Jabber foi mudada com sucesso."}.
|
{"The password of your Jabber account was successfully changed.","A senha da sua conta Jabber foi mudada com sucesso."}.
|
||||||
@ -347,6 +355,7 @@
|
|||||||
{"Thursday","Quinta"}.
|
{"Thursday","Quinta"}.
|
||||||
{"Time delay","Intervalo (Tempo)"}.
|
{"Time delay","Intervalo (Tempo)"}.
|
||||||
{"Time","Fecha"}.
|
{"Time","Fecha"}.
|
||||||
|
{"Too many CAPTCHA requests","Número excessivo de requisições para o CAPTCHA"}.
|
||||||
{"To","Para"}.
|
{"To","Para"}.
|
||||||
{"To ~s","Para ~s"}.
|
{"To ~s","Para ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Limite de banda excedido"}.
|
{"Traffic rate limit is exceeded","Limite de banda excedido"}.
|
||||||
@ -355,7 +364,7 @@
|
|||||||
{"Transactions Logged:","Transações de log:"}.
|
{"Transactions Logged:","Transações de log:"}.
|
||||||
{"Transactions Restarted:","Transações reiniciadas:"}.
|
{"Transactions Restarted:","Transações reiniciadas:"}.
|
||||||
{"Tuesday","Terça"}.
|
{"Tuesday","Terça"}.
|
||||||
{"Unable to generate a captcha","Impossível gerar um captcha"}.
|
{"Unable to generate a CAPTCHA","Impossível gerar um CAPTCHA"}.
|
||||||
{"Unauthorized","Não Autorizado"}.
|
{"Unauthorized","Não Autorizado"}.
|
||||||
{"Unregister a Jabber account","Deletar conta Jabber"}.
|
{"Unregister a Jabber account","Deletar conta Jabber"}.
|
||||||
{"Unregister","Deletar registro"}.
|
{"Unregister","Deletar registro"}.
|
||||||
@ -366,7 +375,7 @@
|
|||||||
{"Update plan","Plano de Atualização"}.
|
{"Update plan","Plano de Atualização"}.
|
||||||
{"Update script","Script de atualização"}.
|
{"Update script","Script de atualização"}.
|
||||||
{"Uptime:","Uptime:"}.
|
{"Uptime:","Uptime:"}.
|
||||||
{"Use of STARTTLS required","É obrigatório usar STARTTLS"}.
|
{"Use of STARTTLS required","É obrigatório uso de STARTTLS"}.
|
||||||
{"User Management","Gerenciamento de Usuários"}.
|
{"User Management","Gerenciamento de Usuários"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Usuários não estão autorizados a registrar contas imediatamente"}.
|
{"Users are not allowed to register accounts so quickly","Usuários não estão autorizados a registrar contas imediatamente"}.
|
||||||
{"Users Last Activity","Ultimas atividades dos usuários"}.
|
{"Users Last Activity","Ultimas atividades dos usuários"}.
|
||||||
@ -378,6 +387,8 @@
|
|||||||
{"Virtual Hosts","Hosts virtuais"}.
|
{"Virtual Hosts","Hosts virtuais"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Nesta sala, os visitantes não pode mudar seus apelidos"}.
|
{"Visitors are not allowed to change their nicknames in this room","Nesta sala, os visitantes não pode mudar seus apelidos"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Os visitantes não podem enviar mensagens a todos os ocupantes"}.
|
{"Visitors are not allowed to send messages to all occupants","Os visitantes não podem enviar mensagens a todos os ocupantes"}.
|
||||||
|
{"Voice request","Requisição de voz"}.
|
||||||
|
{"Voice requests are disabled in this conference","Requisições de voz estào desabilitadas nesta conferência"}.
|
||||||
{"Wednesday","Quarta"}.
|
{"Wednesday","Quarta"}.
|
||||||
{"When to send the last published item","Quando enviar o último tópico publicado"}.
|
{"When to send the last published item","Quando enviar o último tópico publicado"}.
|
||||||
{"Whether to allow subscriptions","Permitir subscrições"}.
|
{"Whether to allow subscriptions","Permitir subscrições"}.
|
||||||
@ -387,7 +398,7 @@
|
|||||||
{"You need an x:data capable client to configure mod_irc settings","Necessitas um cliente com suporte de x:data para configurar las opções de mod_irc"}.
|
{"You need an x:data capable client to configure mod_irc settings","Necessitas um cliente com suporte de x:data para configurar las opções de mod_irc"}.
|
||||||
{"You need an x:data capable client to configure room","Necessitas um cliente com suporte de x:data para configurar la sala"}.
|
{"You need an x:data capable client to configure room","Necessitas um cliente com suporte de x:data para configurar la sala"}.
|
||||||
{"You need an x:data capable client to search","Necessitas um cliente com suporte de x:data para poder buscar"}.
|
{"You need an x:data capable client to search","Necessitas um cliente com suporte de x:data para poder buscar"}.
|
||||||
{"Your active privacy list has denied the routing of this stanza.","Sua lista de privacidade ativa negou o roteamento desta estada."}.
|
{"Your active privacy list has denied the routing of this stanza.","Sua lista de privacidade ativa negou o roteamento deste."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Sua fila de mensagens offline esta cheia. Sua mensagem foi descartada"}.
|
{"Your contact offline message queue is full. The message has been discarded.","Sua fila de mensagens offline esta cheia. Sua mensagem foi descartada"}.
|
||||||
{"Your Jabber account was successfully created.","Sua conta jabber foi criada corretamente."}.
|
{"Your Jabber account was successfully created.","Sua conta jabber foi criada corretamente."}.
|
||||||
{"Your Jabber account was successfully deleted.","Sua conta Jabber foi deletada com sucesso."}.
|
{"Your Jabber account was successfully deleted.","Sua conta Jabber foi deletada com sucesso."}.
|
||||||
|
File diff suppressed because it is too large
Load Diff
680
src/msgs/pt.po
680
src/msgs/pt.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Разрешить пользователям посылать приглашения"}.
|
{"Allow users to send invites","Разрешить пользователям посылать приглашения"}.
|
||||||
{"Allow users to send private messages","Разрешить приватные сообщения"}.
|
{"Allow users to send private messages","Разрешить приватные сообщения"}.
|
||||||
{"Allow visitors to change nickname","Разрешить посетителям изменять псевдоним"}.
|
{"Allow visitors to change nickname","Разрешить посетителям изменять псевдоним"}.
|
||||||
|
{"Allow visitors to send private messages to","Разрешить посетителям посылать приватные сообщения"}.
|
||||||
{"Allow visitors to send status text in presence updates","Разрешить посетителям вставлять текcт статуса в сообщения о присутствии"}.
|
{"Allow visitors to send status text in presence updates","Разрешить посетителям вставлять текcт статуса в сообщения о присутствии"}.
|
||||||
|
{"Allow visitors to send voice requests","Разрешить посетителям запрашивать право голоса"}.
|
||||||
{"All Users","Все пользователи"}.
|
{"All Users","Все пользователи"}.
|
||||||
{"Announcements","Объявления"}.
|
{"Announcements","Объявления"}.
|
||||||
{"anyone","всем участникам"}.
|
{"anyone","всем участникам"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","Копирование в текстовый файл на "}.
|
{"Dump Backup to Text File at ","Копирование в текстовый файл на "}.
|
||||||
{"Dump to Text File","Копирование в текстовый файл"}.
|
{"Dump to Text File","Копирование в текстовый файл"}.
|
||||||
{"Edit Properties","Изменить параметры"}.
|
{"Edit Properties","Изменить параметры"}.
|
||||||
|
{"Either approve or decline the voice request.","Подтвердите или отклоните право голоса."}.
|
||||||
{"ejabberd IRC module","ejabberd IRC модуль"}.
|
{"ejabberd IRC module","ejabberd IRC модуль"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC модуль"}.
|
{"ejabberd MUC module","ejabberd MUC модуль"}.
|
||||||
{"ejabberd Publish-Subscribe module","Модуль ejabberd Публикации-Подписки"}.
|
{"ejabberd Publish-Subscribe module","Модуль ejabberd Публикации-Подписки"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Ошибка"}.
|
{"Error","Ошибка"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Пример: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Пример: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Исключить показ капчи для списка Jabber ID"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Экспорт данных всех пользователей сервера в файлы формата PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Экспорт данных всех пользователей сервера в файлы формата PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Экспорт пользовательских данных домена в файлы формата PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Экспорт пользовательских данных домена в файлы формата PIEFXIS (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Ошибка обработки JID из вашего запроса на право голоса"}.
|
||||||
{"Family Name","Фамилия"}.
|
{"Family Name","Фамилия"}.
|
||||||
{"February","февраля"}.
|
{"February","февраля"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Заполните форму для поиска пользователя Jabber"}.
|
{"Fill in fields to search for any matching Jabber User","Заполните форму для поиска пользователя Jabber"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Получить время последнего подключения пользователя"}.
|
{"Get User Last Login Time","Получить время последнего подключения пользователя"}.
|
||||||
{"Get User Password","Получить пароль пользователя"}.
|
{"Get User Password","Получить пароль пользователя"}.
|
||||||
{"Get User Statistics","Получить статистику по пользователю"}.
|
{"Get User Statistics","Получить статистику по пользователю"}.
|
||||||
|
{"Grant voice to this person?","Предоставить голос?"}.
|
||||||
{"Groups","Группы"}.
|
{"Groups","Группы"}.
|
||||||
{"Group ","Группа "}.
|
{"Group ","Группа "}.
|
||||||
{"has been banned","запретили входить в комнату"}.
|
{"has been banned","запретили входить в комнату"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","Список запускаемых модулей"}.
|
{"List of modules to start","Список запускаемых модулей"}.
|
||||||
{"Low level update script","Низкоуровневый сценарий обновления"}.
|
{"Low level update script","Низкоуровневый сценарий обновления"}.
|
||||||
{"Make participants list public","Сделать список участников видимым всем"}.
|
{"Make participants list public","Сделать список участников видимым всем"}.
|
||||||
{"Make room captcha protected","Сделать комнату защищённой капчей"}.
|
{"Make room CAPTCHA protected","Сделать комнату защищённой капчей"}.
|
||||||
{"Make room members-only","Комната только для зарегистрированных участников"}.
|
{"Make room members-only","Комната только для зарегистрированных участников"}.
|
||||||
{"Make room moderated","Сделать комнату модерируемой"}.
|
{"Make room moderated","Сделать комнату модерируемой"}.
|
||||||
{"Make room password protected","Сделать комнату защищённой паролем"}.
|
{"Make room password protected","Сделать комнату защищённой паролем"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","Память"}.
|
{"Memory","Память"}.
|
||||||
{"Message body","Тело сообщения"}.
|
{"Message body","Тело сообщения"}.
|
||||||
{"Middle Name","Отчество"}.
|
{"Middle Name","Отчество"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Минимальный интервал между запросами на право голоса"}.
|
||||||
{"Moderator privileges required","Требуются права модератора"}.
|
{"Moderator privileges required","Требуются права модератора"}.
|
||||||
{"moderators only","только модераторам"}.
|
{"moderators only","только модераторам"}.
|
||||||
{"Modified modules","Изменённые модули"}.
|
{"Modified modules","Изменённые модули"}.
|
||||||
@ -200,6 +207,7 @@
|
|||||||
{"Nickname ~s does not exist in the room","Псевдоним ~s в комнате отсутствует"}.
|
{"Nickname ~s does not exist in the room","Псевдоним ~s в комнате отсутствует"}.
|
||||||
{"Nickname","Псевдоним"}.
|
{"Nickname","Псевдоним"}.
|
||||||
{"No body provided for announce message","Тело объявления не должно быть пустым"}.
|
{"No body provided for announce message","Тело объявления не должно быть пустым"}.
|
||||||
|
{"nobody","никто"}.
|
||||||
{"No Data","Нет данных"}.
|
{"No Data","Нет данных"}.
|
||||||
{"Node ID","ID узла"}.
|
{"Node ID","ID узла"}.
|
||||||
{"Node not found","Узел не найден"}.
|
{"Node not found","Узел не найден"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","Доставлять уведомления только доступным пользователям"}.
|
{"Only deliver notifications to available users","Доставлять уведомления только доступным пользователям"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Только модераторы и участники могут изменять тему в этой комнате"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Только модераторы и участники могут изменять тему в этой комнате"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Только модераторы могут изменять тему в этой комнате"}.
|
{"Only moderators are allowed to change the subject in this room","Только модераторы могут изменять тему в этой комнате"}.
|
||||||
|
{"Only moderators can approve voice requests","Только модераторы могут утверждать запросы на право голоса"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Только присутствующим разрешается посылать сообщения в конференцию"}.
|
{"Only occupants are allowed to send messages to the conference","Только присутствующим разрешается посылать сообщения в конференцию"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Только присутствующим разрешается посылать запросы в конференцию"}.
|
{"Only occupants are allowed to send queries to the conference","Только присутствующим разрешается посылать запросы в конференцию"}.
|
||||||
{"Only service administrators are allowed to send service messages","Только администратор службы может посылать служебные сообщения"}.
|
{"Only service administrators are allowed to send service messages","Только администратор службы может посылать служебные сообщения"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","Сохранять публикации в хранилище"}.
|
{"Persist items to storage","Сохранять публикации в хранилище"}.
|
||||||
{"Ping","Пинг"}.
|
{"Ping","Пинг"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Заметьте, что здесь производится резервное копирование только встроенной базы данных Mnesia. Если Вы также используете другое хранилище данных (например с помощью модуля ODBC), то его резервное копирование следует осуществлять отдельно."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Заметьте, что здесь производится резервное копирование только встроенной базы данных Mnesia. Если Вы также используете другое хранилище данных (например с помощью модуля ODBC), то его резервное копирование следует осуществлять отдельно."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Пожалуйста, подождите перед тем как подать новый запрос на право голоса"}.
|
||||||
{"Pong","Понг"}.
|
{"Pong","Понг"}.
|
||||||
{"Port ~b","Порт ~b"}.
|
{"Port ~b","Порт ~b"}.
|
||||||
{"Port","Порт"}.
|
{"Port","Порт"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","Воскресенье"}.
|
{"Sunday","Воскресенье"}.
|
||||||
{"That nickname is already in use by another occupant","Этот псевдоним уже занят другим участником"}.
|
{"That nickname is already in use by another occupant","Этот псевдоним уже занят другим участником"}.
|
||||||
{"That nickname is registered by another person","Этот псевдоним зарегистрирован кем-то другим"}.
|
{"That nickname is registered by another person","Этот псевдоним зарегистрирован кем-то другим"}.
|
||||||
{"The captcha is valid.","Проверка капчи прошла успешно."}.
|
{"The CAPTCHA is valid.","Проверка капчи прошла успешно."}.
|
||||||
{"The CAPTCHA verification has failed","Проверка капчи не пройдена"}.
|
{"The CAPTCHA verification has failed","Проверка капчи не пройдена"}.
|
||||||
{"The collections with which a node is affiliated","Имя коллекции, в которую входит узел"}.
|
{"The collections with which a node is affiliated","Имя коллекции, в которую входит узел"}.
|
||||||
{"The password is too weak","Слишком слабый пароль"}.
|
{"The password is too weak","Слишком слабый пароль"}.
|
||||||
@ -357,6 +367,7 @@
|
|||||||
{"Thursday","Четверг"}.
|
{"Thursday","Четверг"}.
|
||||||
{"Time delay","По истечение"}.
|
{"Time delay","По истечение"}.
|
||||||
{"Time","Время"}.
|
{"Time","Время"}.
|
||||||
|
{"Too many CAPTCHA requests","Слишком много запросов капчи"}.
|
||||||
{"To ~s","К ~s"}.
|
{"To ~s","К ~s"}.
|
||||||
{"To","Кому"}.
|
{"To","Кому"}.
|
||||||
{"Traffic rate limit is exceeded","Превышен лимит скорости посылки информации"}.
|
{"Traffic rate limit is exceeded","Превышен лимит скорости посылки информации"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","Транзакции запротоколированные:"}.
|
{"Transactions Logged:","Транзакции запротоколированные:"}.
|
||||||
{"Transactions Restarted:","Транзакции перезапущенные:"}.
|
{"Transactions Restarted:","Транзакции перезапущенные:"}.
|
||||||
{"Tuesday","Вторник"}.
|
{"Tuesday","Вторник"}.
|
||||||
{"Unable to generate a captcha","Не получилось создать капчу"}.
|
|
||||||
{"Unable to generate a CAPTCHA","Не получилось создать капчу"}.
|
{"Unable to generate a CAPTCHA","Не получилось создать капчу"}.
|
||||||
{"Unauthorized","Не авторизован"}.
|
{"Unauthorized","Не авторизован"}.
|
||||||
{"Unregister a Jabber account","Удалить Jabber-аккаунт"}.
|
{"Unregister a Jabber account","Удалить Jabber-аккаунт"}.
|
||||||
@ -378,6 +388,7 @@
|
|||||||
{"Update ","Обновление "}.
|
{"Update ","Обновление "}.
|
||||||
{"Uptime:","Время работы:"}.
|
{"Uptime:","Время работы:"}.
|
||||||
{"Use of STARTTLS required","Вы обязаны использовать STARTTLS"}.
|
{"Use of STARTTLS required","Вы обязаны использовать STARTTLS"}.
|
||||||
|
{"User JID","JID пользователя"}.
|
||||||
{"User Management","Управление пользователями"}.
|
{"User Management","Управление пользователями"}.
|
||||||
{"Username:","Имя пользователя:"}.
|
{"Username:","Имя пользователя:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Пользователи не могут регистрировать учётные записи так быстро"}.
|
{"Users are not allowed to register accounts so quickly","Пользователи не могут регистрировать учётные записи так быстро"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","Виртуальные хосты"}.
|
{"Virtual Hosts","Виртуальные хосты"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Посетителям запрещено изменять свои псевдонимы в этой комнате"}.
|
{"Visitors are not allowed to change their nicknames in this room","Посетителям запрещено изменять свои псевдонимы в этой комнате"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Посетителям не разрешается посылать сообщения всем присутствующим"}.
|
{"Visitors are not allowed to send messages to all occupants","Посетителям не разрешается посылать сообщения всем присутствующим"}.
|
||||||
|
{"Voice requests are disabled in this conference","Запросы на право голоса отключены в этой конференции"}.
|
||||||
|
{"Voice request","Запрос на право голоса"}.
|
||||||
{"Wednesday","Среда"}.
|
{"Wednesday","Среда"}.
|
||||||
{"When to send the last published item","Когда посылать последний опубликованный элемент"}.
|
{"When to send the last published item","Когда посылать последний опубликованный элемент"}.
|
||||||
{"Whether to allow subscriptions","Разрешить подписку"}.
|
{"Whether to allow subscriptions","Разрешить подписку"}.
|
||||||
|
687
src/msgs/ru.po
687
src/msgs/ru.po
File diff suppressed because it is too large
Load Diff
@ -163,7 +163,7 @@
|
|||||||
{"List of modules to start","Zoznam modulov, ktoré majú byť spustené"}.
|
{"List of modules to start","Zoznam modulov, ktoré majú byť spustené"}.
|
||||||
{"Low level update script","Nízkoúrovňový aktualizačný skript"}.
|
{"Low level update script","Nízkoúrovňový aktualizačný skript"}.
|
||||||
{"Make participants list public","Nastaviť zoznam zúčastnených ako verejný"}.
|
{"Make participants list public","Nastaviť zoznam zúčastnených ako verejný"}.
|
||||||
{"Make room captcha protected","Chrániť miestnosť systémom captcha"}.
|
{"Make room CAPTCHA protected","Chrániť miestnosť systémom CAPTCHA"}.
|
||||||
{"Make room members-only","Nastaviť miestnosť len pre členov"}.
|
{"Make room members-only","Nastaviť miestnosť len pre členov"}.
|
||||||
{"Make room moderated","Nastaviť miestnosť ako moderovanú"}.
|
{"Make room moderated","Nastaviť miestnosť ako moderovanú"}.
|
||||||
{"Make room password protected","Chrániť miestnosť heslom"}.
|
{"Make room password protected","Chrániť miestnosť heslom"}.
|
||||||
@ -325,7 +325,7 @@
|
|||||||
{"Sunday","Nedeľa"}.
|
{"Sunday","Nedeľa"}.
|
||||||
{"That nickname is already in use by another occupant","Prezývka je už používaná iným členom"}.
|
{"That nickname is already in use by another occupant","Prezývka je už používaná iným členom"}.
|
||||||
{"That nickname is registered by another person","Prezývka je už zaregistrovaná inou osobou"}.
|
{"That nickname is registered by another person","Prezývka je už zaregistrovaná inou osobou"}.
|
||||||
{"The captcha is valid.","Platná captcha."}.
|
{"The CAPTCHA is valid.","Platná CAPTCHA."}.
|
||||||
{"The collections with which a node is affiliated","Kolekcie asociované s uzlom"}.
|
{"The collections with which a node is affiliated","Kolekcie asociované s uzlom"}.
|
||||||
{"the password is","heslo je"}.
|
{"the password is","heslo je"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Účastník bol vyhodený z miestnosti, pretože poslal chybovú správu inému účastníkovi"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Účastník bol vyhodený z miestnosti, pretože poslal chybovú správu inému účastníkovi"}.
|
||||||
@ -343,7 +343,6 @@
|
|||||||
{"Transactions Logged:","Transakcie zaznamenaná"}.
|
{"Transactions Logged:","Transakcie zaznamenaná"}.
|
||||||
{"Transactions Restarted:","Transakcie reštartovaná"}.
|
{"Transactions Restarted:","Transakcie reštartovaná"}.
|
||||||
{"Tuesday","Utorok"}.
|
{"Tuesday","Utorok"}.
|
||||||
{"Unable to generate a captcha","Nepodarilo sa vygenerovat captcha"}.
|
|
||||||
{"Unauthorized","Neautorizovaný"}.
|
{"Unauthorized","Neautorizovaný"}.
|
||||||
{"Update ","Aktualizovať "}.
|
{"Update ","Aktualizovať "}.
|
||||||
{"Update","Aktualizovať"}.
|
{"Update","Aktualizovať"}.
|
||||||
|
690
src/msgs/sk.po
690
src/msgs/sk.po
File diff suppressed because it is too large
Load Diff
@ -312,7 +312,7 @@
|
|||||||
{"Subscription","Prenumeration"}.
|
{"Subscription","Prenumeration"}.
|
||||||
{"Sunday","Söndag"}.
|
{"Sunday","Söndag"}.
|
||||||
{"That nickname is registered by another person","Smeknamnet är reserverat"}.
|
{"That nickname is registered by another person","Smeknamnet är reserverat"}.
|
||||||
{"The captcha is valid.","Din captcha är godkänd."}.
|
{"The CAPTCHA is valid.","Din CAPTCHA är godkänd."}.
|
||||||
{"the password is","Lösenordet är"}.
|
{"the password is","Lösenordet är"}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Deltagaren har blivit kickad fran rummet p.g.a att han skickade ett errormeddelande"}.
|
{"This participant is kicked from the room because he sent an error message","Deltagaren har blivit kickad fran rummet p.g.a att han skickade ett errormeddelande"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Deltagaren har blivit kickad från rummet p.g.a att han skickade ett errormeddelande till en annan deltagare"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Deltagaren har blivit kickad från rummet p.g.a att han skickade ett errormeddelande till en annan deltagare"}.
|
||||||
@ -329,7 +329,6 @@
|
|||||||
{"Transactions Logged:","Transaktioner loggade "}.
|
{"Transactions Logged:","Transaktioner loggade "}.
|
||||||
{"Transactions Restarted:","Transaktioner omstartade"}.
|
{"Transactions Restarted:","Transaktioner omstartade"}.
|
||||||
{"Tuesday","Tisdag"}.
|
{"Tuesday","Tisdag"}.
|
||||||
{"Unable to generate a captcha","Kunde inte generera ett captcha"}.
|
|
||||||
{"Unauthorized","Ej auktoriserad"}.
|
{"Unauthorized","Ej auktoriserad"}.
|
||||||
{"Update message of the day (don't send)","Uppdatera dagens status meddelande (skicka inte)"}.
|
{"Update message of the day (don't send)","Uppdatera dagens status meddelande (skicka inte)"}.
|
||||||
{"Update message of the day on all hosts (don't send)","Uppdatera dagens status meddelande på alla värdar (skicka inte)"}.
|
{"Update message of the day on all hosts (don't send)","Uppdatera dagens status meddelande på alla värdar (skicka inte)"}.
|
||||||
|
688
src/msgs/sv.po
688
src/msgs/sv.po
File diff suppressed because it is too large
Load Diff
680
src/msgs/th.po
680
src/msgs/th.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","Kullanıcıların davetiye göndermelerine izin ver"}.
|
{"Allow users to send invites","Kullanıcıların davetiye göndermelerine izin ver"}.
|
||||||
{"Allow users to send private messages","Kullanıcıların özel mesaj göndermelerine izin ver"}.
|
{"Allow users to send private messages","Kullanıcıların özel mesaj göndermelerine izin ver"}.
|
||||||
{"Allow visitors to change nickname","Ziyaretçilerin takma isim değiştirmelerine izin ver"}.
|
{"Allow visitors to change nickname","Ziyaretçilerin takma isim değiştirmelerine izin ver"}.
|
||||||
|
{"Allow visitors to send private messages to","Ziyaretçilerin özel mesaj göndermelerine izin ver"}.
|
||||||
{"Allow visitors to send status text in presence updates","Ziyaretçilerin varlık (presence) güncellemelerinde durum metni göndermelerine izin ver"}.
|
{"Allow visitors to send status text in presence updates","Ziyaretçilerin varlık (presence) güncellemelerinde durum metni göndermelerine izin ver"}.
|
||||||
|
{"Allow visitors to send voice requests","Ziyaretçilerin ses isteğine göndermelerine izin ver"}.
|
||||||
{"All Users","Tüm Kullanıcılar"}.
|
{"All Users","Tüm Kullanıcılar"}.
|
||||||
{"Announcements","Duyurular"}.
|
{"Announcements","Duyurular"}.
|
||||||
{"anyone","herkes"}.
|
{"anyone","herkes"}.
|
||||||
@ -33,9 +35,15 @@
|
|||||||
{"Backup","Yedekle"}.
|
{"Backup","Yedekle"}.
|
||||||
{"Bad format","Kötü biçem"}.
|
{"Bad format","Kötü biçem"}.
|
||||||
{"Birthday","Doğumgünü"}.
|
{"Birthday","Doğumgünü"}.
|
||||||
|
{"CAPTCHA web page","CAPTCHA web sayfası"}.
|
||||||
{"Change Password","Parola Değiştir"}.
|
{"Change Password","Parola Değiştir"}.
|
||||||
{"Change User Password","Kullanıcı Parolasını Değiştir"}.
|
{"Change User Password","Kullanıcı Parolasını Değiştir"}.
|
||||||
|
{"Characters not allowed:","İzin verilmeyen karakterler:"}.
|
||||||
{"Chatroom configuration modified","Sohbet odası ayarı değiştirildi"}.
|
{"Chatroom configuration modified","Sohbet odası ayarı değiştirildi"}.
|
||||||
|
{"Chatroom is created","Sohbet odası oluşturuldu"}.
|
||||||
|
{"Chatroom is destroyed","Sohbet odası kaldırıldı"}.
|
||||||
|
{"Chatroom is started","Sohbet odası başlatıldı"}.
|
||||||
|
{"Chatroom is stopped","Sohbet odası durduruldu"}.
|
||||||
{"Chatrooms","Sohbet Odaları"}.
|
{"Chatrooms","Sohbet Odaları"}.
|
||||||
{"Choose a username and password to register with this server","Bu sunucuya kayıt olmak için bir kullanıcı ismi ve parola seçiniz"}.
|
{"Choose a username and password to register with this server","Bu sunucuya kayıt olmak için bir kullanıcı ismi ve parola seçiniz"}.
|
||||||
{"Choose modules to stop","Durdurulacak modülleri seçiniz"}.
|
{"Choose modules to stop","Durdurulacak modülleri seçiniz"}.
|
||||||
@ -65,9 +73,11 @@
|
|||||||
{"Description:","Tanım:"}.
|
{"Description:","Tanım:"}.
|
||||||
{"Disc only copy","Sadece disk kopyala"}.
|
{"Disc only copy","Sadece disk kopyala"}.
|
||||||
{"Displayed Groups:","Gösterilen Gruplar:"}.
|
{"Displayed Groups:","Gösterilen Gruplar:"}.
|
||||||
|
{"Don't tell your password to anybody, not even the administrators of the Jabber server.","Parolanızı kimseye söylemeyin, Jabber sunucusunun yöneticilerine bile."}.
|
||||||
{"Dump Backup to Text File at ","Metin Dosyasına Döküm Alarak Yedekle : "}.
|
{"Dump Backup to Text File at ","Metin Dosyasına Döküm Alarak Yedekle : "}.
|
||||||
{"Dump to Text File","Metin Dosyasına Döküm Al"}.
|
{"Dump to Text File","Metin Dosyasına Döküm Al"}.
|
||||||
{"Edit Properties","Özellikleri Düzenle"}.
|
{"Edit Properties","Özellikleri Düzenle"}.
|
||||||
|
{"Either approve or decline the voice request.","Ses isteğini kabul edin ya da reddedin"}.
|
||||||
{"ejabberd IRC module","ejabberd IRC modülü"}.
|
{"ejabberd IRC module","ejabberd IRC modülü"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC modülü"}.
|
{"ejabberd MUC module","ejabberd MUC modülü"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modülü"}.
|
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modülü"}.
|
||||||
@ -91,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Sunucusu"}.
|
{"Erlang Jabber Server","Erlang Jabber Sunucusu"}.
|
||||||
{"Error","Hata"}.
|
{"Error","Hata"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Örnek: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"gizli\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}], {\"irc.sometestserver.net\", \"utf-8\"}]"}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Örnek: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"gizli\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}], {\"irc.sometestserver.net\", \"utf-8\"}]"}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","CAPTCHA doğrulamasını şu Jabber ID'ler için yapma"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Sunucudaki tüm kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa aktar:"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Sunucudaki tüm kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa aktar:"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Bir sunucudaki kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa aktar:"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Bir sunucudaki kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa aktar:"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","Ses isteği onayınızdan JID bilginize ulaşılamadı"}.
|
||||||
{"Family Name","Soyisim"}.
|
{"Family Name","Soyisim"}.
|
||||||
{"February","Şubat"}.
|
{"February","Şubat"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","Eşleşen jabber kullanıcılarını aramak için alanları doldurunuz"}.
|
{"Fill in fields to search for any matching Jabber User","Eşleşen jabber kullanıcılarını aramak için alanları doldurunuz"}.
|
||||||
@ -106,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","Kullanıcı Son Giriş Zamanınlarını Al"}.
|
{"Get User Last Login Time","Kullanıcı Son Giriş Zamanınlarını Al"}.
|
||||||
{"Get User Password","Kullanıcı Parolasını Al"}.
|
{"Get User Password","Kullanıcı Parolasını Al"}.
|
||||||
{"Get User Statistics","Kullanıcı İstatistiklerini Al"}.
|
{"Get User Statistics","Kullanıcı İstatistiklerini Al"}.
|
||||||
|
{"Grant voice to this person?","Bu kişiye ses verelim mi?"}.
|
||||||
{"Group ","Group "}.
|
{"Group ","Group "}.
|
||||||
{"Groups","Gruplar"}.
|
{"Groups","Gruplar"}.
|
||||||
{"has been banned","odaya girmesi yasaklandı"}.
|
{"has been banned","odaya girmesi yasaklandı"}.
|
||||||
@ -115,6 +128,7 @@
|
|||||||
{"has been kicked","odadan atıldı"}.
|
{"has been kicked","odadan atıldı"}.
|
||||||
{" has set the subject to: "," konuyu değiştirdi: "}.
|
{" has set the subject to: "," konuyu değiştirdi: "}.
|
||||||
{"Host","Sunucu"}.
|
{"Host","Sunucu"}.
|
||||||
|
{"If you don't see the CAPTCHA image here, visit the web page.","Eğer burada CAPTCHA resmini göremiyorsanız, web sayfasını ziyaret edin."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","IRC sunucuları için farklı kapılar (portlar), parolalar, kodlamalar belirtmek istiyorsanız, '{\"irc sunucusu\", \"kodlama\",\"kapı\",\"parola\"}' biçeminde değerlerle bu listeyi doldurunuz. Öntanımlı olarak bu servis \"~s\" kodlamasını, ~p \"kapısını\", \"boş\" parolasını kullanıyor."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","IRC sunucuları için farklı kapılar (portlar), parolalar, kodlamalar belirtmek istiyorsanız, '{\"irc sunucusu\", \"kodlama\",\"kapı\",\"parola\"}' biçeminde değerlerle bu listeyi doldurunuz. Öntanımlı olarak bu servis \"~s\" kodlamasını, ~p \"kapısını\", \"boş\" parolasını kullanıyor."}.
|
||||||
{"Import Directory","Dizini İçe Aktar"}.
|
{"Import Directory","Dizini İçe Aktar"}.
|
||||||
{"Import File","Dosyayı İçe Aktar"}.
|
{"Import File","Dosyayı İçe Aktar"}.
|
||||||
@ -140,6 +154,7 @@
|
|||||||
{"It is not allowed to send private messages of type \"groupchat\"","\"groupchat\" tipinde özel mesajlar gönderilmesine izin verilmiyor"}.
|
{"It is not allowed to send private messages of type \"groupchat\"","\"groupchat\" tipinde özel mesajlar gönderilmesine izin verilmiyor"}.
|
||||||
{"It is not allowed to send private messages","Özel mesaj gönderilmesine izin verilmiyor"}.
|
{"It is not allowed to send private messages","Özel mesaj gönderilmesine izin verilmiyor"}.
|
||||||
{"It is not allowed to send private messages to the conference","Konferansa özel mesajlar gönderilmesine izin verilmiyor"}.
|
{"It is not allowed to send private messages to the conference","Konferansa özel mesajlar gönderilmesine izin verilmiyor"}.
|
||||||
|
{"Jabber Account Registration","Jabber Hesap Kaydı"}.
|
||||||
{"Jabber ID","Jabber ID"}.
|
{"Jabber ID","Jabber ID"}.
|
||||||
{"Jabber ID ~s is invalid","Jabber ID ~s geçersiz"}.
|
{"Jabber ID ~s is invalid","Jabber ID ~s geçersiz"}.
|
||||||
{"January","Ocak"}.
|
{"January","Ocak"}.
|
||||||
@ -159,7 +174,7 @@
|
|||||||
{"List of modules to start","Başlatılacak modüllerin listesi"}.
|
{"List of modules to start","Başlatılacak modüllerin listesi"}.
|
||||||
{"Low level update script","Düşük seviye güncelleme betiği"}.
|
{"Low level update script","Düşük seviye güncelleme betiği"}.
|
||||||
{"Make participants list public","Katılımcı listesini herkese açık hale getir"}.
|
{"Make participants list public","Katılımcı listesini herkese açık hale getir"}.
|
||||||
{"Make room captcha protected","Odayı insan doğrulaması (captcha) korumalı hale getir"}.
|
{"Make room CAPTCHA protected","Odayı insan doğrulaması (captcha) korumalı hale getir"}.
|
||||||
{"Make room members-only","Odayı sadece üyelere açık hale getir"}.
|
{"Make room members-only","Odayı sadece üyelere açık hale getir"}.
|
||||||
{"Make room moderated","Odayı moderasyonlu hale getir"}.
|
{"Make room moderated","Odayı moderasyonlu hale getir"}.
|
||||||
{"Make room password protected","Odayı parola korumalı hale getir"}.
|
{"Make room password protected","Odayı parola korumalı hale getir"}.
|
||||||
@ -172,9 +187,11 @@
|
|||||||
{"May","Mayıs"}.
|
{"May","Mayıs"}.
|
||||||
{"Membership is required to enter this room","Bu odaya girmek için üyelik gerekiyor"}.
|
{"Membership is required to enter this room","Bu odaya girmek için üyelik gerekiyor"}.
|
||||||
{"Members:","Üyeler:"}.
|
{"Members:","Üyeler:"}.
|
||||||
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Parolanızı ezberleyin ya da bir kağıda yazarak güvenli bir yerde saklayın. Jabber'da parolanızı unutursanız, otomatik kurtarmak için bir yöntem bulunmuyor."}.
|
||||||
{"Memory","Bellek"}.
|
{"Memory","Bellek"}.
|
||||||
{"Message body","Mesajın gövdesi"}.
|
{"Message body","Mesajın gövdesi"}.
|
||||||
{"Middle Name","Ortanca İsim"}.
|
{"Middle Name","Ortanca İsim"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","Ses istekleri arasında olabilecek en az aralık (saniye olarak)"}.
|
||||||
{"Moderator privileges required","Moderatör yetkileri gerekli"}.
|
{"Moderator privileges required","Moderatör yetkileri gerekli"}.
|
||||||
{"moderators only","sadece moderatörler"}.
|
{"moderators only","sadece moderatörler"}.
|
||||||
{"Modified modules","Değişen modüller"}.
|
{"Modified modules","Değişen modüller"}.
|
||||||
@ -185,9 +202,11 @@
|
|||||||
{"Name:","İsim:"}.
|
{"Name:","İsim:"}.
|
||||||
{"Name","İsim"}.
|
{"Name","İsim"}.
|
||||||
{"Never","Asla"}.
|
{"Never","Asla"}.
|
||||||
|
{"New Password:","Yeni Parola:"}.
|
||||||
{"Nickname Registration at ","Takma İsim Kaydı : "}.
|
{"Nickname Registration at ","Takma İsim Kaydı : "}.
|
||||||
{"Nickname ~s does not exist in the room","~s takma ismi odada yok"}.
|
{"Nickname ~s does not exist in the room","~s takma ismi odada yok"}.
|
||||||
{"Nickname","Takma isim"}.
|
{"Nickname","Takma isim"}.
|
||||||
|
{"nobody","hiç kimse"}.
|
||||||
{"No body provided for announce message","Duyuru mesajının gövdesi yok"}.
|
{"No body provided for announce message","Duyuru mesajının gövdesi yok"}.
|
||||||
{"No Data","Veri Yok"}.
|
{"No Data","Veri Yok"}.
|
||||||
{"Node ","Düğüm "}.
|
{"Node ","Düğüm "}.
|
||||||
@ -209,12 +228,14 @@
|
|||||||
{"Offline Messages:","Çevirim-dışı Mesajlar:"}.
|
{"Offline Messages:","Çevirim-dışı Mesajlar:"}.
|
||||||
{"Offline Messages","Çevirim-dışı Mesajlar"}.
|
{"Offline Messages","Çevirim-dışı Mesajlar"}.
|
||||||
{"OK","Tamam"}.
|
{"OK","Tamam"}.
|
||||||
|
{"Old Password:","Eski Parola:"}.
|
||||||
{"Online","Bağlı"}.
|
{"Online","Bağlı"}.
|
||||||
{"Online Users:","Bağlı Kullanıcılar:"}.
|
{"Online Users:","Bağlı Kullanıcılar:"}.
|
||||||
{"Online Users","Bağlı Kullanıcılar"}.
|
{"Online Users","Bağlı Kullanıcılar"}.
|
||||||
{"Only deliver notifications to available users","Uyarıları sadece durumu uygun kullanıcılara ulaştır"}.
|
{"Only deliver notifications to available users","Uyarıları sadece durumu uygun kullanıcılara ulaştır"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","Sadece moderatörlerin ve katılımcıların bu odanın konusunu değiştirmesine izin veriliyor"}.
|
{"Only moderators and participants are allowed to change the subject in this room","Sadece moderatörlerin ve katılımcıların bu odanın konusunu değiştirmesine izin veriliyor"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","Sadece moderatörlerin bu odanın konusunu değiştirmesine izin veriliyor"}.
|
{"Only moderators are allowed to change the subject in this room","Sadece moderatörlerin bu odanın konusunu değiştirmesine izin veriliyor"}.
|
||||||
|
{"Only moderators can approve voice requests","Yalnız moderatörler ses isteklerini onaylayabilir"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","Sadece oda sakinlerinin konferansa mesaj göndermesine izin veriliyor"}.
|
{"Only occupants are allowed to send messages to the conference","Sadece oda sakinlerinin konferansa mesaj göndermesine izin veriliyor"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","Sadece oda sakinlerinin konferansa sorgu göndermesine izin veriliyor"}.
|
{"Only occupants are allowed to send queries to the conference","Sadece oda sakinlerinin konferansa sorgu göndermesine izin veriliyor"}.
|
||||||
{"Only service administrators are allowed to send service messages","Sadece servis yöneticileri servis mesajı gönderebilirler"}.
|
{"Only service administrators are allowed to send service messages","Sadece servis yöneticileri servis mesajı gönderebilirler"}.
|
||||||
@ -229,6 +250,7 @@
|
|||||||
{"Password ~b","Parola ~b"}.
|
{"Password ~b","Parola ~b"}.
|
||||||
{"Password:","Parola:"}.
|
{"Password:","Parola:"}.
|
||||||
{"Password","Parola"}.
|
{"Password","Parola"}.
|
||||||
|
{"Password Verification:","Parola Doğrulaması:"}.
|
||||||
{"Password Verification","Parola Doğrulaması"}.
|
{"Password Verification","Parola Doğrulaması"}.
|
||||||
{"Path to Dir","Dizinin Yolu"}.
|
{"Path to Dir","Dizinin Yolu"}.
|
||||||
{"Path to File","Dosyanın Yolu"}.
|
{"Path to File","Dosyanın Yolu"}.
|
||||||
@ -237,6 +259,7 @@
|
|||||||
{"Persist items to storage","Öğeleri depoda kalıcı hale getir"}.
|
{"Persist items to storage","Öğeleri depoda kalıcı hale getir"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Bu seçeneklerin sadece gömülü Mnesia veritabanını yedekleyeceğine dikkat edin. Eğer ODBC modülünü kullanıyorsanız, SQL veritabanınızı da ayrıca yedeklemeniz gerekiyor."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Bu seçeneklerin sadece gömülü Mnesia veritabanını yedekleyeceğine dikkat edin. Eğer ODBC modülünü kullanıyorsanız, SQL veritabanınızı da ayrıca yedeklemeniz gerekiyor."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","Lütfen yeni bir ses isteği göndermeden önce biraz bekleyin"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","Kapı (Port) ~b"}.
|
{"Port ~b","Kapı (Port) ~b"}.
|
||||||
{"Port","Kapı (Port)"}.
|
{"Port","Kapı (Port)"}.
|
||||||
@ -245,14 +268,17 @@
|
|||||||
{"Protocol","Protokol"}.
|
{"Protocol","Protokol"}.
|
||||||
{"Publish-Subscribe","Yayınla-Üye Ol"}.
|
{"Publish-Subscribe","Yayınla-Üye Ol"}.
|
||||||
{"PubSub subscriber request","PubSub üye isteği"}.
|
{"PubSub subscriber request","PubSub üye isteği"}.
|
||||||
|
{"Purge all items when the relevant publisher goes offline","İlgili yayıncı çevirimdışı olunca tüm onunla ilgili olanları sil"}.
|
||||||
{"Queries to the conference members are not allowed in this room","Bu odada konferans üyelerine sorgu yapılmasına izin verilmiyor"}.
|
{"Queries to the conference members are not allowed in this room","Bu odada konferans üyelerine sorgu yapılmasına izin verilmiyor"}.
|
||||||
{"RAM and disc copy","RAM ve disk kopyala"}.
|
{"RAM and disc copy","RAM ve disk kopyala"}.
|
||||||
{"RAM copy","RAM kopyala"}.
|
{"RAM copy","RAM kopyala"}.
|
||||||
{"Raw","Ham"}.
|
{"Raw","Ham"}.
|
||||||
{"Really delete message of the day?","Günün mesajını silmek istediğinize emin misiniz?"}.
|
{"Really delete message of the day?","Günün mesajını silmek istediğinize emin misiniz?"}.
|
||||||
{"Recipient is not in the conference room","Alıcı konferans odasında değil"}.
|
{"Recipient is not in the conference room","Alıcı konferans odasında değil"}.
|
||||||
|
{"Register a Jabber account","Bir Jabber hesabı kaydet"}.
|
||||||
{"Registered Users:","Kayıtlı Kullanıcılar:"}.
|
{"Registered Users:","Kayıtlı Kullanıcılar:"}.
|
||||||
{"Registered Users","Kayıtlı Kullanıcılar"}.
|
{"Registered Users","Kayıtlı Kullanıcılar"}.
|
||||||
|
{"Register","Kayıt Ol"}.
|
||||||
{"Registration in mod_irc for ","mod_irc'ye kayıt : "}.
|
{"Registration in mod_irc for ","mod_irc'ye kayıt : "}.
|
||||||
{"Remote copy","Uzak kopyala"}.
|
{"Remote copy","Uzak kopyala"}.
|
||||||
{"Remove All Offline Messages","Tüm Çevirim-dışı Mesajları Kaldır"}.
|
{"Remove All Offline Messages","Tüm Çevirim-dışı Mesajları Kaldır"}.
|
||||||
@ -289,6 +315,7 @@
|
|||||||
{"Send announcement to all users on all hosts","Tüm sunuculardaki tüm kullanıcılara duyuru yolla"}.
|
{"Send announcement to all users on all hosts","Tüm sunuculardaki tüm kullanıcılara duyuru yolla"}.
|
||||||
{"September","Eylül"}.
|
{"September","Eylül"}.
|
||||||
{"Server ~b","Sunucu ~b"}.
|
{"Server ~b","Sunucu ~b"}.
|
||||||
|
{"Server:","Sunucu:"}.
|
||||||
{"Set message of the day and send to online users","Günün mesajını belirle"}.
|
{"Set message of the day and send to online users","Günün mesajını belirle"}.
|
||||||
{"Set message of the day on all hosts and send to online users","Tüm sunucularda günün mesajını belirle ve bağlı tüm kullanıcılara gönder"}.
|
{"Set message of the day on all hosts and send to online users","Tüm sunucularda günün mesajını belirle ve bağlı tüm kullanıcılara gönder"}.
|
||||||
{"Shared Roster Groups","Paylaşımlı Kontak Listesi Grupları"}.
|
{"Shared Roster Groups","Paylaşımlı Kontak Listesi Grupları"}.
|
||||||
@ -296,7 +323,9 @@
|
|||||||
{"Show Ordinary Table","Sıradan Tabloyu Göster"}.
|
{"Show Ordinary Table","Sıradan Tabloyu Göster"}.
|
||||||
{"Shut Down Service","Servisi Kapat"}.
|
{"Shut Down Service","Servisi Kapat"}.
|
||||||
{"~s invites you to the room ~s","~s sizi ~s odasına davet ediyor"}.
|
{"~s invites you to the room ~s","~s sizi ~s odasına davet ediyor"}.
|
||||||
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","Bazı Jabber istemcileri parolanızı bilgisayarınızda saklayabilir. Bu özelliği ancak bilgisayarın güvenli olduğuna güveniyorsanız kullanın."}.
|
||||||
{"Specify the access model","Erişim modelini belirtiniz"}.
|
{"Specify the access model","Erişim modelini belirtiniz"}.
|
||||||
|
{"Specify the event message type","Olay mesaj tipini belirtiniz"}.
|
||||||
{"Specify the publisher model","Yayıncı modelini belirtiniz"}.
|
{"Specify the publisher model","Yayıncı modelini belirtiniz"}.
|
||||||
{"~s's Offline Messages Queue","~s Kullanıcısının Mesaj Kuyruğu"}.
|
{"~s's Offline Messages Queue","~s Kullanıcısının Mesaj Kuyruğu"}.
|
||||||
{"Start","Başlat"}.
|
{"Start","Başlat"}.
|
||||||
@ -319,9 +348,18 @@
|
|||||||
{"Sunday","Pazar"}.
|
{"Sunday","Pazar"}.
|
||||||
{"That nickname is already in use by another occupant","Takma isim odanın başka bir sakini tarafından halihazırda kullanımda"}.
|
{"That nickname is already in use by another occupant","Takma isim odanın başka bir sakini tarafından halihazırda kullanımda"}.
|
||||||
{"That nickname is registered by another person","O takma isim başka biri tarafından kaydettirilmiş"}.
|
{"That nickname is registered by another person","O takma isim başka biri tarafından kaydettirilmiş"}.
|
||||||
{"The captcha is valid.","İnsan doğrulaması (captcha) geçerli."}.
|
{"The CAPTCHA is valid.","İnsan doğrulaması (captcha) geçerli."}.
|
||||||
|
{"The CAPTCHA verification has failed","CAPTCHA doğrulaması başarısız oldu"}.
|
||||||
{"The collections with which a node is affiliated","Bir düğüm ile bağlantılı koleksiyonlar"}.
|
{"The collections with which a node is affiliated","Bir düğüm ile bağlantılı koleksiyonlar"}.
|
||||||
{"the password is","parola :"}.
|
{"the password is","parola :"}.
|
||||||
|
{"The password is too weak","Parola çok zayıf"}.
|
||||||
|
{"The password of your Jabber account was successfully changed.","Jabber hesabınızın parolası başarıyla değiştirildi."}.
|
||||||
|
{"There was an error changing the password: ","Parolanın değiştirilmesi sırasında bir hata oluştu:"}.
|
||||||
|
{"There was an error creating the account: ","Hesap oluşturulurken bir hata oluştu:"}.
|
||||||
|
{"There was an error deleting the account: ","Hesabın silinmesi sırasında bir hata oluştu:"}.
|
||||||
|
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Burada büyük küçük harfi yapılmaz: macbeth ile MacBeth ve Macbeth aynıdır."}.
|
||||||
|
{"This page allows to create a Jabber account in this Jabber server. Your JID (Jabber IDentifier) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Bu sayfa bu Jabber sunucusunda bir Jabber hesabı oluşturulmasına olanak tanıyor. Sizin JID'iniz (Jabber Tanımlayıcısı) şu biçemde olacaktır: kullanici_adi@sunucu. Lütfen alanları doğru doldurabilmek için yönergeleri dikkatle okuyunuz."}.
|
||||||
|
{"This page allows to unregister a Jabber account in this Jabber server.","Bu sayfa bu Jabber sunucusundan bir Jabber hesabının kaydını silmeye olanak tanıyor."}.
|
||||||
{"This participant is kicked from the room because he sent an error message","Bu katılımcı bir hata mesajı gönderdiği için odadan atıldı"}.
|
{"This participant is kicked from the room because he sent an error message","Bu katılımcı bir hata mesajı gönderdiği için odadan atıldı"}.
|
||||||
{"This participant is kicked from the room because he sent an error message to another participant","Bu katılımcı başka bir katılımcıya bir hata mesajı gönderdiği için odadan atıldı"}.
|
{"This participant is kicked from the room because he sent an error message to another participant","Bu katılımcı başka bir katılımcıya bir hata mesajı gönderdiği için odadan atıldı"}.
|
||||||
{"This participant is kicked from the room because he sent an error presence","Bu katılımcı bir hata varlığı (presence) gönderdiği için odadan atıldı"}.
|
{"This participant is kicked from the room because he sent an error presence","Bu katılımcı bir hata varlığı (presence) gönderdiği için odadan atıldı"}.
|
||||||
@ -330,6 +368,7 @@
|
|||||||
{"Time delay","Zaman gecikmesi"}.
|
{"Time delay","Zaman gecikmesi"}.
|
||||||
{"Time","Zaman"}.
|
{"Time","Zaman"}.
|
||||||
{"To","Kime"}.
|
{"To","Kime"}.
|
||||||
|
{"Too many CAPTCHA requests","Çok fazla CAPTCHA isteği"}.
|
||||||
{"To ~s","Kime ~s"}.
|
{"To ~s","Kime ~s"}.
|
||||||
{"Traffic rate limit is exceeded","Trafik oran sınırı aşıldı"}.
|
{"Traffic rate limit is exceeded","Trafik oran sınırı aşıldı"}.
|
||||||
{"Transactions Aborted:","İptal Edilen Hareketler (Transactions):"}.
|
{"Transactions Aborted:","İptal Edilen Hareketler (Transactions):"}.
|
||||||
@ -337,8 +376,10 @@
|
|||||||
{"Transactions Logged:","Kaydı Tutulan Hareketler (Transactions):"}.
|
{"Transactions Logged:","Kaydı Tutulan Hareketler (Transactions):"}.
|
||||||
{"Transactions Restarted:","Tekrar Başlatılan Hareketler (Transactions):"}.
|
{"Transactions Restarted:","Tekrar Başlatılan Hareketler (Transactions):"}.
|
||||||
{"Tuesday","Salı"}.
|
{"Tuesday","Salı"}.
|
||||||
{"Unable to generate a captcha","İnsan doğrulaması (captcha) oluşturulamadı"}.
|
{"Unable to generate a CAPTCHA","İnsan doğrulaması (CAPTCHA) oluşturulamadı"}.
|
||||||
{"Unauthorized","Yetkisiz"}.
|
{"Unauthorized","Yetkisiz"}.
|
||||||
|
{"Unregister a Jabber account","Bir Jabber hesabı kaydı sil"}.
|
||||||
|
{"Unregister","Kaydı Sil"}.
|
||||||
{"Update ","Güncelle "}.
|
{"Update ","Güncelle "}.
|
||||||
{"Update","GÜncelle"}.
|
{"Update","GÜncelle"}.
|
||||||
{"Update message of the day (don't send)","Günün mesajını güncelle (gönderme)"}.
|
{"Update message of the day (don't send)","Günün mesajını güncelle (gönderme)"}.
|
||||||
@ -347,9 +388,11 @@
|
|||||||
{"Update script","Betiği Güncelle"}.
|
{"Update script","Betiği Güncelle"}.
|
||||||
{"Uptime:","Hizmet Süresi:"}.
|
{"Uptime:","Hizmet Süresi:"}.
|
||||||
{"Use of STARTTLS required","STARTTLS kullanımı gereklidir"}.
|
{"Use of STARTTLS required","STARTTLS kullanımı gereklidir"}.
|
||||||
|
{"User JID","Kullanıcı JID"}.
|
||||||
{"User ","Kullanıcı "}.
|
{"User ","Kullanıcı "}.
|
||||||
{"User","Kullanıcı"}.
|
{"User","Kullanıcı"}.
|
||||||
{"User Management","Kullanıcı Yönetimi"}.
|
{"User Management","Kullanıcı Yönetimi"}.
|
||||||
|
{"Username:","Kullanıcı adı:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","Kullanıcıların bu kadar hızlı hesap açmalarına izin verilmiyor"}.
|
{"Users are not allowed to register accounts so quickly","Kullanıcıların bu kadar hızlı hesap açmalarına izin verilmiyor"}.
|
||||||
{"Users","Kullanıcılar"}.
|
{"Users","Kullanıcılar"}.
|
||||||
{"Users Last Activity","Kullanıcıların Son Aktiviteleri"}.
|
{"Users Last Activity","Kullanıcıların Son Aktiviteleri"}.
|
||||||
@ -358,13 +401,21 @@
|
|||||||
{"Virtual Hosts","Sanal Sunucuları"}.
|
{"Virtual Hosts","Sanal Sunucuları"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","Bu odada ziyaretçilerin takma isimlerini değiştirmesine izin verilmiyor"}.
|
{"Visitors are not allowed to change their nicknames in this room","Bu odada ziyaretçilerin takma isimlerini değiştirmesine izin verilmiyor"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","Ziyaretçilerin odadaki tüm sakinlere mesaj göndermesine izin verilmiyor"}.
|
{"Visitors are not allowed to send messages to all occupants","Ziyaretçilerin odadaki tüm sakinlere mesaj göndermesine izin verilmiyor"}.
|
||||||
|
{"Voice requests are disabled in this conference","Bu konferansta ses istekleri etkisizleştirilmiş durumda."}.
|
||||||
|
{"Voice request","Ses isteği"}.
|
||||||
{"Wednesday","Çarşamba"}.
|
{"Wednesday","Çarşamba"}.
|
||||||
{"When to send the last published item","Son yayınlanan öğe ne zaman gönderilsin"}.
|
{"When to send the last published item","Son yayınlanan öğe ne zaman gönderilsin"}.
|
||||||
{"Whether to allow subscriptions","Üyeliklere izin verilsin mi"}.
|
{"Whether to allow subscriptions","Üyeliklere izin verilsin mi"}.
|
||||||
|
{"You can later change your password using a Jabber client.","Parolanızı daha sonra bir Jabber istemci kullanarak değiştirebilirsiniz."}.
|
||||||
{"You have been banned from this room","Bu odaya girmeniz yasaklandı"}.
|
{"You have been banned from this room","Bu odaya girmeniz yasaklandı"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Formda \"Takma isim\" alanını doldurmanız gerekiyor"}.
|
{"You must fill in field \"Nickname\" in the form","Formda \"Takma isim\" alanını doldurmanız gerekiyor"}.
|
||||||
|
{"You need a client that supports x:data and CAPTCHA to register","Takma isminizi kaydettirmek için x:data ve CAPTCHA destekleyen bir istemciye gereksinimiz var"}.
|
||||||
|
{"You need a client that supports x:data to register the nickname","Takma isminizi kaydettirmek için x:data destekleyen bir istemciye gereksinimiz var"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","mod_irc ayarlarını düzenlemek için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
{"You need an x:data capable client to configure mod_irc settings","mod_irc ayarlarını düzenlemek için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
||||||
{"You need an x:data capable client to configure room","Odayı ayarlamak için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
{"You need an x:data capable client to configure room","Odayı ayarlamak için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
||||||
{"You need an x:data capable client to search","Arama yapabilmek için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
{"You need an x:data capable client to search","Arama yapabilmek için x:data becerisine sahip bir istemciye gereksinimiz var"}.
|
||||||
|
{"Your active privacy list has denied the routing of this stanza.","Etkin mahremiyet listeniz bu bölümün yönlendirilmesini engelledi."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Çevirim-dışı mesaj kuyruğunuz dolu. Mesajını dikkate alınmadı."}.
|
{"Your contact offline message queue is full. The message has been discarded.","Çevirim-dışı mesaj kuyruğunuz dolu. Mesajını dikkate alınmadı."}.
|
||||||
|
{"Your Jabber account was successfully created.","Jabber hesabınız başarıyla oluşturuldu."}.
|
||||||
|
{"Your Jabber account was successfully deleted.","Jabber hesabınız başarıyla silindi."}.
|
||||||
{"Your messages to ~s are being blocked. To unblock them, visit ~s","~s kullanıcısına mesajlarınız engelleniyor. Durumu düzeltmek için ~s adresini ziyaret ediniz."}.
|
{"Your messages to ~s are being blocked. To unblock them, visit ~s","~s kullanıcısına mesajlarınız engelleniyor. Durumu düzeltmek için ~s adresini ziyaret ediniz."}.
|
||||||
|
786
src/msgs/tr.po
786
src/msgs/tr.po
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
{"Access Configuration","Конфігурація доступа"}.
|
{"Access Configuration","Конфігурація доступу"}.
|
||||||
{"Access Control List Configuration","Конфігурація списків керування доступом"}.
|
{"Access Control List Configuration","Конфігурація списків керування доступом"}.
|
||||||
{"Access control lists","Списки керування доступом"}.
|
{"Access control lists","Списки керування доступом"}.
|
||||||
{"Access Control Lists","Списки керування доступом"}.
|
{"Access Control Lists","Списки керування доступом"}.
|
||||||
@ -14,7 +14,7 @@
|
|||||||
{"Administrator privileges required","Необхідні права адміністратора"}.
|
{"Administrator privileges required","Необхідні права адміністратора"}.
|
||||||
{"A friendly name for the node","Псевдонім для вузла"}.
|
{"A friendly name for the node","Псевдонім для вузла"}.
|
||||||
{"All activity","Вся статистика"}.
|
{"All activity","Вся статистика"}.
|
||||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Чи дозволити цьому Jabber ID абонувати новини наданого вузла"}.
|
{"Allow this Jabber ID to subscribe to this pubsub node?","Чи дозволити цьому Jabber ID підписатись новини наданого вузла"}.
|
||||||
{"Allow users to change the subject","Дозволити користувачам змінювати тему"}.
|
{"Allow users to change the subject","Дозволити користувачам змінювати тему"}.
|
||||||
{"Allow users to query other users","Дозволити iq-запити до користувачів"}.
|
{"Allow users to query other users","Дозволити iq-запити до користувачів"}.
|
||||||
{"Allow users to send invites","Дозволити користувачам надсилати запрошення"}.
|
{"Allow users to send invites","Дозволити користувачам надсилати запрошення"}.
|
||||||
@ -77,7 +77,7 @@
|
|||||||
{"Edit Properties","Змінити параметри"}.
|
{"Edit Properties","Змінити параметри"}.
|
||||||
{"ejabberd IRC module","ejabberd IRC модуль"}.
|
{"ejabberd IRC module","ejabberd IRC модуль"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC модуль"}.
|
{"ejabberd MUC module","ejabberd MUC модуль"}.
|
||||||
{"ejabberd Publish-Subscribe module","Модуль ejabberd Публікації-Абонування"}.
|
{"ejabberd Publish-Subscribe module","Модуль ejabberd Публікації-Підписки"}.
|
||||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams модуль"}.
|
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams модуль"}.
|
||||||
{"ejabberd vCard module","ejabberd vCard модуль"}.
|
{"ejabberd vCard module","ejabberd vCard модуль"}.
|
||||||
{"ejabberd Web Admin","Веб-інтерфейс Адміністрування ejabberd"}.
|
{"ejabberd Web Admin","Веб-інтерфейс Адміністрування ejabberd"}.
|
||||||
@ -98,6 +98,7 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
{"Erlang Jabber Server","Erlang Jabber Server"}.
|
||||||
{"Error","Помилка"}.
|
{"Error","Помилка"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Приклад: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","Приклад: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","Пропускати ці Jabber ID без CAPTCHA-запиту"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Експорт даних всіх користувачів сервера до файлу PIEFXIS (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Експорт даних всіх користувачів сервера до файлу PIEFXIS (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Експорт даних користувачів домена до файлу PIEFXIS (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Експорт даних користувачів домена до файлу PIEFXIS (XEP-0227):"}.
|
||||||
{"Family Name","Прізвище"}.
|
{"Family Name","Прізвище"}.
|
||||||
@ -116,9 +117,9 @@
|
|||||||
{"Groups","Групи"}.
|
{"Groups","Групи"}.
|
||||||
{"Group ","Група "}.
|
{"Group ","Група "}.
|
||||||
{"has been banned","заборонили вхід в кімнату"}.
|
{"has been banned","заборонили вхід в кімнату"}.
|
||||||
{"has been kicked because of an affiliation change","вигнано з кімнати як наслідок зміни ранга"}.
|
{"has been kicked because of an affiliation change","вигнано з кімнати внаслідок зміни рангу"}.
|
||||||
{"has been kicked because of a system shutdown","вигнано з кімнати як наслідок зупинки системи"}.
|
{"has been kicked because of a system shutdown","вигнано з кімнати внаслідок зупинки системи"}.
|
||||||
{"has been kicked because the room has been changed to members-only","вигнано з кімнати тому, що воня стала тільки для учасників"}.
|
{"has been kicked because the room has been changed to members-only","вигнано з кімнати тому, що вона стала тільки для учасників"}.
|
||||||
{"has been kicked","вигнали з кімнати"}.
|
{"has been kicked","вигнали з кімнати"}.
|
||||||
{" has set the subject to: "," встановив(ла) тему: "}.
|
{" has set the subject to: "," встановив(ла) тему: "}.
|
||||||
{"Host","Хост"}.
|
{"Host","Хост"}.
|
||||||
@ -138,13 +139,13 @@
|
|||||||
{"Invalid role: ~s","Недопустима роль: ~s"}.
|
{"Invalid role: ~s","Недопустима роль: ~s"}.
|
||||||
{"IP addresses","IP адреси"}.
|
{"IP addresses","IP адреси"}.
|
||||||
{"IP","IP"}.
|
{"IP","IP"}.
|
||||||
{"IRC channel (don't put the first #)","Канал IRC (не використовуйте спереду #)"}.
|
{"IRC channel (don't put the first #)","Канал IRC (не включаючи #)"}.
|
||||||
{"IRC server","IRC-сервер"}.
|
{"IRC server","IRC-сервер"}.
|
||||||
{"IRC settings","Парметри IRC"}.
|
{"IRC settings","Парметри IRC"}.
|
||||||
{"IRC Transport","IRC Транспорт"}.
|
{"IRC Transport","IRC Транспорт"}.
|
||||||
{"IRC username","Ім'я користувача IRC"}.
|
{"IRC username","Ім'я користувача IRC"}.
|
||||||
{"IRC Username","Ім'я користувача IRC"}.
|
{"IRC Username","Ім'я користувача IRC"}.
|
||||||
{"is now known as","змінив(ла) им'я на"}.
|
{"is now known as","змінив(ла) псевдонім на"}.
|
||||||
{"It is not allowed to send private messages of type \"groupchat\"","Не дозволяється надсилати приватні повідомлення типу \"groupchat\""}.
|
{"It is not allowed to send private messages of type \"groupchat\"","Не дозволяється надсилати приватні повідомлення типу \"groupchat\""}.
|
||||||
{"It is not allowed to send private messages to the conference","Не дозволяється надсилати приватні повідомлення в конференцію"}.
|
{"It is not allowed to send private messages to the conference","Не дозволяється надсилати приватні повідомлення в конференцію"}.
|
||||||
{"It is not allowed to send private messages","Приватні повідомлення не дозволені"}.
|
{"It is not allowed to send private messages","Приватні повідомлення не дозволені"}.
|
||||||
@ -168,7 +169,7 @@
|
|||||||
{"List of modules to start","Список завантажуваних модулів"}.
|
{"List of modules to start","Список завантажуваних модулів"}.
|
||||||
{"Low level update script","Низькорівневий сценарій поновлення"}.
|
{"Low level update script","Низькорівневий сценарій поновлення"}.
|
||||||
{"Make participants list public","Зробити список учасників видимим всім"}.
|
{"Make participants list public","Зробити список учасників видимим всім"}.
|
||||||
{"Make room captcha protected","Зробити кімнату захищеною капчею"}.
|
{"Make room CAPTCHA protected","Зробити кімнату захищеною капчею"}.
|
||||||
{"Make room members-only","Кімната тільки для зареєтрованых учасників"}.
|
{"Make room members-only","Кімната тільки для зареєтрованых учасників"}.
|
||||||
{"Make room moderated","Зробити кімнату модерованою"}.
|
{"Make room moderated","Зробити кімнату модерованою"}.
|
||||||
{"Make room password protected","Зробити кімнату захищеною паролем"}.
|
{"Make room password protected","Зробити кімнату захищеною паролем"}.
|
||||||
@ -179,7 +180,7 @@
|
|||||||
{"Max # of items to persist","Максимальне число збережених публікацій"}.
|
{"Max # of items to persist","Максимальне число збережених публікацій"}.
|
||||||
{"Max payload size in bytes","Максимальний розмір корисного навантаження в байтах"}.
|
{"Max payload size in bytes","Максимальний розмір корисного навантаження в байтах"}.
|
||||||
{"May","травня"}.
|
{"May","травня"}.
|
||||||
{"Membership is required to enter this room","В цю конференціию можуть входити тільки її члени"}.
|
{"Membership is required to enter this room","В цю конференцію можуть входити тільки її члени"}.
|
||||||
{"Members:","Члени:"}.
|
{"Members:","Члени:"}.
|
||||||
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Запам'ятайте пароль, або запишіть його на папері, який треба зберегти у безпечному місці. У Jabber'і немає автоматизованих засобів відновлення пароля на той випадок, якщо ви його забудете."}.
|
{"Memorize your password, or write it in a paper placed in a safe place. In Jabber there isn't an automated way to recover your password if you forget it.","Запам'ятайте пароль, або запишіть його на папері, який треба зберегти у безпечному місці. У Jabber'і немає автоматизованих засобів відновлення пароля на той випадок, якщо ви його забудете."}.
|
||||||
{"Memory","Пам'ять"}.
|
{"Memory","Пам'ять"}.
|
||||||
@ -243,7 +244,7 @@
|
|||||||
{"Password Verification","Перевірка Пароля"}.
|
{"Password Verification","Перевірка Пароля"}.
|
||||||
{"Password:","Пароль:"}.
|
{"Password:","Пароль:"}.
|
||||||
{"Password","Пароль"}.
|
{"Password","Пароль"}.
|
||||||
{"Path to Dir","шлях до директорії"}.
|
{"Path to Dir","Шлях до директорії"}.
|
||||||
{"Path to File","Шлях до файла"}.
|
{"Path to File","Шлях до файла"}.
|
||||||
{"Pending","Очікування"}.
|
{"Pending","Очікування"}.
|
||||||
{"Period: ","Період"}.
|
{"Period: ","Період"}.
|
||||||
@ -256,10 +257,10 @@
|
|||||||
{"Present real Jabber IDs to","Зробити реальні Jabber ID учасників видимими"}.
|
{"Present real Jabber IDs to","Зробити реальні Jabber ID учасників видимими"}.
|
||||||
{"private, ","приватна, "}.
|
{"private, ","приватна, "}.
|
||||||
{"Protocol","Протокол"}.
|
{"Protocol","Протокол"}.
|
||||||
{"Publish-Subscribe","Опублікувати-Абонувати"}.
|
{"Publish-Subscribe","Публікація-Підписка"}.
|
||||||
{"PubSub subscriber request","Запит на абонування PubSub"}.
|
{"PubSub subscriber request","Запит на підписку PubSub"}.
|
||||||
{"Purge all items when the relevant publisher goes offline","Видалити всі елементи, коли особа, що їх опублікувала, вимикається від мережі"}.
|
{"Purge all items when the relevant publisher goes offline","Видалити всі елементи, коли особа, що їх опублікувала, вимикається від мережі"}.
|
||||||
{"Queries to the conference members are not allowed in this room","Запити до користувачів в цій конференції зоборонені"}.
|
{"Queries to the conference members are not allowed in this room","Запити до користувачів в цій конференції заборонені"}.
|
||||||
{"RAM and disc copy","ОЗП та диск"}.
|
{"RAM and disc copy","ОЗП та диск"}.
|
||||||
{"RAM copy","ОЗП"}.
|
{"RAM copy","ОЗП"}.
|
||||||
{"Raw","необроблений формат"}.
|
{"Raw","необроблений формат"}.
|
||||||
@ -288,7 +289,7 @@
|
|||||||
{"Room description","Опис кімнати"}.
|
{"Room description","Опис кімнати"}.
|
||||||
{"Room Occupants","Учасники кімнати"}.
|
{"Room Occupants","Учасники кімнати"}.
|
||||||
{"Room title","Назва кімнати"}.
|
{"Room title","Назва кімнати"}.
|
||||||
{"Roster groups allowed to subscribe","Дозволені для абонування групи ростера"}.
|
{"Roster groups allowed to subscribe","Дозволені для підписки групи ростера"}.
|
||||||
{"Roster of ","Ростер користувача "}.
|
{"Roster of ","Ростер користувача "}.
|
||||||
{"Roster size","Кількість контактів"}.
|
{"Roster size","Кількість контактів"}.
|
||||||
{"Roster","Ростер"}.
|
{"Roster","Ростер"}.
|
||||||
@ -321,7 +322,7 @@
|
|||||||
{"Start Modules at ","Запуск модулів на "}.
|
{"Start Modules at ","Запуск модулів на "}.
|
||||||
{"Start Modules","Запуск модулів"}.
|
{"Start Modules","Запуск модулів"}.
|
||||||
{"Start","Запустити"}.
|
{"Start","Запустити"}.
|
||||||
{"Statistics of ~p","статистика вузла ~p"}.
|
{"Statistics of ~p","Статистика вузла ~p"}.
|
||||||
{"Statistics","Статистика"}.
|
{"Statistics","Статистика"}.
|
||||||
{"Stop Modules at ","Зупинка модулів на "}.
|
{"Stop Modules at ","Зупинка модулів на "}.
|
||||||
{"Stop Modules","Зупинка модулів"}.
|
{"Stop Modules","Зупинка модулів"}.
|
||||||
@ -338,10 +339,10 @@
|
|||||||
{"Sunday","Неділя"}.
|
{"Sunday","Неділя"}.
|
||||||
{"That nickname is already in use by another occupant","Псевдонім зайнято кимось з присутніх"}.
|
{"That nickname is already in use by another occupant","Псевдонім зайнято кимось з присутніх"}.
|
||||||
{"That nickname is registered by another person","Псевдонім зареєстровано кимось іншим"}.
|
{"That nickname is registered by another person","Псевдонім зареєстровано кимось іншим"}.
|
||||||
{"The captcha is valid.","Перевірку капчею закінчено успішно"}.
|
{"The CAPTCHA is valid.","Перевірку капчею закінчено успішно"}.
|
||||||
{"The CAPTCHA verification has failed","Перевірку капчею не пройдено"}.
|
{"The CAPTCHA verification has failed","Перевірку капчею не пройдено"}.
|
||||||
{"The collections with which a node is affiliated","Колекція, до якої входить вузел"}.
|
{"The collections with which a node is affiliated","Колекція, до якої входить вузол"}.
|
||||||
{"The password is too weak","Пароль дуже простий"}.
|
{"The password is too weak","Пароль надто простий"}.
|
||||||
{"the password is","пароль:"}.
|
{"the password is","пароль:"}.
|
||||||
{"The password of your Jabber account was successfully changed.","Пароль вашого Jabber-акаунту був успішно змінений."}.
|
{"The password of your Jabber account was successfully changed.","Пароль вашого Jabber-акаунту був успішно змінений."}.
|
||||||
{"There was an error changing the password: ","Помилка при зміні пароля: "}.
|
{"There was an error changing the password: ","Помилка при зміні пароля: "}.
|
||||||
@ -357,6 +358,7 @@
|
|||||||
{"Thursday","Четвер"}.
|
{"Thursday","Четвер"}.
|
||||||
{"Time delay","Час затримки"}.
|
{"Time delay","Час затримки"}.
|
||||||
{"Time","Час"}.
|
{"Time","Час"}.
|
||||||
|
{"Too many CAPTCHA requests","Надто багато CAPTCHA-запитів"}.
|
||||||
{"To ~s","До ~s"}.
|
{"To ~s","До ~s"}.
|
||||||
{"To","Кому"}.
|
{"To","Кому"}.
|
||||||
{"Traffic rate limit is exceeded","Швидкість передачі інформації було перевищено"}.
|
{"Traffic rate limit is exceeded","Швидкість передачі інформації було перевищено"}.
|
||||||
@ -365,9 +367,8 @@
|
|||||||
{"Transactions Logged:","Транзакції запротокольовані:"}.
|
{"Transactions Logged:","Транзакції запротокольовані:"}.
|
||||||
{"Transactions Restarted:","Транзакції перезапущені:"}.
|
{"Transactions Restarted:","Транзакції перезапущені:"}.
|
||||||
{"Tuesday","Вівторок"}.
|
{"Tuesday","Вівторок"}.
|
||||||
{"Unable to generate a captcha","Не має можливості сгенерувати капчу"}.
|
{"Unable to generate a CAPTCHA","Нема можливості згенерувати капчу"}.
|
||||||
{"Unable to generate a CAPTCHA","Нема можливості сгенерувати капчу"}.
|
{"Unauthorized","Не авторизовано"}.
|
||||||
{"Unauthorized","Не авторізован"}.
|
|
||||||
{"Unregister a Jabber account","Видалити Jabber-акаунт"}.
|
{"Unregister a Jabber account","Видалити Jabber-акаунт"}.
|
||||||
{"Unregister","Видалити"}.
|
{"Unregister","Видалити"}.
|
||||||
{"Update message of the day (don't send)","Оновити повідомлення дня (не надсилати)"}.
|
{"Update message of the day (don't send)","Оновити повідомлення дня (не надсилати)"}.
|
||||||
@ -392,15 +393,15 @@
|
|||||||
{"Visitors are not allowed to send messages to all occupants","Відвідувачам не дозволяється надсилати повідомлення всім присутнім"}.
|
{"Visitors are not allowed to send messages to all occupants","Відвідувачам не дозволяється надсилати повідомлення всім присутнім"}.
|
||||||
{"Wednesday","Середа"}.
|
{"Wednesday","Середа"}.
|
||||||
{"When to send the last published item","Коли надсилати останній опублікований елемент"}.
|
{"When to send the last published item","Коли надсилати останній опублікований елемент"}.
|
||||||
{"Whether to allow subscriptions","Дозволити передплату"}.
|
{"Whether to allow subscriptions","Дозволяти підписку"}.
|
||||||
{"You can later change your password using a Jabber client.","Пізніше можна змінити пароль через Jabber-клієнт."}.
|
{"You can later change your password using a Jabber client.","Пізніше можна змінити пароль через Jabber-клієнт."}.
|
||||||
{"You have been banned from this room","Вам заборонено входити в цю конференцію"}.
|
{"You have been banned from this room","Вам заборонено входити в цю конференцію"}.
|
||||||
{"You must fill in field \"Nickname\" in the form","Вам необхідно заповнити поле \"Псевдонім\" у формі"}.
|
{"You must fill in field \"Nickname\" in the form","Вам необхідно заповнити поле \"Псевдонім\" у формі"}.
|
||||||
{"You need a client that supports x:data and CAPTCHA to register","Для реєстрації псевдоніму необхідно використовувати клієнт з ідтримкою x:data"}.
|
{"You need a client that supports x:data and CAPTCHA to register","Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:data"}.
|
||||||
{"You need a client that supports x:data to register the nickname","Для реєстрації псевдоніму необхідно використовувати клієнт з ідтримкою x:data"}.
|
{"You need a client that supports x:data to register the nickname","Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:data"}.
|
||||||
{"You need an x:data capable client to configure mod_irc settings","Для налагодження параметрів mod_irc необхідно використовувати клієнт, що має підтримку x:data"}.
|
{"You need an x:data capable client to configure mod_irc settings","Для налагодження параметрів mod_irc необхідно використовувати клієнт, що має підтримку x:data"}.
|
||||||
{"You need an x:data capable client to configure room","Для конфігурування кімнати потрібно використовувати клієнт з підтримкою x:data"}.
|
{"You need an x:data capable client to configure room","Для конфігурування кімнати потрібно використовувати клієнт з підтримкою x:data"}.
|
||||||
{"You need an x:data capable client to search","Для пошуку необхідний x:data-придатний клієнт"}.
|
{"You need an x:data capable client to search","Для пошуку необхідний клієнт із підтримкою x:data"}.
|
||||||
{"Your active privacy list has denied the routing of this stanza.","Маршрутизація цієї строфи була відмінена активним списком приватності."}.
|
{"Your active privacy list has denied the routing of this stanza.","Маршрутизація цієї строфи була відмінена активним списком приватності."}.
|
||||||
{"Your contact offline message queue is full. The message has been discarded.","Черга повідомлень, що не були доставлені, переповнена. Повідомлення не було збережено."}.
|
{"Your contact offline message queue is full. The message has been discarded.","Черга повідомлень, що не були доставлені, переповнена. Повідомлення не було збережено."}.
|
||||||
{"Your Jabber account was successfully created.","Ваш Jabber-акаунт було успішно створено."}.
|
{"Your Jabber account was successfully created.","Ваш Jabber-акаунт було успішно створено."}.
|
||||||
|
688
src/msgs/uk.po
688
src/msgs/uk.po
File diff suppressed because it is too large
Load Diff
680
src/msgs/vi.po
680
src/msgs/vi.po
File diff suppressed because it is too large
Load Diff
680
src/msgs/wa.po
680
src/msgs/wa.po
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,9 @@
|
|||||||
{"Allow users to send invites","允许用户发送邀请"}.
|
{"Allow users to send invites","允许用户发送邀请"}.
|
||||||
{"Allow users to send private messages","允许用户发送私聊消息"}.
|
{"Allow users to send private messages","允许用户发送私聊消息"}.
|
||||||
{"Allow visitors to change nickname","允许用户更改昵称"}.
|
{"Allow visitors to change nickname","允许用户更改昵称"}.
|
||||||
|
{"Allow visitors to send private messages to","允许访客发送私聊消息至"}.
|
||||||
{"Allow visitors to send status text in presence updates","更新在线状态时允许用户发送状态文本"}.
|
{"Allow visitors to send status text in presence updates","更新在线状态时允许用户发送状态文本"}.
|
||||||
|
{"Allow visitors to send voice requests","允许访客发送声音请求"}.
|
||||||
{"All Users","所有用户"}.
|
{"All Users","所有用户"}.
|
||||||
{"Announcements","通知"}.
|
{"Announcements","通知"}.
|
||||||
{"anyone","任何人"}.
|
{"anyone","任何人"}.
|
||||||
@ -29,11 +31,11 @@
|
|||||||
{"August","八月"}.
|
{"August","八月"}.
|
||||||
{"Backup Management","备份管理"}.
|
{"Backup Management","备份管理"}.
|
||||||
{"Backup of ","备份来源 "}.
|
{"Backup of ","备份来源 "}.
|
||||||
{"Backup to File at ","备份到文件位于"}.
|
{"Backup to File at ","备份文件位于"}.
|
||||||
{"Backup","备份"}.
|
{"Backup","备份"}.
|
||||||
{"Bad format","格式错误"}.
|
{"Bad format","格式错误"}.
|
||||||
{"Birthday","出生日期"}.
|
{"Birthday","出生日期"}.
|
||||||
{"CAPTCHA web page","验证码 Web 页面"}.
|
{"CAPTCHA web page","验证码网页"}.
|
||||||
{"Change Password","更改密码"}.
|
{"Change Password","更改密码"}.
|
||||||
{"Change User Password","更改用户密码"}.
|
{"Change User Password","更改用户密码"}.
|
||||||
{"Characters not allowed:","禁用字符:"}.
|
{"Characters not allowed:","禁用字符:"}.
|
||||||
@ -75,6 +77,7 @@
|
|||||||
{"Dump Backup to Text File at ","转储备份到文本文件于"}.
|
{"Dump Backup to Text File at ","转储备份到文本文件于"}.
|
||||||
{"Dump to Text File","转储到文本文件"}.
|
{"Dump to Text File","转储到文本文件"}.
|
||||||
{"Edit Properties","编辑属性"}.
|
{"Edit Properties","编辑属性"}.
|
||||||
|
{"Either approve or decline the voice request.","接受或拒绝声音请求"}.
|
||||||
{"ejabberd IRC module","ejabberd IRC 模块"}.
|
{"ejabberd IRC module","ejabberd IRC 模块"}.
|
||||||
{"ejabberd MUC module","ejabberd MUC 模块"}.
|
{"ejabberd MUC module","ejabberd MUC 模块"}.
|
||||||
{"ejabberd Publish-Subscribe module","ejabberd 发行-订阅模块"}.
|
{"ejabberd Publish-Subscribe module","ejabberd 发行-订阅模块"}.
|
||||||
@ -98,8 +101,10 @@
|
|||||||
{"Erlang Jabber Server","Erlang Jabber 服务器"}.
|
{"Erlang Jabber Server","Erlang Jabber 服务器"}.
|
||||||
{"Error","错误"}.
|
{"Error","错误"}.
|
||||||
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","例如: [{\"irc.lucky.net\", \"koi8-r\"}, 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
{"Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].","例如: [{\"irc.lucky.net\", \"koi8-r\"}, 6667, \"secret\"}, {\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]."}.
|
||||||
|
{"Exclude Jabber IDs from CAPTCHA challenge","从验证码挑战中排除 Jabber ID"}.
|
||||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","将服务器上所有用户的数据导出到 PIEFXIS 文件 (XEP-0227):"}.
|
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","将服务器上所有用户的数据导出到 PIEFXIS 文件 (XEP-0227):"}.
|
||||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","将某主机的用户数据导出到 PIEFXIS 文件 (XEP-0227):"}.
|
{"Export data of users in a host to PIEFXIS files (XEP-0227):","将某主机的用户数据导出到 PIEFXIS 文件 (XEP-0227):"}.
|
||||||
|
{"Failed to extract JID from your voice request approval","无法从你的声音请求确认信息中提取JID"}.
|
||||||
{"Family Name","姓氏"}.
|
{"Family Name","姓氏"}.
|
||||||
{"February","二月"}.
|
{"February","二月"}.
|
||||||
{"Fill in fields to search for any matching Jabber User","填充字段以搜索任何匹配的 Jabber 用户"}.
|
{"Fill in fields to search for any matching Jabber User","填充字段以搜索任何匹配的 Jabber 用户"}.
|
||||||
@ -113,6 +118,7 @@
|
|||||||
{"Get User Last Login Time","获取用户上次登陆时间"}.
|
{"Get User Last Login Time","获取用户上次登陆时间"}.
|
||||||
{"Get User Password","获取用户密码"}.
|
{"Get User Password","获取用户密码"}.
|
||||||
{"Get User Statistics","获取用户统计"}.
|
{"Get User Statistics","获取用户统计"}.
|
||||||
|
{"Grant voice to this person?","为此人授权声音?"}.
|
||||||
{"Groups","组"}.
|
{"Groups","组"}.
|
||||||
{"Group ","组"}.
|
{"Group ","组"}.
|
||||||
{"has been banned","已被禁止"}.
|
{"has been banned","已被禁止"}.
|
||||||
@ -122,7 +128,7 @@
|
|||||||
{"has been kicked","已被踢出"}.
|
{"has been kicked","已被踢出"}.
|
||||||
{" has set the subject to: ","已将标题设置为: "}.
|
{" has set the subject to: ","已将标题设置为: "}.
|
||||||
{"Host","主机"}.
|
{"Host","主机"}.
|
||||||
{"If you don't see the CAPTCHA image here, visit the web page.","如果您在这里没有看到验证码图片, 请访问 Web 页面."}.
|
{"If you don't see the CAPTCHA image here, visit the web page.","如果您在这里没有看到验证码图片, 请访问网页."}.
|
||||||
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","如果您想为 IRC 服务器指定不同的端口, 密码, 编码, 请用 '{\"irc 服务器\", \"编码\", 端口, \"密码\"}' 格式的值填充此表单. 默认情况下此服务使用\"~s\"编码, ~p 端口, 密码为空."}.
|
{"If you want to specify different ports, passwords, encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\", port, \"password\"}'. By default this service use \"~s\" encoding, port ~p, empty password.","如果您想为 IRC 服务器指定不同的端口, 密码, 编码, 请用 '{\"irc 服务器\", \"编码\", 端口, \"密码\"}' 格式的值填充此表单. 默认情况下此服务使用\"~s\"编码, ~p 端口, 密码为空."}.
|
||||||
{"Import Directory","导入目录"}.
|
{"Import Directory","导入目录"}.
|
||||||
{"Import File","导入文件"}.
|
{"Import File","导入文件"}.
|
||||||
@ -132,7 +138,7 @@
|
|||||||
{"Import users data from jabberd14 spool directory:","从 jabberd14 Spool 目录导入用户数据:"}.
|
{"Import users data from jabberd14 spool directory:","从 jabberd14 Spool 目录导入用户数据:"}.
|
||||||
{"Import Users from Dir at ","导入用户的目录位于 "}.
|
{"Import Users from Dir at ","导入用户的目录位于 "}.
|
||||||
{"Import Users From jabberd14 Spool Files","从 jabberd14 Spool 文件导入用户"}.
|
{"Import Users From jabberd14 Spool Files","从 jabberd14 Spool 文件导入用户"}.
|
||||||
{"Improper message type","不正确的消息类型"}.
|
{"Improper message type","不恰当的消息类型"}.
|
||||||
{"Incorrect password","密码不正确"}.
|
{"Incorrect password","密码不正确"}.
|
||||||
{"Invalid affiliation: ~s","无效加入: ~s"}.
|
{"Invalid affiliation: ~s","无效加入: ~s"}.
|
||||||
{"Invalid role: ~s","无效角色: ~s"}.
|
{"Invalid role: ~s","无效角色: ~s"}.
|
||||||
@ -168,7 +174,7 @@
|
|||||||
{"List of modules to start","要启动的模块列表"}.
|
{"List of modules to start","要启动的模块列表"}.
|
||||||
{"Low level update script","低级别更新脚本"}.
|
{"Low level update script","低级别更新脚本"}.
|
||||||
{"Make participants list public","公开参与人列表"}.
|
{"Make participants list public","公开参与人列表"}.
|
||||||
{"Make room captcha protected","保护房间验证码"}.
|
{"Make room CAPTCHA protected","保护房间验证码"}.
|
||||||
{"Make room members-only","设置房间只接收会员"}.
|
{"Make room members-only","设置房间只接收会员"}.
|
||||||
{"Make room moderated","设置房间只接收主持人"}.
|
{"Make room moderated","设置房间只接收主持人"}.
|
||||||
{"Make room password protected","进入此房间需要密码"}.
|
{"Make room password protected","进入此房间需要密码"}.
|
||||||
@ -177,7 +183,7 @@
|
|||||||
{"March","三月"}.
|
{"March","三月"}.
|
||||||
{"Maximum Number of Occupants","允许的与会人最大数"}.
|
{"Maximum Number of Occupants","允许的与会人最大数"}.
|
||||||
{"Max # of items to persist","允许持久化的最大内容条目数"}.
|
{"Max # of items to persist","允许持久化的最大内容条目数"}.
|
||||||
{"Max payload size in bytes","最大有效负载比特数"}.
|
{"Max payload size in bytes","最大有效负载字节数"}.
|
||||||
{"May","五月"}.
|
{"May","五月"}.
|
||||||
{"Membership is required to enter this room","进入此房间需要会员身份"}.
|
{"Membership is required to enter this room","进入此房间需要会员身份"}.
|
||||||
{"Members:","会员:"}.
|
{"Members:","会员:"}.
|
||||||
@ -185,6 +191,7 @@
|
|||||||
{"Memory","内存"}.
|
{"Memory","内存"}.
|
||||||
{"Message body","消息主体"}.
|
{"Message body","消息主体"}.
|
||||||
{"Middle Name","中间名"}.
|
{"Middle Name","中间名"}.
|
||||||
|
{"Minimum interval between voice requests (in seconds)","声音请求的最小间隔(以秒为单位)"}.
|
||||||
{"Moderator privileges required","需要主持人权限"}.
|
{"Moderator privileges required","需要主持人权限"}.
|
||||||
{"moderators only","仅主持人"}.
|
{"moderators only","仅主持人"}.
|
||||||
{"Modified modules","被修改模块"}.
|
{"Modified modules","被修改模块"}.
|
||||||
@ -200,6 +207,7 @@
|
|||||||
{"Nickname ~s does not exist in the room","昵称 ~s 不在该房间"}.
|
{"Nickname ~s does not exist in the room","昵称 ~s 不在该房间"}.
|
||||||
{"Nickname","昵称"}.
|
{"Nickname","昵称"}.
|
||||||
{"No body provided for announce message","通知消息无正文内容"}.
|
{"No body provided for announce message","通知消息无正文内容"}.
|
||||||
|
{"nobody","没有人"}.
|
||||||
{"No Data","没有数据"}.
|
{"No Data","没有数据"}.
|
||||||
{"Node ID","节点 ID"}.
|
{"Node ID","节点 ID"}.
|
||||||
{"Node not found","没有找到节点"}.
|
{"Node not found","没有找到节点"}.
|
||||||
@ -227,6 +235,7 @@
|
|||||||
{"Only deliver notifications to available users","仅将通知发送给可发送的用户"}.
|
{"Only deliver notifications to available users","仅将通知发送给可发送的用户"}.
|
||||||
{"Only moderators and participants are allowed to change the subject in this room","只有主持人和参与人可以在此房间里更改主题"}.
|
{"Only moderators and participants are allowed to change the subject in this room","只有主持人和参与人可以在此房间里更改主题"}.
|
||||||
{"Only moderators are allowed to change the subject in this room","只有主持人可以在此房间里更改主题"}.
|
{"Only moderators are allowed to change the subject in this room","只有主持人可以在此房间里更改主题"}.
|
||||||
|
{"Only moderators can approve voice requests","仅主持人能确认声音请求"}.
|
||||||
{"Only occupants are allowed to send messages to the conference","只有与会人可以向大会发送消息"}.
|
{"Only occupants are allowed to send messages to the conference","只有与会人可以向大会发送消息"}.
|
||||||
{"Only occupants are allowed to send queries to the conference","只有与会人可以向大会发出查询请求"}.
|
{"Only occupants are allowed to send queries to the conference","只有与会人可以向大会发出查询请求"}.
|
||||||
{"Only service administrators are allowed to send service messages","只有服务管理员可以发送服务消息"}.
|
{"Only service administrators are allowed to send service messages","只有服务管理员可以发送服务消息"}.
|
||||||
@ -250,6 +259,7 @@
|
|||||||
{"Persist items to storage","持久化内容条目"}.
|
{"Persist items to storage","持久化内容条目"}.
|
||||||
{"Ping","Ping"}.
|
{"Ping","Ping"}.
|
||||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","注意:这些选项仅将备份内置的 Mnesia 数据库. 如果您正在使用 ODBC 模块, 您还需要分别备份您的数据库."}.
|
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","注意:这些选项仅将备份内置的 Mnesia 数据库. 如果您正在使用 ODBC 模块, 您还需要分别备份您的数据库."}.
|
||||||
|
{"Please, wait for a while before sending new voice request","请稍后再发送新的声音请求"}.
|
||||||
{"Pong","Pong"}.
|
{"Pong","Pong"}.
|
||||||
{"Port ~b","~b 的端口"}.
|
{"Port ~b","~b 的端口"}.
|
||||||
{"Port","端口"}.
|
{"Port","端口"}.
|
||||||
@ -314,9 +324,9 @@
|
|||||||
{"Shut Down Service","关闭服务"}.
|
{"Shut Down Service","关闭服务"}.
|
||||||
{"~s invites you to the room ~s","~s 邀请你到 ~s 房间"}.
|
{"~s invites you to the room ~s","~s 邀请你到 ~s 房间"}.
|
||||||
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","某些 Jabber 客户端可以在你的计算机里存储密码. 请仅在你确认你的计算机安全的情况下使用该功能."}.
|
{"Some Jabber clients can store your password in your computer. Use that feature only if you trust your computer is safe.","某些 Jabber 客户端可以在你的计算机里存储密码. 请仅在你确认你的计算机安全的情况下使用该功能."}.
|
||||||
{"Specify the access model","指定访问模式"}.
|
{"Specify the access model","指定访问范例"}.
|
||||||
{"Specify the event message type","指定事件消息类型"}.
|
{"Specify the event message type","指定事件消息类型"}.
|
||||||
{"Specify the publisher model","指定发布人样式"}.
|
{"Specify the publisher model","指定发布人范例"}.
|
||||||
{"~s's Offline Messages Queue","~s 的离线消息队列"}.
|
{"~s's Offline Messages Queue","~s 的离线消息队列"}.
|
||||||
{"Start Modules at ","要启动的模块位于 "}.
|
{"Start Modules at ","要启动的模块位于 "}.
|
||||||
{"Start Modules","启动模块"}.
|
{"Start Modules","启动模块"}.
|
||||||
@ -338,7 +348,7 @@
|
|||||||
{"Sunday","星期天"}.
|
{"Sunday","星期天"}.
|
||||||
{"That nickname is already in use by another occupant","该昵称已被另一用户使用"}.
|
{"That nickname is already in use by another occupant","该昵称已被另一用户使用"}.
|
||||||
{"That nickname is registered by another person","该昵称已被另一个人注册了"}.
|
{"That nickname is registered by another person","该昵称已被另一个人注册了"}.
|
||||||
{"The captcha is valid.","验证码有效."}.
|
{"The CAPTCHA is valid.","验证码有效."}.
|
||||||
{"The CAPTCHA verification has failed","验证码检查失败"}.
|
{"The CAPTCHA verification has failed","验证码检查失败"}.
|
||||||
{"The collections with which a node is affiliated","加入结点的集合"}.
|
{"The collections with which a node is affiliated","加入结点的集合"}.
|
||||||
{"The password is too weak","密码强度太弱"}.
|
{"The password is too weak","密码强度太弱"}.
|
||||||
@ -357,6 +367,7 @@
|
|||||||
{"Thursday","星期四"}.
|
{"Thursday","星期四"}.
|
||||||
{"Time delay","时间延迟"}.
|
{"Time delay","时间延迟"}.
|
||||||
{"Time","时间"}.
|
{"Time","时间"}.
|
||||||
|
{"Too many CAPTCHA requests","验证码请求太多"}.
|
||||||
{"To ~s","发送给~s"}.
|
{"To ~s","发送给~s"}.
|
||||||
{"To","到"}.
|
{"To","到"}.
|
||||||
{"Traffic rate limit is exceeded","已经超过传输率限制"}.
|
{"Traffic rate limit is exceeded","已经超过传输率限制"}.
|
||||||
@ -365,7 +376,6 @@
|
|||||||
{"Transactions Logged:","记入日志的事务:"}.
|
{"Transactions Logged:","记入日志的事务:"}.
|
||||||
{"Transactions Restarted:","重启的事务:"}.
|
{"Transactions Restarted:","重启的事务:"}.
|
||||||
{"Tuesday","星期二"}.
|
{"Tuesday","星期二"}.
|
||||||
{"Unable to generate a captcha","无法产生验证码"}.
|
|
||||||
{"Unable to generate a CAPTCHA","无法生成验证码"}.
|
{"Unable to generate a CAPTCHA","无法生成验证码"}.
|
||||||
{"Unauthorized","未认证的"}.
|
{"Unauthorized","未认证的"}.
|
||||||
{"Unregister a Jabber account","注销 Jabber 帐户"}.
|
{"Unregister a Jabber account","注销 Jabber 帐户"}.
|
||||||
@ -378,6 +388,7 @@
|
|||||||
{"Update","更新"}.
|
{"Update","更新"}.
|
||||||
{"Uptime:","正常运行时间:"}.
|
{"Uptime:","正常运行时间:"}.
|
||||||
{"Use of STARTTLS required","要求使用 STARTTLS"}.
|
{"Use of STARTTLS required","要求使用 STARTTLS"}.
|
||||||
|
{"User JID","用户 JID"}.
|
||||||
{"User Management","用户管理"}.
|
{"User Management","用户管理"}.
|
||||||
{"Username:","用户名:"}.
|
{"Username:","用户名:"}.
|
||||||
{"Users are not allowed to register accounts so quickly","不允许用户太频繁地注册帐户"}.
|
{"Users are not allowed to register accounts so quickly","不允许用户太频繁地注册帐户"}.
|
||||||
@ -390,6 +401,8 @@
|
|||||||
{"Virtual Hosts","虚拟主机"}.
|
{"Virtual Hosts","虚拟主机"}.
|
||||||
{"Visitors are not allowed to change their nicknames in this room","此房间不允许用户更改昵称"}.
|
{"Visitors are not allowed to change their nicknames in this room","此房间不允许用户更改昵称"}.
|
||||||
{"Visitors are not allowed to send messages to all occupants","不允许访客给所有占有者发送消息"}.
|
{"Visitors are not allowed to send messages to all occupants","不允许访客给所有占有者发送消息"}.
|
||||||
|
{"Voice requests are disabled in this conference","该会议的声音请求以被禁用"}.
|
||||||
|
{"Voice request","声音请求"}.
|
||||||
{"Wednesday","星期三"}.
|
{"Wednesday","星期三"}.
|
||||||
{"When to send the last published item","何时发送最新发布的内容条目"}.
|
{"When to send the last published item","何时发送最新发布的内容条目"}.
|
||||||
{"Whether to allow subscriptions","是否允许订阅"}.
|
{"Whether to allow subscriptions","是否允许订阅"}.
|
||||||
|
700
src/msgs/zh.po
700
src/msgs/zh.po
File diff suppressed because it is too large
Load Diff
@ -41,7 +41,9 @@
|
|||||||
escape_like/1,
|
escape_like/1,
|
||||||
to_bool/1,
|
to_bool/1,
|
||||||
keep_alive/1,
|
keep_alive/1,
|
||||||
sql_query_on_all_connections/2]).
|
sql_query_on_all_connections/2,
|
||||||
|
encode_term/1,
|
||||||
|
decode_term/1]).
|
||||||
|
|
||||||
%% gen_fsm callbacks
|
%% gen_fsm callbacks
|
||||||
-export([init/1,
|
-export([init/1,
|
||||||
@ -177,6 +179,14 @@ to_bool(true) -> true;
|
|||||||
to_bool(1) -> true;
|
to_bool(1) -> true;
|
||||||
to_bool(_) -> false.
|
to_bool(_) -> false.
|
||||||
|
|
||||||
|
encode_term(Term) ->
|
||||||
|
escape(erl_prettypr:format(erl_syntax:abstract(Term))).
|
||||||
|
|
||||||
|
decode_term(Str) ->
|
||||||
|
{ok, Tokens, _} = erl_scan:string(Str ++ "."),
|
||||||
|
{ok, Term} = erl_parse:parse_term(Tokens),
|
||||||
|
Term.
|
||||||
|
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
%%% Callback functions from gen_fsm
|
%%% Callback functions from gen_fsm
|
||||||
%%%----------------------------------------------------------------------
|
%%%----------------------------------------------------------------------
|
||||||
|
@ -59,6 +59,21 @@ CREATE TABLE rostergroups (
|
|||||||
|
|
||||||
CREATE INDEX pk_rosterg_user_jid ON rostergroups(username(75), jid(75));
|
CREATE INDEX pk_rosterg_user_jid ON rostergroups(username(75), jid(75));
|
||||||
|
|
||||||
|
CREATE TABLE sr_group (
|
||||||
|
name varchar(250) NOT NULL,
|
||||||
|
opts text NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE TABLE sr_user (
|
||||||
|
jid varchar(250) NOT NULL,
|
||||||
|
grp varchar(250) NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_sr_user_jid_group ON sr_user(jid(75), grp(75));
|
||||||
|
CREATE INDEX i_sr_user_jid ON sr_user(jid);
|
||||||
|
CREATE INDEX i_sr_user_grp ON sr_user(grp);
|
||||||
|
|
||||||
CREATE TABLE spool (
|
CREATE TABLE spool (
|
||||||
username varchar(250) NOT NULL,
|
username varchar(250) NOT NULL,
|
||||||
@ -76,6 +91,11 @@ CREATE TABLE vcard (
|
|||||||
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
) CHARACTER SET utf8;
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE TABLE vcard_xupdate (
|
||||||
|
username varchar(250) PRIMARY KEY,
|
||||||
|
hash text NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
CREATE TABLE vcard_search (
|
||||||
username varchar(250) NOT NULL,
|
username varchar(250) NOT NULL,
|
||||||
@ -233,3 +253,36 @@ CREATE TABLE pubsub_subscription_opt (
|
|||||||
);
|
);
|
||||||
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt(subid(32), opt_name(32));
|
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt(subid(32), opt_name(32));
|
||||||
|
|
||||||
|
CREATE TABLE muc_room (
|
||||||
|
name text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
opts text NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_muc_room_name_host USING BTREE ON muc_room(name(75), host(75));
|
||||||
|
|
||||||
|
CREATE TABLE muc_registered (
|
||||||
|
jid text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
nick text NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE INDEX i_muc_registered_nick USING BTREE ON muc_registered(nick(75));
|
||||||
|
CREATE UNIQUE INDEX i_muc_registered_jid_host USING BTREE ON muc_registered(jid(75), host(75));
|
||||||
|
|
||||||
|
CREATE TABLE irc_custom (
|
||||||
|
jid text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
data text NOT NULL,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_irc_custom_jid_host USING BTREE ON irc_custom(jid(75), host(75));
|
||||||
|
|
||||||
|
CREATE TABLE motd (
|
||||||
|
username varchar(250) PRIMARY KEY,
|
||||||
|
xml text,
|
||||||
|
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) CHARACTER SET utf8;
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
-author("mremond@process-one.net").
|
-author("mremond@process-one.net").
|
||||||
|
|
||||||
-export([get_db_type/0,
|
-export([get_db_type/0,
|
||||||
|
update_t/4,
|
||||||
sql_transaction/2,
|
sql_transaction/2,
|
||||||
get_last/2,
|
get_last/2,
|
||||||
set_last_t/4,
|
set_last_t/4,
|
||||||
@ -69,6 +70,7 @@
|
|||||||
get_privacy_list_id_t/2,
|
get_privacy_list_id_t/2,
|
||||||
get_privacy_list_data/3,
|
get_privacy_list_data/3,
|
||||||
get_privacy_list_data_by_id/2,
|
get_privacy_list_data_by_id/2,
|
||||||
|
get_privacy_list_data_by_id_t/1,
|
||||||
set_default_privacy_list/2,
|
set_default_privacy_list/2,
|
||||||
unset_default_privacy_list/2,
|
unset_default_privacy_list/2,
|
||||||
remove_privacy_list/2,
|
remove_privacy_list/2,
|
||||||
@ -523,6 +525,13 @@ get_privacy_list_data_by_id(LServer, ID) ->
|
|||||||
"from privacy_list_data "
|
"from privacy_list_data "
|
||||||
"where id='", ID, "' order by ord;"]).
|
"where id='", ID, "' order by ord;"]).
|
||||||
|
|
||||||
|
get_privacy_list_data_by_id_t(ID) ->
|
||||||
|
ejabberd_odbc:sql_query_t(
|
||||||
|
["select t, value, action, ord, match_all, match_iq, "
|
||||||
|
"match_message, match_presence_in, match_presence_out "
|
||||||
|
"from privacy_list_data "
|
||||||
|
"where id='", ID, "' order by ord;"]).
|
||||||
|
|
||||||
set_default_privacy_list(Username, SName) ->
|
set_default_privacy_list(Username, SName) ->
|
||||||
update_t("privacy_default_list", ["username", "name"],
|
update_t("privacy_default_list", ["username", "name"],
|
||||||
[Username, SName], ["username='", Username, "'"]).
|
[Username, SName], ["username='", Username, "'"]).
|
||||||
@ -851,6 +860,10 @@ get_privacy_list_data_by_id(LServer, ID) ->
|
|||||||
LServer,
|
LServer,
|
||||||
["EXECUTE dbo.get_privacy_list_data_by_id '", ID, "'"]).
|
["EXECUTE dbo.get_privacy_list_data_by_id '", ID, "'"]).
|
||||||
|
|
||||||
|
get_privacy_list_data_by_id_t(ID) ->
|
||||||
|
ejabberd_odbc:sql_query_t(
|
||||||
|
["EXECUTE dbo.get_privacy_list_data_by_id '", ID, "'"]).
|
||||||
|
|
||||||
set_default_privacy_list(Username, SName) ->
|
set_default_privacy_list(Username, SName) ->
|
||||||
ejabberd_odbc:sql_query_t(
|
ejabberd_odbc:sql_query_t(
|
||||||
["EXECUTE dbo.set_default_privacy_list '", Username, "' , '", SName, "'"]).
|
["EXECUTE dbo.set_default_privacy_list '", Username, "' , '", SName, "'"]).
|
||||||
|
@ -57,6 +57,21 @@ CREATE TABLE rostergroups (
|
|||||||
|
|
||||||
CREATE INDEX pk_rosterg_user_jid ON rostergroups USING btree (username, jid);
|
CREATE INDEX pk_rosterg_user_jid ON rostergroups USING btree (username, jid);
|
||||||
|
|
||||||
|
CREATE TABLE sr_group (
|
||||||
|
name text NOT NULL,
|
||||||
|
opts text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE sr_user (
|
||||||
|
jid text NOT NULL,
|
||||||
|
grp text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_sr_user_jid_grp ON sr_user USING btree (jid, grp);
|
||||||
|
CREATE INDEX i_sr_user_jid ON sr_user USING btree (jid);
|
||||||
|
CREATE INDEX i_sr_user_grp ON sr_user USING btree (grp);
|
||||||
|
|
||||||
CREATE TABLE spool (
|
CREATE TABLE spool (
|
||||||
username text NOT NULL,
|
username text NOT NULL,
|
||||||
@ -74,6 +89,12 @@ CREATE TABLE vcard (
|
|||||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE vcard_xupdate (
|
||||||
|
username text PRIMARY KEY,
|
||||||
|
hash text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
CREATE TABLE vcard_search (
|
CREATE TABLE vcard_search (
|
||||||
username text NOT NULL,
|
username text NOT NULL,
|
||||||
lusername text PRIMARY KEY,
|
lusername text PRIMARY KEY,
|
||||||
@ -219,3 +240,37 @@ CREATE TABLE pubsub_subscription_opt (
|
|||||||
opt_value text
|
opt_value text
|
||||||
);
|
);
|
||||||
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt USING btree (subid, opt_name);
|
CREATE UNIQUE INDEX i_pubsub_subscription_opt ON pubsub_subscription_opt USING btree (subid, opt_name);
|
||||||
|
|
||||||
|
CREATE TABLE muc_room (
|
||||||
|
name text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
opts text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_muc_room_name_host ON muc_room USING btree (name, host);
|
||||||
|
|
||||||
|
CREATE TABLE muc_registered (
|
||||||
|
jid text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
nick text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX i_muc_registered_nick ON muc_registered USING btree (nick);
|
||||||
|
CREATE UNIQUE INDEX i_muc_registered_jid_host ON muc_registered USING btree (jid, host);
|
||||||
|
|
||||||
|
CREATE TABLE irc_custom (
|
||||||
|
jid text NOT NULL,
|
||||||
|
host text NOT NULL,
|
||||||
|
data text NOT NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX i_irc_custom_jid_host ON irc_custom USING btree (jid, host);
|
||||||
|
|
||||||
|
CREATE TABLE motd (
|
||||||
|
username text PRIMARY KEY,
|
||||||
|
xml text,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
@ -292,7 +292,7 @@ get_proc_name({local, Name}) ->
|
|||||||
exit(process_not_registered)
|
exit(process_not_registered)
|
||||||
end;
|
end;
|
||||||
get_proc_name({global, Name}) ->
|
get_proc_name({global, Name}) ->
|
||||||
case global:safe_whereis_name(Name) of
|
case global:whereis_name(Name) of
|
||||||
undefined ->
|
undefined ->
|
||||||
exit(process_not_registered_globally);
|
exit(process_not_registered_globally);
|
||||||
Pid when Pid==self() ->
|
Pid when Pid==self() ->
|
||||||
@ -314,7 +314,7 @@ get_parent() ->
|
|||||||
name_to_pid(Name) ->
|
name_to_pid(Name) ->
|
||||||
case whereis(Name) of
|
case whereis(Name) of
|
||||||
undefined ->
|
undefined ->
|
||||||
case global:safe_whereis_name(Name) of
|
case global:whereis_name(Name) of
|
||||||
undefined ->
|
undefined ->
|
||||||
exit(could_not_find_registerd_name);
|
exit(could_not_find_registerd_name);
|
||||||
Pid ->
|
Pid ->
|
||||||
|
@ -33,8 +33,8 @@ LD=link.exe
|
|||||||
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
||||||
|
|
||||||
$(DLL) : $(OBJECT)
|
$(DLL) : $(OBJECT)
|
||||||
$(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT)
|
$(LD) $(LD_FLAGS) -out:$@ $<
|
||||||
|
|
||||||
$(OBJECT) : $(SOURCE) $(AUXIL)
|
$(OBJECT) : $(SOURCE) $(AUXIL)
|
||||||
$(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE)
|
$(CC) $(CC_FLAGS) -c -Fo$@ $<
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ LD=link.exe
|
|||||||
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(OPENSSL_DIR)\lib\VC\ssleay32MD.lib" "$(OPENSSL_DIR)\lib\VC\libeay32MD.lib" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
LD_FLAGS=-release -nologo -incremental:no -dll "$(EI_DIR)\lib\ei_md.lib" "$(EI_DIR)\lib\erl_interface_md.lib" "$(OPENSSL_DIR)\lib\VC\ssleay32MD.lib" "$(OPENSSL_DIR)\lib\VC\libeay32MD.lib" MSVCRT.LIB kernel32.lib advapi32.lib gdi32.lib user32.lib comctl32.lib comdlg32.lib shell32.lib
|
||||||
|
|
||||||
$(DLL) : $(OBJECT)
|
$(DLL) : $(OBJECT)
|
||||||
$(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT)
|
$(LD) $(LD_FLAGS) -out:$@ $<
|
||||||
|
|
||||||
$(OBJECT) : $(SOURCE)
|
$(OBJECT) : $(SOURCE)
|
||||||
$(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE)
|
$(CC) $(CC_FLAGS) -c -Fo$@ $<
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user